struts2 MVC作为一个新框架,功能强大,比之以前的版本1.x 强过不少。
无论是学习还是开发推荐 struts 2, 而且与spring ,Hibernate更易集成,可自定制需要的功能模块,还可以方便与ext 等js框架结合做ajax 开发。开发效率不错。
不多说,看一个多文件上传样例:
环境:JDK 1.6, TOMCAT 6.0, IDE:eclipse jee
主要的lib包:struts2-core-2.0.11.1.jar,xwork-2.0.4.jar,freemarker.jar,ognl-2.6.11.jar, pull-parser-2.1.10.jar,commons-fileupload.jar 必须的包。
代码:
package org;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import java.io.*;
public class UploadAction extends ActionSupport {
private static final long serialVersionUID = 1L;
private File[] doc;
private String[] docContentType;
private String[] docFilename;
private String[] caption;
public String[] getCaption() {
return caption;
}
public void setCaption(String[] caption) {
this.caption = caption;
}
public String[] getDocContentType() {
return doContentType;
}
public void setdocContentType(String[] docContentType) {
this.docContentType = docContentType; // notice:here is the key!! 不要改变命名规范
}
public File[] getDoc() {
return doc;
}
public void setDoc(File[] doc) {
this.doc = doc;
}
public String[] getDocFilename() {
return docFileName;
}
public void setDocFileName(String[] docFilename) {
this.docFilename = docFilename; // notice:here is the key!! 命名约定
}
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[16 * 1024];
while (in.read(buffer) > 0) {
out.write(buffer);
}
} finally {
if (null != in) {
in.close();
}
if (null != out) {
out.close();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
public String execute() {
for (int i = 0; i < this.getDoc().length; i++) {
File imageFile = new File(ServletActionContext.getServletContext()
.getRealPath("/")
+ "file/" + docFilename[i]);
copy(this.getDoc()[i], imageFile);
}
return SUCCESS;
}
}
classes/目录下,struts.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>
<!-- developer mode convenient for Debug -->
<constant name="struts.devMode" value="true" />
<constant name="struts.i18n.encoding" value="GBK" />
<package name="uploadFile" extends="struts-default">
<action name="myUpload"
class="org.UploadAction">
<interceptor-ref
name="fileUpload">
<param
name="allowedTypes">
image/bmp,image/png,image/gif,image/pjpeg,image/jpg,image/JPG,image/jpeg
</param>
<param
name="maximumSize">
1024000
</param>
</interceptor-ref>
<interceptor-ref
name="defaultStack" />
<result name="input">
/upload.jsp
</result>
<result name="success">
/showUpload.jsp
</result>
</action>
</package>
</struts>
web.xml配置:
<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
<display-name>struts2上传文件示例</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>upload.jsp</welcome-file>
</welcome-file-list>
</web-app>
上传页面(ognl 表达式):upload.jsp
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ 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>upload file</title>
<script type="text/javascript">
function addMore() {
var td = document.getElementById("more");
var div = document.createElement("div");
var ss = document.createElement("span");
var input = document.createElement("input");
var span = document.createElement("span");
var text = document.createElement("input");
var button = document.createElement("input");
div.style.marginTop = "4";
ss.innerHTML = "选择文件:";
input.type = "file";
input.name = "doc";
span.innerHTML = "文件资源描述:";
text.type = "text";
text.size = 35;
text.name = "caption";
button.type = "button";
button.value = "移 除";
button.onclick = function() {
td.removeChild(div);
div = null;
fileInputNumber--;
}
div.appendChild(ss);
div.appendChild(input);
div.appendChild(span);
div.appendChild(text);
div.appendChild(button);
td.appendChild(div);
fileInputNumber++;
}
</script>
</head>
<body>
<s:fielderror />
<s:form method="post" name="uploadForm" action="myUpload"
enctype="multipart/form-data" onsubmit="return check();"
theme="simple">
<tr>
<td id="more">选择文件:<input type="file" name="doc" />文件资源描述:<input
type="text" name="caption" size="35" /><input type="button"
value="添 加" onclick="addMore()" /></td>
</tr>
<tr>
<td align="center"><s:submit value="上传" /> <s:reset value="重置" /></td>
</tr>
</s:form>
</body>
</html>
显示页面:showUpload.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%>
<%@ 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><center>
<table border="1">
<s:iterator value="uploadFilename" status="stat">
<tr>
<td>
<s:property value="%{docFilename[#stat.index]}" />
<br />
</td>
</tr>
<tr>
<td>
<s:property value="%{caption[#stat.index]}" />
</td>
</tr>
</s:iterator>
</table>
</center></body>
</html>
分享到:
相关推荐
Struts2多文件上传是Java Web开发中常见的一项功能,用于允许用户一次上传多个文件。在Struts2框架中,实现这一功能涉及到一系列的技术和步骤。以下是对这一知识点的详细说明: 1. **Struts2框架**:Struts2是一个...
Struts2是一个非常流行的Java Web框架,...总的来说,Struts2多文件上传并显示进度的实现需要结合前端和后端的技术,通过AJAX和XMLHttpRequest的`onprogress`事件来动态更新进度条,同时确保后端处理的高效和安全性。
在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...
在实际项目中,文件上传和下载功能是必不可少的,本实例将详细讲解如何在Struts2框架下实现单个文件及多个文件的上传与下载。 首先,我们需要在Struts2的配置文件(struts.xml)中添加相关的Action配置,以便处理文件...
在Struts2中,文件上传和下载是常见的功能,对于用户交互和数据交换至关重要。这篇内容将深入讲解如何在Struts2中实现多文件的上传和下载。 1. **文件上传** 文件上传在Web应用中常常用于让用户提交各种类型的文件...
文件上传比较多,多文件上传少一点 文件下载很少的,看似简单,实则不然 网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供...
通过以上步骤,我们可以利用ExtJS的用户界面和Struts2的后台处理能力,实现一个完整的多文件上传功能。这个功能不仅提高了用户体验,还简化了开发流程。在实际项目中,还可以进一步优化,例如添加进度条显示、预览...
Struts2提供了完善的文件上传支持,让我们来详细探讨如何在Struts2中实现多文件上传。 首先,我们需要在Struts2的配置文件(struts.xml)中启用文件上传的支持。这通常涉及到添加`<constant>`标签来设置`struts....
本篇文章将深入讲解如何利用AjaxFileUpload与Struts2实现多文件上传,并结合jQuery进行前端交互。 首先,我们需要在项目中引入必要的库。Struts2提供了struts2-jquery-plugin,这是一个基于jQuery的插件,包含了...