`
明天会更浩
  • 浏览: 5526 次
  • 性别: Icon_minigender_1
社区版块
存档分类

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后马上浏览发现有问题,然后马上调试一步步调试发现又没问题跟着设定的逻辑走,不知道是机子的原因还是啥原因。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics