struts2文件上傳

Struts2上傳文件


須要注意:Struts2須要運行在JRE1.5及以上版本


Struts2支持三種類型的上傳組件
Struts2默認採用了apache commons-fileupload


一、建立Java Web項目


二、引入Struts2的依賴包,將依賴包拷貝到WEB-INF/lib下
* commons-logging-1.0.4.jar
* freemarker-2.3.15.jar
* ognl-2.7.3.jar
* struts2-core-2.1.8.1.jar
* xwork-core-2.1.6.jar
* commons-fileupload-1.2.1.jar


須要引入commons-fileupload相關依賴包
* commons-io-1.3.2.jar
* commons-fileupload-1.2.1.jar

三、在web.xml配置文件中,配置StrutsPrepareAndExecuteFilter或FilterDispatcher
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>


    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    


四、提供struts2配置文件struts.xml,放到src下

<?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.i18n.encoding" value="GB18030" />
	
	<!--設置上傳文件的最大容許大小-->
	<constant name="struts.multipart.maxSize" value="2097152000" />

	<!-- 當struts.xml配置文件發生修改,會馬上加載,在生產環境下最好不要配置 -->
	<constant name="struts.configuration.xml.reload" value="true"/>
	<!-- 會提供更加友好的提示信息 -->
	<constant name="struts.devMode" value="true"/>
	<!-- 須要繼承struts-default包,這樣就擁有的最基本的功能 -->
	<package name="upload-package" extends="struts-default">
		<action name="upload" class="com.bjpowernode.struts2.UploadTestAction">
			<result>/success.jsp</result>
		</action>
	</package>
</struts>




五、創建JSP(index.jsp(上傳文件頁面)、success.jsp)

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!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=GB18030">
<title>Insert title here</title>
</head>
<body>
	<form action="upload.action" method="post" enctype="multipart/form-data"> 
		標題:<input type="text" name="title"><br>
		文件:<input type="file" name="myFile"><br>
		<input type="submit" value="上傳">
	</form>
</body>
</html>



六、建立Struts2的Action,Struts2的action能夠不用繼承Struts2框架中的任何類
   也不用實現Struts2框架中的任何接口,因此Struts2的Action能夠是一個POJO(純粹的Java對象)
   因此Struts2的Action測試更容易
   
   Struts2缺省方法名稱:public String execute() throws Exception;


   取得文件名稱->>規則:輸入域的名稱+固定字符串FileName
取得文件數據->>規則:File 輸入域的名稱

取得內容類型->>規則:輸入域的名稱+固定字符串ContentTypehtml

package com.bjpowernode.struts2;

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 com.opensymphony.xwork2.Action;

public class UploadTestAction {
	
	private String title;
	
	//能夠獲得上傳文件的名稱
	//規則:輸入域的名稱+固定字符串FileName
	private String myFileFileName;
	
	//取得文件數據
	//規則:File 輸入域的名稱
	private File myFile; 
	
//	//取得內容類型
//	//規則:輸入域的名稱+固定字符串ContentType
//	private String myFileContentType;
	
	public String getMyFileFileName() {
		return myFileFileName;
	}


	public void setMyFileFileName(String myFileFileName) {
		this.myFileFileName = myFileFileName;
	}

	public String getTitle() {
		return title;
	}


	public void setTitle(String title) {
		this.title = title;
	}


	public File getMyFile() {
		return myFile;
	}


	public void setMyFile(File myFile) {
		this.myFile = myFile;
	}


//	public String getMyFileContentType() {
//		return myFileContentType;
//	}
//
//
//	public void setMyFileContentType(String myFileContentType) {
//		this.myFileContentType = myFileContentType;
//	}
//	

	public String execute() throws Exception {
		InputStream is = null;
		OutputStream os = null;
		try {
			is = new BufferedInputStream(
					new FileInputStream(myFile));
			os = new BufferedOutputStream(
					new FileOutputStream("c:\\" + myFileFileName));
			byte[] buffer = new byte[1024];
			int len = 0;
			while ((len = is.read(buffer)) > 0) {
				os.write(buffer, 0, len);
			}
		}finally {
			if (is != null) {is.close();}
			if (os != null) {os.close();}
		}
		return Action.SUCCESS;
	}
}
    七、在Action中提供getter和setter方法,便於收集數據(這樣收集數據的模式通常能夠成爲屬性驅動模式) 八、將JSP和Action配置到struts.xml配置文件中 九、瞭解struts-default.xml配置文件,default.properties,Struts2的默認後綴爲.action
相關文章
相關標籤/搜索