锁定老帖子 主题:在Struts 2中实现文件上传
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-10-03
实现原理Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。 具体实现前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts作为框架的。以下是例子所依赖类包的列表:
首先,创建文件上传页面FileUpload.jsp,内容如下: <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncoding = " utf-8 " %>
清单2 FileUpload.jsp
<% @ 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 > Struts 2 File Upload </ title > </ head > < body > < s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data" > < s:file name ="myFile" label ="Image File" /> < s:textfield name ="caption" label ="Caption" /> < s:submit /> </ s:form > </ body > </ html > 在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。接下来,<s:file/>标志将文件上传控件绑定到Action的myFile属性。 其次是FileUploadAction.java代码: 在FileUploadAction中我分别写了setMyFileContentType、setMyFileFileName、setMyFile和setCaption四个Setter方法,后两者很容易明白,分别对应FileUpload.jsp中的<s:file/>和<s:textfield/>标志。但是前两者并没有显式地与任何的页面标志绑定,那么它们的值又是从何而来的呢?其实,<s:file/>标志不仅仅是绑定到myFile,还有myFileContentType(上传文件的MIME类型)和myFileFileName(上传文件的文件名,该文件名不包括文件的路径)。因此,<s:file name="xxx" />对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。 FileUploadAction作用是将浏览器上传的文件拷贝到WEB应用程序的UploadImages文件夹下,新文件的名称是由系统时间与上传文件的后缀组成,该名称将被赋给imageFileName属性,以便上传成功的跳转页面使用。 下面我们就来看看上传成功的页面: <% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncoding = " utf-8 " %>
清单4 ShowUpload.jsp
<% @ 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 > Struts 2 File Upload </ title > </ head > < body > < div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" > < img src ='UploadImages/<s:property value ="imageFileName" /> ' /> < br /> < s:property value ="caption" /> </ div > </ body > </ html > ShowUpload.jsp获得imageFileName,将其UploadImages组成URL,从而将上传的图像显示出来。 然后是Action的配置文件: <? xml version="1.0" encoding="UTF-8" ?>
清单5 struts.xml
<! DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > < struts > < package name ="fileUploadDemo" extends ="struts-default" > < action name ="fileUpload" class ="tutorial.FileUploadAction" > < interceptor-ref name ="fileUploadStack" /> < result name ="success" > /ShowUpload.jsp </ result > </ action > </ package > </ struts > fileUpload Action显式地应用fileUploadStack的拦截器。 最后是web.xml配置文件: <? xml version="1.0" encoding="UTF-8" ?>
清单6 WEB-INF/web.xml
< web-app id ="WebApp_9" version ="2.4" xmlns ="http://java.sun.com/xml/ns/j2ee" xmlns:xsi ="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" > < display-name > Struts 2 Fileupload </ display-name > < filter > < filter-name > struts-cleanup </ filter-name > < filter-class > org.apache.struts2.dispatcher.ActionContextCleanUp </ filter-class > </ filter > < filter > < filter-name > struts2 </ filter-name > < filter-class > org.apache.struts2.dispatcher.FilterDispatcher </ filter-class > </ filter > < filter-mapping > < filter-name > struts-cleanup </ filter-name > < url-pattern > /* </ url-pattern > </ filter-mapping > < filter-mapping > < filter-name > struts2 </ filter-name > < url-pattern > /* </ url-pattern > </ filter-mapping > < welcome-file-list > < welcome-file > index.html </ welcome-file > </ welcome-file-list > </ web-app > 发布运行应用程序,在浏览器地址栏中键入:http://localhost:8080/Struts2_Fileupload/FileUpload.jsp,出现图示页面:
选择图片文件,填写Caption并按下Submit按钮提交,出现图示页面: 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 930 次