Struts2文件上传原理及示例详解

<span style="font-size:24px;color:#ffffff;"><strong style="background-color: rgb(204, 102, 204);">一、文件上传原理:</strong></span>

1)文件上传几乎是每个Web应用实现的一个必须模块。文件上传的实现需要将表单的enctype属性设置为multipart/form-data,使表单数据以二进制编码的方式提交,在接收此请求的Action(或Servlet)中使用二进制流来获取内容,就可以取得上传文件的内容,从而实现文件的上传。

2)在Java领域中,有两个最常用的文件上传项目:一个是Apache组织Jakarta的Common-FileUpload组件(http://commons.apache.org/fieupload/),另一个是Oreilly组织的COS框架(http://www.servlet.com/cos/),这两个框架使用起来都很方便,在项目开发中一般使用Common-FileUpload框架较多,使用该框架需要如下两个jar包:commons-fileupload-1.3.1.jar 和 commons-io-2.2.jar。

3)由于Struts2并未提供自己的请求解析器,因为需要调用Common-FileUpload或COS框架来解析前台以multipart/form-data形式提交过来的表单请求,由于Struts2在两种框架上又进一步做了封装,所以,无论我们使用这两种框架中的哪一种,操作都是一样的。Struts2默认使用的是Jakarta的Common-FileUpload框架,我们可以打开struts2-core-2.3.16.jar,在org.apache.struts2包下找到名为 default.properties 的默认常量配置文件,代码如下:


4)第69行代码定义了默认使用的上传解析器为Jakarta,也就是Common-FileUpload框架,如果需要修改为COS,可以项目的struts.xml中覆盖此常量:

<constant name="struts.multipart.parser" value="cos"></constant>

或者在struts.properties中修改:

struts.multipart.parser=cos


二、示例演示:


1) 在项目中添加struts2常用jar包,其中包括 commons-fileupload-1.3.1.jar 和 commons-io-2.2.jar :



2) 创建首页JSP页面:



3)上传文件成功页面(显示文件名和文件类型:



4) 配置Action.xml文件


注:<parem>参数用于设置 FileUploadAction类的savePath属性,/UploadFile表示文件上传到项目根目录(WebRoot目录)的UploadFile文件夹下


5) 编写FileUploadAction类:


注:四个属性的get、set访问方法没有截图出来,大家一定不要忘了设置哈~


6)web.xml就不用说了吧:


下面开始测试!我在首页选择了系统桌面上一个名为66666.png的图片:

点击上传后成功跳转到了uploadResult.jsp页面:

注意,我在Action中设置的路径是"/UploadFile",这个文件夹和WEB-INF文件夹是平级的,上传成功后在项目里这个文件夹显示里面没有文件,但实际上在G:\eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\FileUploadTest\UploadFile 文件夹下,也就是Eclipse的工作空间下是有的,说明文件实际上是成功上传的:



不知道MyEclipse下表现怎么样,反正本人一直不喜欢用Eclipse,总有一些莫名其妙的错误。无奈机器内存4G都跑不动MyEclipse。。。OK,至此Struts2文件上传结束。


===============================================================================================================================

博主原创,转载请注明文章出处:http://blog.csdn.net/u012150261


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值