Struts2教學
Struts2快速入門
Struts2 MVC架構
Struts2 是什麼?
Struts2 環境配置
Struts2 體系結構
Struts2 Hello World 實例
Struts2 配置文件
Struts2 Action/動作
Struts2 攔截器
Struts2 結果和結果類型
Struts2 值棧/OGNL
Struts2 文件上傳
Struts2 MySQL數據庫訪問
Struts2 發送郵件Email
Struts2 驗證框架
Struts2 基於XML校驗
Struts2 本地化/國際化(i18n)
Struts2 類型轉換
Struts2 主題和模板
Struts2 異常處理
Struts2 註釋
Struts2 註釋類型
Struts2 控件標籤
Struts2 iterator標籤
Struts2 if/else標籤
Struts2 merge標籤
Struts2 append標籤
Struts2 generator標籤
Struts2 數據標籤
Struts2 action標籤
Struts2 include標籤
Struts2 bean 標籤
Struts2 date 標籤
Struts2 param 標籤
Struts2 property 標籤
Struts2 set 標籤
Struts2 text 標籤
Struts2 url標籤
Struts2 表單標籤
Struts2 Ajax 標籤
Struts2和Spring集成
Struts2和Tiles集成
Struts2和Hibernate集成
Struts 2 hello world (XML版本)
Struts2註解示例
Struts2 @ResultPath註釋示例
Struts2 include(包含)多個配置文件
Struts2命名空間配置和解釋
Struts2開發者模式
如何刪除Struts2動作的後綴擴展名
使用Struts2動作
Struts2的ActionError&ActionMessage示例
Struts2模型驅動實例
Struts2映射攔截動作
Struts2重寫攔截器參數
Struts2攔截器棧的例子
Struts2 execAndWait攔截器例子
Struts2 <s:textfield>文本示例
Struts2 <s:password>密碼示例
Struts2 <s:hidden>隱藏值例子
Struts2 <s:textarea>文本域實例
Struts2 <s:radio>單選按鈕例子
Struts2單選預選按鈕值
Struts2 <s:checkbox>複選框例子
Struts2設置多個複選框缺省值
Struts2 <s:checkboxlist>多個複選框例子
Struts2 <s:select>下拉框例子
Struts2自動選擇下拉框的值
Struts2 <s:combobox>組合框的例子
Struts2 <s:head>示例
Struts2文件上傳例子
Struts2上傳多個文件例子
Struts2 <s:doubleselect>示例
Struts2 <s:updownselect>示例
Struts2 <s:optiontransferselect>示例
Struts2 <sx:datetimepicker>示例
Struts2 <sx:autocompleter>自動提示例子
Struts2 autocompleter+JSON例子
Struts2 <s:iterator>迭代器標籤示例
Struts2 if,elseif,else標籤示例
struts2 <s:append>標籤示例
Struts2 <s:generator>標籤示例
Struts2 <s:merge>標籤示例
Struts2 <s:sort>標籤示例
Struts2 <s:subset>標籤示例
Struts2 <s:a>標籤示例
Struts2 <s:action>標籤示例
Struts2 <s:bean>標籤示例
Struts2 <s:date>標籤示例
Struts2 <s:debug>標籤示例
Struts2 <s:include>標籤示例
Struts2 <s:i18n>標籤示例
Struts2 <s:param>標籤示例
Struts2 <s:property>標籤實例
Struts2 <s:push>標籤示例
Struts2 <s:set>標籤示例
Struts2 <s:texttag>標籤示例
Struts2 <s:url>標籤示例
Struts2資源包使用示例
Struts2本地化和國際化
Struts2 key鍵屬性示例
Struts2中文本地化問題
如何配置Struts2全局資源包
Struts2+Spring集成實例
Struts2+Quartz2調度集成實例
Struts2+Hibernate使用Full Hibernate Plugin集成
Struts2+Hibernate集成實例
Struts2+Spring+Hibernate集成實例
Struts2+Log4j集成
Struts2的FilterDispatcher和StrutsPrepareAndExecuteFilter有什麼不同?
Struts2獲取HttpServletRequest實例
Struts2獲取HttpServletResponse實例
如何獲取ServletContext對象
Struts2配置Action類的靜態參數
Struts2下載文件實例
Struts2和JSON實例

Struts2 文件上傳

Struts 2框架提供了內置支持處理文件上傳使用基於HTML表單的文件上傳。上傳一個文件時,它通常會被存儲在一個臨時目錄中,他們應該由Action類進行處理或移動到一個永久的目錄,以確保數據不丟失。

請注意,服務器**有一個安全策略**可能會禁止寫到目錄以外的臨時目錄和屬於web應用的目錄。

在Struts中的文件上傳是通過預先定義的攔截文件上傳攔截器這是可通過org.apache.struts2.interceptor.FileUploadInterceptor類的defaultStack中的一部分。仍然可以使用在struts.xml中設置各種參數,我們將在下面看到。

創建視圖文件:

讓我們開始創建我們認爲這將需要瀏覽和上傳選定的文件。因此,讓我們創建一個純HTML上傳表單,允許用戶上傳文件 index.jsp:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib prefix="s" uri="/struts-tags"%> File Upload <form action="upload" method="post" enctype="multipart/form-data"> <label for="myFile">Upload your file <input type="file" name="myFile" /> <input type="submit" value="Upload"/>

