- 浏览: 112464 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (59)
- Java (2)
- ExtJS (0)
- Struts1.2 (0)
- Struts2.0 (16)
- Hibernate (1)
- Spring (4)
- Ibatis (5)
- Java基础 (3)
- J2EE (1)
- J2ME (0)
- JSP (0)
- DWR (1)
- HTTP (4)
- MySQL (3)
- WEB前端 (2)
- Jquery Plugin (0)
- Jquery1.4 (0)
- JavaScript (1)
- Eclipse (2)
- web服务器—apache (2)
- web服务器—Nginx (0)
- CXF (1)
- 淘宝技术 (1)
- Oracle (1)
- Maven (0)
- 项目管理 (1)
- 二维码 (0)
最新评论
-
dream_h:
新手 学习了
java 使用jdbc调用 oracle 存储过程 -
dream_h:
[flash=200,200][url][img][list] ...
java 使用jdbc调用 oracle 存储过程 -
brucewuzhao:
请问楼主,用post方法提交要是传2个参数应该怎么写?
HttpURLConnection发起GET和POST两种方式 -
科比积木:
受教了,多谢分享
JAVA获得客户端IP两种方法 -
科比积木:
将字符串信息转换为json格式,返回前台js中
struts2如何返回String
前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题, 所以今天我们就来讨论一下这个问题。
实现原理
Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件。
具体实现
前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts作为框架的。以下是例子所依赖类包的列表:
清单1 依赖类包的列表
首先,创建文件上传页面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 >
清单2 FileUpload.jsp
在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。接下来,<s:file/>标志将文件上传控件绑定到Action的myFile属性。
其次是FileUploadAction.java代码:
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class FileUploadAction extends ActionSupport {
private static final long serialVersionUID = 572146812454l ;
private static final int BUFFER_SIZE = 16 * 1024 ;
private File myFile;
private String contentType;
private String fileName;
private String imageFileName;
private String caption;
public void setMyFileContentType(String contentType) {
this .contentType = contentType;
}
public void setMyFileFileName(String fileName) {
this .fileName = fileName;
}
public void setMyFile(File myFile) {
this .myFile = myFile;
}
public String getImageFileName() {
return imageFileName;
}
public String getCaption() {
return caption;
}
public void setCaption(String caption) {
this .caption = caption;
}
private static void copy(File src, File dst) {
try {
InputStream in = null ;
OutputStream out = null ;
try {
in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
byte [] buffer = new byte [BUFFER_SIZE];
while (in.read(buffer) > 0 ) {
out.write(buffer);
}
} finally {
if ( null != in) {
in.close();
}
if ( null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static String getExtention(String fileName) {
int pos = fileName.lastIndexOf( " . " );
return fileName.substring(pos);
}
@Override
public String execute() {
imageFileName = new Date().getTime() + getExtention(fileName);
File imageFile = new File(ServletActionContext.getServletContext().getRealPath( " /UploadImages " ) + " / " + imageFileName);
copy(myFile, imageFile);
return SUCCESS;
}
}
清单3 tutorial/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属性,以便上传成功的跳转页面使用。
下面我们就来看看上传成功的页面:
<% @ 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 >
清单4 ShowUpload.jsp
ShowUpload.jsp获得imageFileName,将其UploadImages组成URL,从而将上传的图像显示出来。
然后是Action的配置文件:
<! 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 >
清单5 struts.xml
fileUpload Action显式地应用fileUploadStack的拦截器。
最后是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 >
清单6 WEB-INF/web.xml
发布运行应用程序,在浏览器地址栏中键入:http://localhost:8080/Struts2_Fileupload/FileUpload.jsp,出现图示页面:
清单7 FileUpload页面
选择图片文件,填写Caption并按下Submit按钮提交,出现图示页面:
清单8 上传成功页面
更多配置
在运行上述例子,如果您留心一点的话,应该会发现服务器控制台有如下输出:
INFO: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
Mar 20 , 2007 4 : 08 : 43 PM org.apache.struts2.interceptor.FileUploadInterceptor intercept
INFO: Removing file myFile C:\Program Files\Tomcat 5.5 \work\Catalina\localhost\Struts2_Fileupload\upload_251447c2_1116e355841__7ff7_00000006.tmp
清单9 服务器控制台输出
上述信息告诉我们,struts.multipart.saveDir没有配置。struts.multipart.saveDir用于指定存放临时文件的文件夹,该配置写在struts.properties文件中。例如,如果在struts.properties文件加入如下代码:
清单10 struts配置
这样上传的文件就会临时保存到你根目录下的tmp文件夹中(一般为c:\tmp),如果此文件夹不存在,Struts 2会自动创建一个。
错误处理
上述例子实现的图片上传的功能,所以应该阻止用户上传非图片类型的文件。在Struts 2中如何实现这点呢?其实这也很简单,对上述例子作如下修改即可。
首先修改FileUpload.jsp,在<body>与<s:form>之间加入“<s:fielderror />”,用于在页面上输出错误信息。
然后修改struts.xml文件,将Action fileUpload的定义改为如下所示:
< interceptor-ref name ="fileUpload" >
< param name ="allowedTypes" >
image/bmp,image/png,image/gif,image/jpeg
</ param > color: #
发表评论
-
struts2的struts.properties配置文件详解
2011-12-15 10:35 941struts.action.extension 该属性 ... -
test66666666
2011-09-21 01:30 665tetttttttttttttttttttttt -
Struts2.0实现零配置..自己学习看看
2009-08-25 22:17 1190自从ror热潮席卷web开发界以来,惯例优于配置的快速开发理念 ... -
struts2中如何使s:select标签只读
2009-08-25 22:01 4930在开发openjweb平台期间遇到这样一个问题,在编辑页面中, ... -
Struts2的自定义拦截器
2009-08-25 21:55 1121假设有一个web应用,就是简单的有一个简单的登陆页面和 ... -
struts2的异常处理
2009-08-25 21:54 974struts2进行异常处理首先需要添加exception拦截器 ... -
struts2的Interceptors
2009-08-25 21:49 3520自定义一个拦截器和使用拦截器的方法如下 引用<packa ... -
Struts2.1使用ajax的准备工作
2009-08-25 21:44 1511在使用ajax标签之前,需要做几个准备工作 1.将stru ... -
struts2 ajax标签之div
2009-08-25 21:43 2620div是struts2 ajax中最基础的标签,其他的 ... -
struts2如何返回String
2009-08-25 21:42 3374有时候ajax应用只需要服务器返回一个字符串而不是一个jsp页 ... -
Struts2系列——struts2的struts.properties(部分转载)
2009-08-25 21:41 1174struts.properties文件定义了Struts 2框 ... -
Struts2.0中的namespace
2009-08-25 21:38 3886在package里有个namespace的属性,它提供了一个 ... -
Struts2.0中的Action
2009-08-25 21:36 930action映射是struts2框架的基本工作单元,通常 ... -
Struts2.0中的result标签
2009-08-25 21:24 2944在action的指定方法执行完毕后总会返回一个字符串,stru ... -
Struts2.0标签库简介
2009-08-25 21:15 979struts2.0里的标签没有分类,只用在jsp头文件加上&l ...
相关推荐
01 为Struts 2.0做好准备 02 常用的Struts 2.0的标志(Tag) 03 Struts 2.0的Action讲解...09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新表单标志的使用 13 Struts 2与AJAX
Struts 2.0系列(MAX),pdf格式,全方位介绍struts2: 常用的Struts 2.0的标志(Tag)介绍 ...在Struts 2中实现文件上传 在Struts 2中实现CRUD Struts 2中的OGNL Strus 2的新表单标志的使用 Struts 2与AJAX
5. **插件架构**:Struts2.0具有丰富的插件支持,如文件上传、日期时间选择等,这些插件可以轻松地扩展框架功能。 SSH集成步骤: 1. **Spring**:Spring提供依赖注入(DI)和面向切面编程(AOP),负责管理和协调...
文件上传是Web应用中的常见需求,Struts2.0提供了完善的文件上传解决方案。它利用MultipartResolver接口处理多部分请求,支持单文件和多文件上传。开发者只需简单配置,即可轻松实现文件上传功能。 十、Struts2.0中...
在Struts2.0框架中实现文件上传进度是一项常见的需求,尤其在用户上传大文件时,实时显示上传进度可以提供更好的用户体验。本文将详细介绍如何利用Struts2.0的监听器来实现这一功能。 首先,我们需要理解文件上传的...
09 在Struts 2中实现文件上传 10 在Struts 2中实现CRUD 11 Struts 2中的OGNL 12 trus 2的新表单标志的使用 13 Struts 2与AJAX Struts2中用Spring实现IoC.doc Struts2中的零配置与CoC(Convention over Configration...
这个源代码包包含了Struts2.0的核心功能以及实现上传与下载功能和数据库操作的示例。 Struts2的核心概念之一是模型-视图-控制器(MVC)架构,它将业务逻辑、数据和用户界面分离开来,使得开发者可以独立地处理各个...
包含了Struts2.0的进阶主题,如动态方法调用(Dynamic Method Invocation,DMI)、OGNL(Object-Graph Navigation Language)表达式语言的使用、异常处理机制、国际化(Internationalization, i18n)支持以及文件上传...
这个上传的压缩包包含了Struts2.0运行所需的全部JAR文件,这些文件是开发基于Struts2.0的应用程序所必需的。 在Java开发中,JAR(Java Archive)文件是一种归档格式,用于收集多个类文件和其他资源,以便在Java...
此外,书中可能还涵盖了使用Struts2.0与其他技术的集成,如Spring、Hibernate等,以实现更全面的企业级应用开发。 开发事例教程部分,可能会包括创建简单的登录注册模块、文件上传下载功能、表单验证、国际化处理、...
Struts2.0 是一个基于 Model-View-Controller (MVC) 设计模式的Java Web框架,它旨在简化Web应用的开发。Struts 2.0是在Struts 1.x的基础上进行了改进,以解决原有版本的一些局限性,如代码量过多、单元测试困难等...
11. **文件上传和下载**:实现在Struts 2.0中处理文件上传和下载,包括文件大小限制、文件类型的检查等。 12. **插件和最佳实践**:介绍Struts 2.0的一些实用插件,如Tiles插件,以及开发中的最佳实践和注意事项。 ...
Struts2.0文件上传是Java Web开发中的一个重要实践,它允许用户在Web应用程序中上传文件,例如图片、文档或音频文件。这个实例是针对初学者设计的,可以帮助理解并实现这一功能。以下是对Struts2.0文件上传机制及其...
4. **丰富的插件支持**:Struts 2.0拥有众多插件,可以扩展框架的功能,如Ajax支持、文件上传下载、PDF生成等。 5. **模板技术**:Struts 2.0支持FreeMarker和Velocity等多种模板技术,方便开发者选择最适合的视图...
Struts 2.0 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用程序框架,由Apache软件基金会开发。它旨在提供一个结构化的、可扩展的平台,帮助开发者构建更高效、易于维护的Web应用。核心jar包是...
在本文中,我们将深入探讨这些内容,帮助你理解和实现Struts2.0环境下的图片上传功能。 首先,Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,它简化了开发过程,提供了强大的拦截器机制和...
通过以上步骤,我们就完成了在Struts2.0框架下实现文件上传的基本过程。这个例子中,`StrutsUpload`可能是项目或示例代码的名称,具体实现细节可能包含Action类、配置文件、表单页面等相关文件。
### Struts2.0框架技术详解 #### 一、MVC思想 **1.1 Model I 模式和 Model II 模式** ##### 1.1.1 Model I 模式 在Model I模式下,整个Web应用几乎全部由JSP页面组成。JSP页面不仅接收处理客户端请求,还直接...