配置Struts 2文件上传的Action与配置普通Action并没有太大的不同,一样是指定该Action的name,以及该Action的实现类。当然,还应该为该Action配置<result .../>元素。与之前的Action配置存在的一个小小区别是,该Action还配置了一个<param .../>元素,该元素用于为该Action的属性动态分配属性值。
下面是该应用的struts.xml配置文件代码。
程序清单:codes\04\4.3\simpleUpload\WEB-INF\src\struts.xml
- <?xml version="1.0" encoding="GBK"?>
- <!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
- "http://struts.apache.org/dtds/struts-2.1.7.dtd">
- <struts>
- <constant name="struts.custom.i18n.resources" value="mess"/>
- <!-- 设置该应用使用的解码集 -->
- <constant name="struts.i18n.encoding" value="GBK"/>
- <package name="lee" extends="struts-default">
- <!-- 配置处理文件上传的Action -->
- <action name="uploadPro" class="org.crazyit.app.action.UploadAction">
- <!-- 动态设置Action的属性值 -->
- <param name="savePath">/upload</param>
- <!-- 配置Struts 2默认的视图页面 -->
- <result>/WEB-INF/content/succ.jsp</result>
- </action>
- <action name="*">
- <result>/WEB-INF/content/{1}.jsp</result>
- </action>
- </package>
- </struts>
上面的配置文件除了使用<param .../>元素设置了uploadAction的savePath属性值外,与前面的Action几乎完全一样——这再次体现了Struts 2的简单设计。
配置了该Web应用后,如果我们在如图4.32所示的页面中输入文件标题,并浏览到需要上传的文件,然后单击“上传”按钮,该上传请求将被UploadAction处理,处理结束后转入succ.jsp页面,该页面使用了简单的Struts 2标签来显示上传的图片。succ.jsp页面的代码如下。
程序清单:codes\04\4.3\simpleUpload\WEB-INF\content\succ.jsp
- <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
- <%@taglib prefix="s" uri="/struts-tags"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <title>上传成功</title>
- </head>
- <body>
- 上传成功!<br/>
- 文件标题:<s:property value=" + title"/><br/>
- 文件为:<img src="<s:property value="'uploadFiles/'
- + uploadFileName"/>"/><br/>
- </body>
- </html>
如果上传成功,将看到如图4.23所示的页面。注意:
通过上面的开发过程,不难发现通过Struts 2实现文件上传确实是一件简单的事情。只要我们将文件域与Action中一个类型为File的属性关联,就可以轻松访问到上传文件的文件内容——至于Struts 2使用何种Multipart解析器,对开发者完全透明。
提示:Struts 2实现文件上传的编程关键,就是使用了三个属性来封装文件域,其中一个用于封装该文件的文件名,一个用于封装该文件的文件类型,一个用于封装该文件的文件内容。
本文转自fkJava李刚 51CTO博客,原文链接:http://blog.51cto.com/javaligang/889833 ,如需转载请自行联系原作者