当前位置:编程学习 > JS >>

Struts2学习笔记

1.   Struts2文件上传
1.1表单三要素
  1)表单必须以POST方式提交,因为GET方式提交会有大小的限制(大约2000个字符),对POST,无大小限制要求。

  2)表单必须加入enctype="multipart/form-data"表示上传的文件,以随着请求体,经过编码后,一同传入服务器。

  3)每个表单项,必须取一个名字,因为服务端便于能过名字收集信息。

这里使用Struts2的标签:

      <s:form action="upload"method="post"enctype="multipart/form-data">

          <s:textfieldlabel="用户名"name="username"/>

          <s:filelabel="上传文件"name="upload"/>

          <s:submitvalue="提交"/>

      </s:form>

1.2框架自身有fileUpload文件上传易做图
1)在默认栈中,有一个fileUpload文件上传易做图,无文件下载易做图(要程序员自己处理)。org.apache.struts2.interceptor.FileUploadInterceptor(框架的易做图)

 

2)在默认情况下,fileUpload易做图只能上传不超过2M(默认)的数据,而且struts2框架的上传易做图底层就是使用jakarta common fileupload开源组件来完成上传的,和传统Web应用上传一样。

 

1.3 fileUpload易做图,自动注入三个参数
    privateFile upload;//上传临时文件(fileUpload易做图传入的参数)

       privateString uploadContentType;//上传文件的类型(fileUpload易做图传入的参数)

    privateString uploadFileName;//上传文件的真实文件名(fileUpload易做图传入的参数)

注意:upload和表单项<s:file>中的name属性一致;upload拼上 contentType 首字母c要大写。

 

1.4上传文件细节
1)上传成功的时候临时文件要删除

//关闭资源,并删除临时文件,应在finally中处理的

          if(is !=null) is.close();

          if(os !=null) os.close();

          if(upload.exists())upload.delete();

2)上传文件总大小限制(上传多个文件时加起来的大小)(框架默认是2M)

 在struts.xml中配置:<constantname="struts.multipart.maxSize" value="20971520"/>

或在struts.properties中配置struts.multipart.maxSize=20971520

超过限制抛异常:

org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException

 

3)上传文件单个大小限制

  <!-- 设置[单]个上传文件不得超过5M -->

  <param name="maximumSize">5242880</param>

 

 

4)上传文件扩展名限制

      <!--设置上传文件的扩展名-->

       <paramname="allowedExtensions">.jpg,.txt</param>

 

5)上传文件类型限制

       <!--设置上传文件的类型-->

       <paramname="allowedTypes">image/pjpeg,text/plain</param>

      <action name="UploadAction"class="com.maple.upload.action.UploadAction"method="execute">

                <resultname="success"type="dispatcher">/WEB-INF/upload_success.jsp</result>

                <resultname="input"type="dispatcher">upload.jsp</result><!--有错时转到该页面 -->

<!-- 给框架默认文件上传易做图(FileUploadInterceptor)设置值 -->

                 <interceptor-refname="fileUpload"><!-- name的值固定,可以在struts-default.xml文件中找到 -->

                <!--    设置上易做图个文件大小为5M -->

                     <param name="maximumSize">5242880</param>

                     <!-- 设置上传文件的后缀名 -->

                     <param name="allowedExtensions">jpg,txt,doc,avi</param>

                     <!-- 设置上传文件的内容类型 -->

                     <param name="allowedTypes">image/jpeg,text/plain,application/msword,video/x-msvideo</param>

                </interceptor-ref>

                <interceptor-refname="defaultStack"/><!--这个是默认的易做图,如果申明了其他易做图,必须显式申明引用默认的 -->

          </action>(如果没有显式引用则会报空指针,和JavaBean中必须有空参构造器类似)

1.5覆盖系统的提示信息 
       写一个任意.properies文件,存放的位置也是任意,在里面覆盖系统指定的key=value.

即覆盖struts-messages.properties文件。

       在struts.xml文件中,加入以下代码,以至于让框架在错误提示时,找用户自定义的properties文件

       <constant name="struts.custom.i18n.resources"value="配置文件的路径 "/>

 

      <!-- value值不需要后缀名,可以放多个,用英文逗号隔开 -->

      <constant name="struts.custom.i18n.resources"value="my_message"/>value值的就是资源文件的路径。

 

1.6上传多个文件

      private File[]upload;

      private String[]uploadContentType;

      private String[]uploadFileName;

收集参数时,可以使用数组,也可以使用集合List。

表单中的<s:file>标签的name属性值要一样,这里全为upload。

      <s:form action="UploadAction"method="post"enctype="multipart/form-data">

          <s:textfieldlabel="用户名"name="username"/>

          <s:filelabel="上传文件1"name="upload"/>

          <s:filelabel="上传文件2"name="upload"/>

          <s:filelabel="上传文件3"name="upload"/>

          <s:submitvalue="提交"/>

      </s:form>

1.6将参数注入Action中
在XxxAction中,有个字段叫uploadPath,提供setter和getter方法。在struts.xml文件中可以为其赋值,在对应的action节点中添加param节点。如:

      <action name="UploadAction"class="com.maple.upload.action.UploadAction"method="

补充:Web开发 , Jsp ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,