在上面的例子中值得注意幾點說明。首先,表單的enctype屬性設置爲multipart/ form-data。這應該是設置爲使得處理文件上傳文件上傳。下一個點值得注意的是表單的 action方法上傳和文件上傳字段的名稱 - myFile。我們需要這些信息創建操作方法和struts配置。

接下來讓我們創建一個簡單的 jsp 文件的success.jsp 結果顯示我們的文件上傳的情況下成功。

<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> File Upload Success You have successfully uploaded <s:property value="myFileFileName"/>

下面將結果文件error.jsp 可能會有一些錯誤,在上傳文件:

<%@ page contentType="text/html; charset=UTF-8" %> <%@ taglib prefix="s" uri="/struts-tags" %> File Upload Error There has been an error in uploading the file.

創建action類:

接下來讓我們創建一個Java類稱爲 uploadFile.java 這會處理上傳文件,該文件存儲在一個安全的位置:

package com.yiibai.struts2; import java.io.File; import org.apache.commons.io.FileUtils; import java.io.IOException; import com.opensymphony.xwork2.ActionSupport; public class uploadFile extends ActionSupport{ private File myFile; private String myFileContentType; private String myFileFileName; private String destPath; public String execute() { /* Copy file to a safe location */ destPath = "C:/apache-tomcat-6.0.33/work/"; try{ System.out.println("Src File name: " + myFile); System.out.println("Dst File name: " + myFileFileName); File destFile = new File(destPath, myFileFileName); FileUtils.copyFile(myFile, destFile); }catch(IOException e){ e.printStackTrace(); return ERROR; } return SUCCESS; } 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 getMyFileFileName() { return myFileFileName; } public void setMyFileFileName(String myFileFileName) { this.myFileFileName = myFileFileName; } }

uploadFile.java是一個非常簡單的類。重要的是要注意的是使用FileUpload攔截器隨着參數Intercetpor 確實爲我們解決所有繁重工作。文件上傳攔截器,使三個參數,默認情況下提供。它們被命名爲以下模式:

  • [your file name parameter] - 這是實際的文件的上載。在這個例子中是 "myFile"

  • [your file name parameter]ContentType - 這是被上傳的文件,該文件的內容類型。在這個例子中是 "myFileContentType"

  • [your file name parameter]FileName - 這是被上傳的文件的名稱。在這個例子中是 "myFileFileName"

這三個參數是爲我們提供的,這要歸功於Struts的攔截器。所有我們需要做的是在我們的Action類,這些變量是自動連線我們以正確的名稱創建三個參數。所以,在上面的例子中,我們有三個參數的操作方法簡單地返回「success」,如果一切順利,否則返回「error」。

配置文件:

以下是Struts2的配置屬性可以控制文件上傳過程:

SN

屬性& 描述

1

struts.multipart.maxSize
The maximum size (in bytes) of a file to be accepted as a file upload. Default is 250M.

2

struts.multipart.parser
The library used to upload the multipart form. By default is jakarta

3

struts.multipart.saveDir
The location to store the temporary file. By default is javax.servlet.context.tempdir.

爲了改變這些設置,可以使用恆定的標籤在應用程序 struts.xml文件,像我一樣改變要上傳的文件的最大大小。讓我們有我們的在struts.xml如下:

<constant name="struts.devMode" value="true" /> <constant name="struts.multipart.maxSize" value="1000000" /> <package name="helloworld" extends="struts-default"> <action name="upload" class="com.yiibai.struts2.uploadFile"> <result name="success">/success.jsp <result name="error">/error.jsp

由於FileUpload攔截器是攔截器defaultStack的一部分,我們並不需要明確地配置。但可以添加標籤到裏面。文件上傳攔截器需要兩個參數:(a)maximumSize及(b)allowedTypes。maximumSize參數設置允許的最大文件大小(默認爲約2MB)。allowedTypes參數接受的內容是一個逗號分隔的列表(MIME)類型,如下所示:

<action name="upload" class="com.yiibai.struts2.uploadFile"> <interceptor-ref name="basicStack"> <interceptor-ref name="fileUpload"> <param name="allowedTypes">image/jpeg,image/gif <result name="success">/success.jsp <result name="error">/error.jsp

以下是web.xml文件中的內容:

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app\_2\_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app\_3\_0.xsd" id="WebApp_ID" version="3.0"> Struts 2 index.jsp struts2 org.apache.struts2.dispatcher.FilterDispatcher struts2 /*

現在右鍵點擊項目名稱,並單擊 Export > WAR File 創建一個WAR文件。然後部署此WAR在Tomcat 的webapps目錄下。最後,啓動Tomcat服務器和嘗試訪問URL http://localhost:8080/HelloWorldStruts2/upload.jsp。這會給出以下畫面:

File

現在選擇一個文件的「Contacts.txt」使用「瀏覽」按鈕,然後點擊上傳按鈕,將文件上傳,應該看到頁面。可以檢查上傳的文件保存在 C:apache-tomcat-6.0.33work.

File

請注意,使用FileUpload攔截刪除上傳的文件自動所以需要編程在一些位置上保存上傳的文件被刪除之前。

錯誤消息:

fileUplaod攔截器使用幾個默認的錯誤消息鍵:

SN

錯誤消息鍵 & 描述

1

struts.messages.error.uploading
A general error that occurs when the file could not be uploaded.

2

struts.messages.error.file.too.large
Occurs when the uploaded file is too large as specified by maximumSize.

3

struts.messages.error.content.type.not.allowed
Occurs when the uploaded file does not match the expected content types specified.

You can override the text of these messages in WebContent/WEB-INF/classes/messages.propertiesresource files.