发布于 2015-05-18 05:56:05 | 131 次阅读 | 评论: 0 | 来源: 网友投递
Struts Java MVC框架
Struts 是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。它通过采用JavaServlet/JSP技术,实现了基于Java EEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品。
实现步骤:
上传页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>单个文件上传</title>
</head>
<body>
<form action="doUpload.action" method="post" enctype="multipart/form-data">
<input type="file" name="upload"/>
<input type="submit" value="上传">
</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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>文件上传成功</title>
</head>
<body>
<h1>上传的文件</h1>
<img alt="图片" src="<s:property value=‘savePath‘/>" />
</body>
</html>
UploadAction
package com.pb.web.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.io.IOUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
//上传文件全路径、类型、文件名
private File upload;
private String uploadContentType;
private String uploadFileName;
//新文件保存路径和名称
private String savePah;
public String doUpload() throws IOException{
System.out.println(upload);
System.out.println(uploadContentType);
System.out.println(uploadFileName);
String newFileName=System.currentTimeMillis()+uploadFileName.substring(uploadFileName.lastIndexOf("."));
System.out.println("新的文件名:"+newFileName);
//获取上传路径
savePah=ServletActionContext.getServletContext().getRealPath("/upload/"+newFileName);
System.out.println("上传保存的路径和名称:"+savePah);
//使用文件输入、输出流写入文件
FileInputStream fis=new FileInputStream(upload);
FileOutputStream fos=new FileOutputStream(savePah);
//设置缓冲区大小
/*byte[] bytes=new byte[1024];
//读取文件
int length=fis.read(bytes);
while(length>0){
//写入文件
fos.write(bytes);
length=fis.read(bytes);
}*/
//复制文件
IOUtils.copy(fis, fos);
fos.flush();
fos.close();
fis.close();
return SUCCESS;
}
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
public String getSavePah() {
return savePah;
}
public void setSavePah(String savePah) {
this.savePah = savePah;
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="doUpload" class="com.pb.web.action.UploadAction" method="doUpload">
<result name="success">
/singleUploadSuccess.jsp
</result>
<result name="error">
/error.jsp
</result>
<result name="input">
/singleUpload.jsp
</result>
</action>
</package>
</struts>
<constant name="struts.multipart.maxSize" value="5000000"/> 5M大小
在action下配置拦截器
<interceptor-ref name="fileUpload"> <param name="maximumSize">5000000</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="fileUpload"> <param name="allowedTypes">image/pjpeg,image/jpeg,image/gif,image/png</param> <param name="maximumSize">5000000</param> </interceptor-ref> <interceptor-ref name="defaultStack"></interceptor-ref>
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<constant name="struts.multipart.maxSize" value="1000000" />
<constant name="struts.multipart.saveDir" value="/tmp"/>
<package name="default" namespace="/" extends="struts-default">
<action name="doupload" class="com.pb.web.action.UploadAction" method="upload">
<interceptor-ref name="fileUpload">
<param name="maximumSize">40000</param>
<param name="allowedTypes">image/jpeg,image/pjpeg,image/gif,image/png</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
<result name="success">
/oneUploadSuccess.jsp
</result>
<result name="input">
/error.jsp
</result>
</action>
</package>
</struts>
和单个文件上传一个只是接收参数变为数组
mulUpload.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>多个 文件上传</title>
<script type="text/javascript" src="js/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
function addFile(){
/* 获取父元素*/
var parent=$("#add").parent();
/*创建新的节点 */
var file=$("<input type=‘file‘ name=‘upload‘ /><br/>");
/* 添中节点 */
parent.append(file);
}
</script>
</head>
<body>
<form action="doupload.action" method="post" enctype="multipart/form-data">
<input type="file" name="upload" />
<input type="button" value="继续添加" onclick="addFile();" id="add"/>
<input type="submit" value="上传" /><br/>
</form>
</body>
</html>
error.jsp
<%@ 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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传失败</title>
</head>
<body>
上传失败<a href="mulUpload.jsp">返回</a>
<s:debug/>
</body>
</html>
mulUploadSuccess.jsp
<%@ 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" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传成功</title>
</head>
<body>
<!--显示上传的图片 -->
<s:iterator value="savePath" var="i">
<img alt="图片" src="<s:property value=‘#i‘/>">
</s:iterator>
<s:debug/>
</body>
</html>
UploadAction.java
package com.pb.web.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.IOUtils;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class UploadAction extends ActionSupport {
// 文件上传路径、类型、名称
private List<File> upload;
private List<String> uploadFileName;
private List<String> uploadContentType;
// 新的文件名称
private List<String> savePath=new ArrayList<String>();
public String upload() throws IOException {
for (int i = 0; i < upload.size(); i++) {
//重命名 用长时间+原来的文件名
String newFileName = System.currentTimeMillis()+""+uploadFileName.get(i);
System.out.println("新的文件名:"+newFileName);
//获取上传路径
//将新的路径和名称添加入集合
savePath.add(ServletActionContext.getServletContext().getRealPath("/upload/"+newFileName));
System.out.println(savePath.get(i));
//读取文件
FileInputStream fis=new FileInputStream(upload.get(i));
//写入文件
FileOutputStream fos=new FileOutputStream(savePath.get(i));
//将文件从输入流,复制到输出流中
IOUtils.copy(fis, fos);
//强制刷新输出流,清空缓冲区
fos.flush();
fos.close();
fis.close();
}
return SUCCESS;
}
public List<File> getUpload() {
return upload;
}
public void setUpload(List<File> upload) {
this.upload = upload;
}
public List<String> getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(List<String> uploadFileName) {
this.uploadFileName = uploadFileName;
}
public List<String> getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(List<String> uploadContentType) {
this.uploadContentType = uploadContentType;
}
public List<String> getSavePath() {
return savePath;
}
public void setSavePath(List<String> savePath) {
this.savePath = savePath;
}
}
struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<!--设置文件大小拦截器 -->
<constant name="struts.multipart.maxSize" value="10000000"></constant>
<constant name="struts.multipart.saveDir" value="/tmp"/>
<package name="default" namespace="/" extends="struts-default">
<action name="doupload" class="com.pb.web.action.UploadAction" method="upload">
<interceptor-ref name="fileUpload">
<!--设置文件类型拦截器 -->
<param name="allowedTypes">image/jpeg,image/pjpeg,image/png</param>
<!--设置文件大小拦截器 -->
<param name="maximumSize">5000000</param>
</interceptor-ref>
<!-- struts默认的拦截器 -->
<interceptor-ref name="defaultStack" />
<result name="success">
/mulUploadSuccess.jsp
</result>
<result name="input">
/error.jsp
</result>
</action>
</package>
</struts>
更详细的请参考:struts下载包中的帮助文档: