首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Struts2框架实现文件上传

Struts2框架实现文件上传

开发环境

系统:Windows10 版本1709

JDK:1.8.0_161 32位

IDE: Spring Tool Suite 3.7.3 32位

Struts2版本:2.3.24

服务器版本:apache-tomcat-7.0.52

单文件的上传

环境搭建

导入必要的jar包

必须有commons-fileupload-1.3.1.jar包. 在开发Struts2框架必备的13个jar包中,包含了此jar包.

在web.xml中配置核心的过滤器

在src目录下创建struts.xml文件,并导入约束

文件上传的浏览器的三要素

表单的提交方式必须为post

表单中必须有一个

表单设置enctype="multipart/form-data"

创建一个upload.jsp页面

文件上传的服务器端

创建一个UploadAction的java类

在struts.xml中进行如下的配置

使用Struts2框架实现文件上传.在页面的name属性的名字,必须与文件上传的Java类中定义的File类型变量的名字一样.

文件类型和文件名称的变量名也必须为name之后的拼接

注意上传的文件是个临时文件,服务器重启后,文件就不存在了. 要想永久的保存,需要指定一个本地硬盘的目录.

文件上传出现的问题以及解决方案

文件的大小问题

如果上传一个较大的文件,控制台会报空指针异常.这个空指针的异常信息不够详细.

把当前的文件上传的java类继承ActionSupport类底层会去调用保存错误信息的方法. 并且在struts.xml文件中,开启开发者模式.

再次上传一个较大的文件,会发现这次在报的错误不再是空指针异常. 控制台报错信息如下:

这是说当前的文件上传的java类没有配置result 的input视图.

这是因为Struts底层的拦截器如果出现问题,那么就会把错误信息存储到action中, workflow的拦截器负责控制跳转到指定的input视图.

在struts.xml中的\标签中配置\名为input的视图 ,标签体为error.jsp

在WebContent下新建一个error.jsp页面

在jsp页面的顶部导入struts2框架的标签

在页面中写上struts的标签 用来显示提示错误信息

以上的操作做完了之后, 再次上传一个较大的文件.会在浏览器上看到如下的错误提示信息

提示是说,请求超出了最大的允许界限

原因是在struts2框架default.properties配置文件中,定义了默认的文件上传大小为2097152字节(byte)为2M.

在struts.xml的配置文件中,修改这个常量的大小.

修改为20M. 再次上传一个小于20M的文件后,就不会报错了. 这个文件大小的范围,依据实际的需求而设定.

以上的改变常量方法是对所有的action生效,要想仅仅使一个action生效,设置上传文件的大小,需要在标签中设置

查看FileUploadInterceptor这个拦截器的源码

发现有如下的属性:

分别代表的是设置文件的最大大小,设置运行的文件类型,设置文件运行的后缀名.

有如下的set方法,设置参数.

上传文件允许的后缀名

在如下的struts.xml中,配置如下:

设置了只允许上传后缀名为avi,txt结尾的文件

实验上传一个.doc后缀名的文件

浏览器上会有如下的报错信息 :提示了doc后缀名是不允许的.

多文件的上传

新建一个multipload.jsp的页面

设置了三个文件上传框

新建一个MultiUploadAction

在原来的属性中,把FIle设置为List集合,或者是数组.

以下为设置了数组.遍历每一个数组的元素.通过索引获取数组的文件名和文件.

以下是List集合的方式

通过list.size()来控制集合的遍历,通过get(index)来获取集合的每一个元素

在配置文件中新建一个action的配置

多文件上传的测试

在服务器中部署项目,访问multipload.jsp页面

选择三个小于2M的文件进行选择文件上传测试.点击上传后,成功在服务器的upload文件夹下上传了文件

注解开发

注解配置文件上传

注解的方式配置action类 单个的文件上传

在class 上配置namespace 和parentPackage

注意单文件的上传@ParentPackage的值为"upload_demo",因为在struts.xml设置了拦截器,起了包名为"upload_demo"

在方法上配置@Action @InterceptorRef @Result

注解的方式的配置多文件的上传

```

struts.xml中的内容如下

总结

相比较于使用单纯的javaweb开发FileUpload来实现文件上传,使用Struts2框架的文件上传更加的简洁方便,相关的文件上传的控制也更加的方便.但需要对Struts2框架有所熟悉,才能灵活的运用Strust2的文件上传功能.

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180424G0IZOZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券