struts2文件上传下载及笔记整理 struts2文件上传下载
刚刚学了一点struts2的使用及邮件的发送,就迫不及待的将之前的作业升级了下,以下是通过刚学的东西添加的以下功能。
第5.1个版本,实现以下功能:
i,对注册功能做了优化,用户在登录的时候必须输入邮箱,提交注册后服务器会自动发邮件到用户邮箱完成后续的注册,在utils中添加了一个MailUtil类用于发送邮件,主要实现思路是,在用户注册的时候将用户提交的表单封装起来存到session中, 同时产生一个UUID同样将其存放到session中,且将它以url参数的形式发送到用户的邮箱中,用户点击邮箱中的链接后获取链接 后的参数,如果和session中的值一致,则获取session中封装的表单完成注册。
j,使用struts框架替代view的servlet,程序的维护性和扩展性得到扩展。
1)添加struts开发所用的jar包,使用user包统一存放,方便管理。
2)在web-xml中添加struts核心的过滤器。
3)在src目录下创建一个struts.xml配置文件
4)创建一个cn.itcast.web.control包,用于存放处理customer和login表的Action,在包下还创建了Customer.xml 和Login.xml用于分别配置两张表的action,在struts.xml分别引入两个第一是方便管理维护,第二是struts.xml中的内容不至于太多。
k,在Login添加一个image字段,用于存放用户的头像路径,提供登录用户除密码外所有信息的页面。可以点击下载头像。使用struts2的文件上传下载实现功能。
-------------------------------------------------------------------------------------------------------------------------------------
以下是作业过程中遇到的一些需要注意的地方。
1)使用strut2核心过滤器以后,想要使用自定义过滤器则必须在web.xml中strut2核心过滤器注册之前注册才能使用,否则自定义的过滤器不会执行(原因未知,只是发现这个现象)。
2)文件的上传下载和之前有不同,文件上传:和之前的表单一样,同样要声明是enctype="multipart/form-data"的表单。其他代码如下
Action中: private File fileimage;
private String fileimageFileName; // 文件名
private String fileimageContentType; // 文件类型
.......//getset方法省略
public String uplodeFile(){
try {
//上传头像
String path=ServletActionContext.getServletContext().getRealPath("/userImage");
File destfile=new File(path, this.fileimageFileName);
FileUtils.copyFile(fileimage, destfile);
} catch (IOException e) {
ServletActionContext.getRequest().setAttribute("message", "对不起,文件上传失败!");
return INPUT;
}
}
struts.xml中:
<action name="loginRegister" class="cn.itcast.web.control.RegisterAction"
method="loginRegister">
<result name="self">/WEB-INF/jsp/register.jsp</result>
<result name="input">/WEB-INF/jsp/message.jsp</result>
<!-- 限制上传的文件类型 -->
<interceptor-ref name="defaultStack">
<!-- 根据文件类型限制 <param name="fileUpload.allowedTypes">文件的MIME类型</param> -->
<!-- 根据文件扩展名限制 ; 如果文件类型与文件扩展名同时使用,会取交集! -->
<param name="fileUpload.allowedExtensions">jpg,png,jpeg</param>
</interceptor-ref>
</action>
想要限制上传文件的大小则还得加上这句:
<!-- 修改上传文件大小限制:10M -->
<constant name="struts.multipart.maxSize" value="10485760"></constant>
文件下载:
文件下载相对步骤多些比较重要的几点是,1给配置文件中加上几个参数,且result的类型必须为stream,2在action中为这几个参数在struts调用之前赋值,参数分别是下载文件类型、文件流、缓冲大小、下载文件的响应头(里面需要设置文件名)具体代码如下:
<action name="down" class="cn.itcast.web.control.DownLodeAction" method="down">
<!-- 返回结果名称为 :downFile 对应的应该是文件流-->
<result name="success" type="stream">
<!-- 下载的文件类型:二进制文件 -->
<param name="contentType">application/octet-stream</param>
<!-- 对应的action中的返回流的属性名称 -->
<param name="inputName">inputStream</param>
<param name="contentDisposition">attachment;filename=${downLoadFileName}</param>
<param name="bufferSize">1024</param>
</result>
</action>
也可以使用之前的方式,不使用struts的方法(及只操作fileuplode组件实现下载),只需要在action方法中添加实现下载的代码,返回值设置为null,同样result中的type指定为stream即可。
-------------------------------------------------------------------------------------------------------------------------------
使用struts的时候发现发布后马上使用可能会出现更新不及时的情况,好几次都是发布到tomcat后马上浏览发现有问题,然后马上调试一步步调试发现又没问题跟着设定的逻辑走,不知道是机子的原因还是啥原因。