配置文件上传的Action

配置Struts 2文件上传的Action与配置普通Action并没有太大的不同,一样是指定该Actionname,以及该Action的实现类。当然,还应该为该Action配置<result .../>元素。与之前的Action配置存在的一个小小区别是,该Action还配置了一个<param .../>元素,该元素用于为该Action的属性动态分配属性值。

下面是该应用的struts.xml配置文件代码。

程序清单:codes\04\4.3\simpleUpload\WEB-INF\src\struts.xml

  
  
  
  
  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" 
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">     
  5. <struts>  
  6.     <constant name="struts.custom.i18n.resources" value="mess"/>  
  7.     <!-- 设置该应用使用的解码集 -->  
  8.     <constant name="struts.i18n.encoding" value="GBK"/>  
  9.     <package name="lee" extends="struts-default">  
  10.         <!-- 配置处理文件上传的Action -->  
  11.         <action name="uploadPro" class="org.crazyit.app.action.UploadAction">  
  12.             <!-- 动态设置Action的属性值 -->  
  13.             <param name="savePath">/upload</param>  
  14.             <!-- 配置Struts 2默认的视图页面 -->  
  15.             <result>/WEB-INF/content/succ.jsp</result>    
  16.         </action>  
  17.         <action name="*">  
  18.             <result>/WEB-INF/content/{1}.jsp</result>     
  19.         </action>  
  20.     </package>  
  21. </struts>  

上面的配置文件除了使用<param .../>元素设置了uploadActionsavePath属性值外,与前面的Action几乎完全一样——这再次体现了Struts 2的简单设计。

配置了该Web应用后,如果我们在如图4.32所示的页面中输入文件标题,并浏览到需要上传的文件,然后单击“上传”按钮,该上传请求将被UploadAction处理,处理结束后转入succ.jsp页面,该页面使用了简单的Struts 2标签来显示上传的图片。succ.jsp页面的代码如下。

程序清单:codes\04\4.3\simpleUpload\WEB-INF\content\succ.jsp

  
  
  
  
  1. <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>  
  2. <%@taglib prefix="s" uri="/struts-tags"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  4.     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  5. <html xmlns="http://www.w3.org/1999/xhtml">  
  6. <head>  
  7.     <title>上传成功</title>  
  8. </head>  
  9. <body>  
  10.     上传成功!<br/>  
  11.     文件标题:<s:property value=" + title"/><br/>  
  12.     文件为:<img src="<s:property value="'uploadFiles/'   
  13.         + uploadFileName"/>"/><br/>  
  14. </body>  
  15. </html>  

如果上传成功,将看到如图4.23所示的页面。注意:

上面我们上传时把文件保存到服务器时该文件的文件名依然没有发生改变,这在实际项目中需要改进,因为多个用户并发上传时可能发生文件名相同的情形,因此建议使用java.util.UUID工具类来生成唯一的文件名。

 

         通过上面的开发过程,不难发现通过Struts 2实现文件上传确实是一件简单的事情。只要我们将文件域与Action中一个类型为File的属性关联,就可以轻松访问到上传文件的文件内容——至于Struts 2使用何种Multipart解析器,对开发者完全透明。

提示:Struts 2实现文件上传的编程关键,就是使用了三个属性来封装文件域,其中一个用于封装该文件的文件名,一个用于封装该文件的文件类型,一个用于封装该文件的文件内容。

你可能感兴趣的:(javaee,struts2,开发,李刚)