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 ,