处理 Struts2 框架上传的文件(转http://xinkong1010.javaeye.com/blog/654623)
来源:互联网 发布:淘宝贝高瞻幼儿园健达 编辑:程序博客网 时间:2024/05/22 18:52
处理 Struts2 框架上传的文件文章分类:Java编程 手工处理 Struts2 框架上传的文件 在使用了 Struts2 框架的系统中,对于处理像下面这种表单上传文件时: view source print? 1.
自然而然的想法就是在 Action 中声明变量 File upload 和 String desc,请求提交到这个 Action 后,在 execute() 方法中就能直接使用 upload 和 desc 了,它们已被 Struts2 框架(org.apache.struts2.interceptor.FileUploadInterceptor 监听器) 赋上了相应的值了。 因为维护的是一个古老的项目,请求都是直接提交给 jsp。在这个项目中套上了 Struts2 已是不易了。原来项目是用的 jspSmartUpload 来处理上传文件的,Struts2 一上 jspSmartUpload 便不能正常工作了,因为 Struts2 的过滤器 org.apache.struts2.dispatcher.FilterDispatcher 拦截的是所有的请求,在交把请求交给 jspSmartUpload 之前请求 request 就已被处理过了,即使是把 struts2-core-2.x.x.jar 中的 struts-default.xml fileUpload 取消了也是如此。 暂时又不想再新加一个 Action,声明 upload:File 和 desc:String 直接接收参数,这样改动的话实在是大,现在 struts.xml 和 struts.properties 文件还是空的呢。所以姑且在原来那个 jsp 中处理吧。 最早做过 jsp 文件上传的人都知道,给 form 加上 enctype="multipart/form-data" 属性后,request.getParameter("desc") 取输入框的值就失灵了,因为页面请求数据是以流的形式发送给服务器的,所以 jspSmartUpload 用了它自己的 Request, com.jspsmart.upload.SmartUpload.getRequest().getParameter("desc") 来接收文本框数据,但对于 Struts2 处理过的 request jspSmartUpload 就无能为力了。 那么在 Struts2 中的 jsp 如何获取到 enctype="multipart/form-data" 表单传递过来的文本输入和文件呢? ·获取文本框的值 ,仍然可用 request.getParameter("desc"),因为此时的 request 是由 org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper 实现的。 对比一下不同时候 request 的具体实现类(Tomcat 环境中) form enctype multipart/form-data application/x-www-form-urlencoded Struts2 org.apache.struts2.dispatcher.multipart .MultiPartRequestWrapper org.apache.struts2.dispatcher .StrutsRequestWrapper Struts1 org.apache.struts.upload .MultipartRequestWrapper org.apache.coyote.tomcat5 .CoyoteRequestFacade 无框架 org.apache.coyote.tomcat5 .CoyoteRequestFacade org.apache.coyote.tomcat5 .CoyoteRequestFacade ·获取上传来的文件 用就要对 request 作个转型,才能调用到相应的方法 view source print? 1.MultiPartRequestWrapper mpRequest = (MultiPartRequestWrapper)request; 2. 3.File[] files = mpRequest.getFiles("upload"); //文件现在还在临时目录中 4.String[] fileNames = mpRequest.getFileNames("upload"); 5. 6.//然后就可以处理你的业务了 其他方法可以查看 MultiPartRequestWrapper API,MultiPartRequestWrapper 是继承自 org.apache.struts2.dispatcher.StrutsRequestWrapper 的。 最后,用了 Struts2 来上传文件,最好在 web.xml 中加上 ActionContextCleanUp 过滤器以避免一些未不预知的异常。 view source print? 01. 02. struts-cleanup 03. org.apache.struts2.dispatcher.ActionContextCleanUp 04. 05. 06. 07. struts-cleanup 08. /* 09. 网上有人说是要加 ActionContextCleanUp 过滤器的,ActionContextCleanUp 的代码注释是它易于同 SiteMesh 的整合,至于为何与文件上传扯上关系,我以后也会关注的。 对了还要在项目中引入 commons-fileupload-x.x.x.jar 和 commons-io-x.x.jar 包,其他没有什么特别的配置,默认即可。相信本文的实用性不强,不会有人用 jsp 来处理这些事情,参考价值可能还有一些。
- 处理 Struts2 框架上传的文件(转http://xinkong1010.javaeye.com/blog/654623)
- java FTP上传文件(http://sydxide2006.javaeye.com/blog/111646)
- Struts2 表单提交 POJO(续)(转http://hdxiong.javaeye.com/blog/343981)
- java时间处理 转至:http://abushuia.javaeye.com/blog/145945
- mysql修改表结构alter,转自:http://waryist.javaeye.com/blog/104739 waryist的blog
- asp.net实现文件下载(转http://hsys.javaeye.com/blog/516324)
- Hadoop(转自http://caibinbupt.javaeye.com/blog/262412)
- DB2常用命令(转http://yanmouse.javaeye.com/blog/339663)
- spring propertyConfigurer 使用(转http://xbcoil.javaeye.com/blog/631764)
- oracle的jdbc连接方式:oci和thin[转](转http://jenfeezo.javaeye.com/blog/737190)
- C++拷贝构造函数的几个细节(转自:http://grantren.javaeye.com/blog/43289)
- 在eclipse中生成英文的javadoc(转自:http://zyp731.javaeye.com/blog/98432)
- Windows XP下MinGW的安装与配置 转自http://colorado.javaeye.com/blog/283779
- table设置height属性不起作用的解决办法(转:http://chenfengcn.javaeye.com/blog/390508)
- 几个有用的开源镜像 转自:http://hellojinjie.javaeye.com/blog/902800
- Jsp页面传值的方法(转自http://jzgl-javaeye.iteye.com/blog/372349#)
- http://heweiya.javaeye.com/blog/101575
- http://zangweiren.javaeye.com/blog/208122
- 解决netbeans在linux下安装时出现乱码的问题
- COM组件 C4772 错误解决
- flex 联机游戏开发 - 中国象棋游戏:(一)核心逻辑
- svn+apache配置
- 静态页面html、shtml增加动态内容 使用apache ssi
- 处理 Struts2 框架上传的文件(转http://xinkong1010.javaeye.com/blog/654623)
- Ucos II 的移植之一
- http://blog.csdn.net/Somnusxyb_许亚宾_http://blog.csdn.net/heima
- Ucos II 移植之二
- 将图片导出至Excel
- 学习java的准备
- Google Map 外部链接触发图标
- Flex富应用开发使用Cairngorm 微体系结构框架(一)
- 使用apache的ZipOutputStream进行zip文件压缩