- 浏览: 127750 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
akushin:
是不是会少一行··
用apache poi 读取excel文件很方便 -
mady0505:
楼下的童鞋,如果有隔行,稍微判断一下就可以了
if(row!= ...
用apache poi 读取excel文件很方便 -
漫步林中:
学习了。谢谢
Struts2中的文件上传 -
cuisuqiang:
楼主是否发现int sheetNum=wb.getNumber ...
用apache poi 读取excel文件很方便 -
yaoneng:
谢谢楼主,弄明白了~~
用apache poi 读取excel文件很方便
struts2 文件上传
(1) 单文件上传
一.简介
Struts2并未提供自己的请求解析器,也就是就Struts2不会自己去处理multipart/form-data的请求,它需要调用其他请求解析器,将HTTP请求中的表单域解析出来。但Struts2在原有的上传解析器基础上做了进一步封装,更进一步简化了文件上传。
Struts2默认使用的是Jakarta的Common-FileUpload框架来上传文件,因此,要在web应用中增加两个Jar文件:commons-fileupload-1.2.jar和commons-io-1.3.1.jar。它在原上传框架上做了进一步封装,简化了文件上传的代码实现,取消了不同上传框架上的编程差异。
如果要改成其它的文件上传框架,可以修改struts.multipart.parser常量的值为cos/pell,默认值是jakata。并在classpath中增加相应上传组件的类库
例如配置成cos上传
struts.multipart.parser=cos
struts.multipart.maxSize=1024 指定文件的最大字结数
二.原理
不管用common-fileUPload框架,还是用cos,都是通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。
三.需要的jar包(默认使用commons-fileupload,如果使用cos,要将jar引进来)
commons-logging-1.1.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.6.jar
xwork-2.0.1.jar
commons-io-1.3.1.jar
commons-fileupload-1.2.jar
四.实例
1.首先,创建上传页面
Html代码
2.action
Java代码
表单的enctype ="multipart/form-data,与一般的上传一样.
<s:file name="upload">会将upload绑定到action的upload,其次他还会将上传记文件的MIME类型绑定到uploadContentType,文件名绑定到uploadFileName中,他们是通过
setUploadContentType和setUploadFileName进行绑定的,下面进行的多文件上传也是同个道理,不过要用数组或者是list来进行绑定,然后多个文件的MIME类型也会绑定到以数组
名字加ContentType和FileName的字符串数组中。 比如说上传的文件的数组名为:File[] uploads,则它们的MIME类型绑定的对应的数组是uploadsFileName和uploadsContentType.
3.struts.xml的配置
Xml代码
4.最后是web.xml的配置
Xml代码
(2) 多文件上传
多文件上传
与单文件上传相似,Struts 2实现多文件上传也很简单。你可以将多个<s:file />绑定Action的数组或列表。如下例所示。
< s:form action ="doMultipleUploadUsingList" method ="POST" enctype ="multipart/form-data" >
< s:file label ="File (1)" name ="upload" />
< s:file label ="File (2)" name ="upload" />
< s:file label ="FIle (3)" name ="upload" />
< s:submit />
</ s:form > 清单14 多文件上传JSP代码片段
如果你希望绑定到数组,Action的代码应类似:
private File[] uploads;
private String[] uploadSFileName;
private String[] uploadSContentType;
多文件上传数组绑定Action代码片段
如果你想绑定到列表,则应类似:
private List < File > uploads = new ArrayList < File > ();
private List < String > uploadSFileName = new ArrayList < String > ();
private List < String > uploadSContentType = new ArrayList < String > ();
多文件上传列表绑定Action代码片段
总结
在Struts 2中实现文件上传的确是轻而易举,您要做的只是使用<s:file />与Action的属性绑定。这又一次有力地证明了Struts 2的简单易用。
(1) 单文件上传
一.简介
Struts2并未提供自己的请求解析器,也就是就Struts2不会自己去处理multipart/form-data的请求,它需要调用其他请求解析器,将HTTP请求中的表单域解析出来。但Struts2在原有的上传解析器基础上做了进一步封装,更进一步简化了文件上传。
Struts2默认使用的是Jakarta的Common-FileUpload框架来上传文件,因此,要在web应用中增加两个Jar文件:commons-fileupload-1.2.jar和commons-io-1.3.1.jar。它在原上传框架上做了进一步封装,简化了文件上传的代码实现,取消了不同上传框架上的编程差异。
如果要改成其它的文件上传框架,可以修改struts.multipart.parser常量的值为cos/pell,默认值是jakata。并在classpath中增加相应上传组件的类库
例如配置成cos上传
struts.multipart.parser=cos
struts.multipart.maxSize=1024 指定文件的最大字结数
二.原理
不管用common-fileUPload框架,还是用cos,都是通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。
三.需要的jar包(默认使用commons-fileupload,如果使用cos,要将jar引进来)
commons-logging-1.1.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
struts2-core-2.0.6.jar
xwork-2.0.1.jar
commons-io-1.3.1.jar
commons-fileupload-1.2.jar
四.实例
1.首先,创建上传页面
Html代码
<%@page language="java" contentType = "text/html; charset=utf-8" pageEncoding = "utf-8"%> <%@taglib prefix="s" uri ="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'FileUpload.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data"> <s:fielderror /> <s:file name ="upload"/> <s:submit /> </s:form > </body> </html>
<%@page language="java" contentType = "text/html; charset=utf-8" pageEncoding = "utf-8"%> <%@taglib prefix="s" uri ="/struts-tags"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'FileUpload.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data"> <s:fielderror /> <s:file name ="upload"/> <s:submit /> </s:form > </body> </html>
2.action
Java代码
package com; 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 File upload; private String uploadContentType; private String uploadFileName; private String imageFileName; public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } public String getImageFileName() { return imageFileName; } private static void copy(File src, File dst) { try { InputStream in = null; OutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(src)); out = new BufferedOutputStream(new FileOutputStream(dst)); byte[] buffer = new byte[1024*10]; while (in.read(buffer) > 0) { out.write(buffer); } } finally { if (null != in) { in.close(); } if (null != out) { out.close(); } } } catch (Exception e) { e.printStackTrace(); } } @Override public String execute() { System.out.println(uploadFileName); imageFileName = System.currentTimeMillis() + uploadFileName.substring(uploadFileName.lastIndexOf(".")); File imageFile = new File(ServletActionContext.getServletContext() .getRealPath("/uploadImages") + "/" + imageFileName); copy(upload, imageFile); return SUCCESS; } } package com; 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 File upload; private String uploadContentType; private String uploadFileName; private String imageFileName; public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public void setImageFileName(String imageFileName) { this.imageFileName = imageFileName; } public String getImageFileName() { return imageFileName; } private static void copy(File src, File dst) { try { InputStream in = null; OutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(src)); out = new BufferedOutputStream(new FileOutputStream(dst)); byte[] buffer = new byte[1024*10]; while (in.read(buffer) > 0) { out.write(buffer); } } finally { if (null != in) { in.close(); } if (null != out) { out.close(); } } } catch (Exception e) { e.printStackTrace(); } } @Override public String execute() { System.out.println(uploadFileName); imageFileName = System.currentTimeMillis() + uploadFileName.substring(uploadFileName.lastIndexOf(".")); File imageFile = new File(ServletActionContext.getServletContext() .getRealPath("/uploadImages") + "/" + imageFileName); copy(upload, imageFile); return SUCCESS; } }
表单的enctype ="multipart/form-data,与一般的上传一样.
<s:file name="upload">会将upload绑定到action的upload,其次他还会将上传记文件的MIME类型绑定到uploadContentType,文件名绑定到uploadFileName中,他们是通过
setUploadContentType和setUploadFileName进行绑定的,下面进行的多文件上传也是同个道理,不过要用数组或者是list来进行绑定,然后多个文件的MIME类型也会绑定到以数组
名字加ContentType和FileName的字符串数组中。 比如说上传的文件的数组名为:File[] uploads,则它们的MIME类型绑定的对应的数组是uploadsFileName和uploadsContentType.
3.struts.xml的配置
Xml代码
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.multipart.saveDir" value="/tmp" /> <package name="fileUploadDemo" extends="struts-default"> <action name ="fileUpload" class ="com.FileUploadAction"> <!-- 验证上传文件的类型 --> <interceptor-ref name ="fileUpload"> <param name ="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg</param> </interceptor-ref> <interceptor-ref name ="defaultStack"/> <!-- 如果加入了验证上传文件的类型,必须要加input --> <result name ="input" >/fileUpload.jsp</result> <result name ="success">/showUpload.jsp </result> </action> </package> </struts> <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.multipart.saveDir" value="/tmp" /> <package name="fileUploadDemo" extends="struts-default"> <action name ="fileUpload" class ="com.FileUploadAction"> <!-- 验证上传文件的类型 --> <interceptor-ref name ="fileUpload"> <param name ="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg</param> </interceptor-ref> <interceptor-ref name ="defaultStack"/> <!-- 如果加入了验证上传文件的类型,必须要加input --> <result name ="input" >/fileUpload.jsp</result> <result name ="success">/showUpload.jsp </result> </action> </package> </struts>
4.最后是web.xml的配置
Xml代码
<?xml version="1.0" encoding="UTF-8"?> <web-app 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"> <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.jsp</welcome-file> </welcome-file-list> </web-app>
(2) 多文件上传
多文件上传
与单文件上传相似,Struts 2实现多文件上传也很简单。你可以将多个<s:file />绑定Action的数组或列表。如下例所示。
< s:form action ="doMultipleUploadUsingList" method ="POST" enctype ="multipart/form-data" >
< s:file label ="File (1)" name ="upload" />
< s:file label ="File (2)" name ="upload" />
< s:file label ="FIle (3)" name ="upload" />
< s:submit />
</ s:form > 清单14 多文件上传JSP代码片段
如果你希望绑定到数组,Action的代码应类似:
private File[] uploads;
private String[] uploadSFileName;
private String[] uploadSContentType;
多文件上传数组绑定Action代码片段
如果你想绑定到列表,则应类似:
private List < File > uploads = new ArrayList < File > ();
private List < String > uploadSFileName = new ArrayList < String > ();
private List < String > uploadSContentType = new ArrayList < String > ();
多文件上传列表绑定Action代码片段
总结
在Struts 2中实现文件上传的确是轻而易举,您要做的只是使用<s:file />与Action的属性绑定。这又一次有力地证明了Struts 2的简单易用。
发表评论
-
spring里quartz调度的连续触发
2008-11-05 17:08 2377作法是通过spring在执行的触发器的监听器的里面注入下 ... -
web-harvest基础学习一
2008-10-15 11:50 3238Web-harvest里面的<script>标 ... -
使用web-harvest抓取分页数据(二)
2008-10-14 16:40 3440除了使用上述方法外,还可以使用将不页的数据输出到不同的结 ... -
使用Web-Harvest抓取分页的数据
2008-10-14 14:07 4597可以利用其自带的例子里面已经写好了的那个函数,在Func ... -
使用Web-Harvest抓取数据并保存到数据库(一)
2008-10-13 12:23 57101. 从其官网:http://web-harvest.sour ... -
用cactus测试servlet(三)
2008-09-09 18:00 12451. 基于测试方法的名字,ServletTestCase将在 ... -
用cactus测试servlet(二)
2008-09-09 17:58 13441. b ... -
html截取摘要并补齐标签(htmlparser)二
2008-08-26 11:09 3314另外一个关键点就在于补齐截取出来的标签,而在这之前你可能需要面 ... -
JAVA常见的异常(收藏)
2008-08-01 12:26 2312转载自: http://hi.baidu.co ... -
监听器ServletContextListener小记
2008-07-25 15:04 4310今天奉命写一个监听器监听tomcat,在tomcat启动 ... -
java 里的文件生成与删除
2008-07-10 16:33 1557这里先是文件的生成: import java.io.* ... -
用dom4j读写数据
2008-07-05 15:52 2176从数据库表里面读取数据并生成一个xml文件给用户下载,下 ... -
临时记录
2008-06-28 16:38 888http://www.blogjava.net/lusm/ar ... -
Struts里面容易出现乱码的地方及解决方法
2008-06-14 21:55 2348容易出现乱码的地方一般有三个地方: a.页面出现乱码 ... -
Struts与Velocity的简单集成
2008-06-12 17:00 1438首先当然是简单的配置web.xml与struts-config ... -
用apache poi 读取excel文件很方便
2008-06-07 00:26 12199用三个循环遍历就行了: 第一层是sheet循环,然后是行循环, ... -
顺序生成,无聊代码...
2008-06-06 00:22 1124package com.jie.java; public ...
相关推荐
以下是对Struts2中文件上传及`codeFilter`的详细解释: **1. Struts2文件上传机制** Struts2提供了内置的支持来处理文件上传,主要利用了Apache Commons FileUpload库。在Struts2的Action类中,可以定义一个字段,...
jspstruts1_2struts2 中文件上传 java文件上传
在Struts2中处理文件上传和下载是常见的需求,对于构建交互式的Web应用来说至关重要。以下将详细介绍Struts2中如何实现这两个功能。 一、文件上传 1. 配置依赖:首先,你需要在项目中添加Apache Commons ...
首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在Action类中声明一个`List<FileInfo>`类型的字段,用于接收上传的文件...
在Struts2中,文件上传和下载是常见的功能需求,主要用于处理用户在Web表单中提交的文件,如图片、文档等。下面将详细介绍Struts2中文件上传和下载的实现方法。 ### 1. 文件上传 #### 1.1 配置Struts2 首先,我们...
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
在Struts2中,文件上传通常涉及到以下几个步骤: 1. **创建上传表单**:在HTML或JSP页面中,使用`<input type="file">`标签创建一个文件选择框,用户可以通过这个框选择要上传的文件。 2. **配置Action**:在...
在Struts2中,文件上传主要依赖于`struts2-convention-plugin`和`struts2-file-uploading-plugin`这两个插件。要实现文件上传,你需要在Action类中定义一个字段,类型为`java.io.File`或`org.apache.struts2....
在Struts2中,文件上传和下载是常见的功能需求,特别是在处理用户交互和数据交换时。这篇博客文章提供的"struts2文件上传下载源代码"旨在帮助开发者理解和实现这些功能。 文件上传功能允许用户从他们的设备上传文件...
在 Struts2 中,可以通过配置来控制文件上传的行为,例如最大文件大小、是否启用文件上传等功能。这些配置可以在 `struts.xml` 文件中进行。 ```xml <constant name="struts.multipart.maxSize" value="10485760"/>...
在本篇中,我们将聚焦于Struts2中的文件上传、下载和删除功能,这些是Web应用中常见的需求。 1. 文件上传: 在Struts2中,文件上传主要依赖于`Commons FileUpload`库,它处理了多部分表单数据。首先,你需要在`...
在Struts2中,这个过程通过拦截器完成,特别是`fileUpload`拦截器,它负责处理文件上传的细节,并将文件绑定到Action的属性上。 以下是一个简单的Struts2文件上传示例: 1. **前端表单**: 创建一个HTML表单,...
3. **创建Struts2 Action**:在Struts2框架中,创建一个处理文件上传的Action类,该类通常会包含一个`List<HttpServletFileWrapper>`类型的属性,用于接收上传的文件。 4. **编写Struts2配置**:在struts.xml配置...
1. **文件上传组件**:在Struts2中,我们通常使用`Commons FileUpload`库来处理文件上传。这个库提供了处理多部分HTTP请求的能力,是Java中处理文件上传的标准库。我们需要在Struts2配置文件中引入对应的拦截器`...
在本篇文章中,我们将深入探讨Struts2中文件上传的工作原理、实现方法以及相关注意事项。 首先,我们来看一下Struts2文件上传的基本流程: 1. 用户通过HTML表单选择本地文件,并提交到服务器。 2. Struts2拦截器...
此外,使用 `<s:file>` 标签将文件上传控件与 Action 中的某个字段(如 `myFile`)绑定,这样 Struts 2 就知道如何处理文件上传请求。 下面是一个简单的 `FileUpload.jsp` 示例: ```jsp ; charset=utf-8" ...
首先,我们需要了解Struts2中文件上传的基础知识。Struts2通过`struts2-core`库提供的`FileUpload`拦截器来处理文件上传请求。在使用Struts2进行文件上传时,我们需要在Action类中声明一个`java.io.File`类型的字段...
在Struts2中,实现文件上传和下载功能是一项常见的需求。本文将深入探讨如何使用Struts2来实现这一功能,并结合提供的"struts2真正实现上传下载完整源代码"进行分析。 首先,我们要了解Struts2中文件上传的基本原理...
在Struts2中,文件上传主要依赖于`org.apache.struts2.components.FileUpload`组件。要实现文件上传,首先需要在Action类中定义一个或多个`File`和对应的`String`类型的属性,`File`属性用于接收上传的文件,而`...