国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

關于Struts2的文件上傳

2019-11-14 20:57:48
字體:
來源:轉載
供稿:網友
關于Struts2的文件上傳

要實現Struts2框架的文件上傳,需要用到2個jar包

  1. commons-fileupload-1.2.2.jar
  2. commons-io-2.0.1.jar

由于文件解析Struts2內部已經幫我們做好了,大大降低了開發難度,我們只需要在Action里設置好對應的參數,目錄進行使用即可。

來個小示例:

upload.jsp

這個頁面的表單有三點需要注意的:

1、表單必須使用post方式提交  2、表單編碼類型 enctype="mult

 1 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> 2 <%@ taglib 

UploadAction.java

這里有幾個注意點:

1、三個成員變量的命名是有規范的:

private File upload里的的upoload一樣要和你上傳提交頁面里的name屬性值對應一致

文件類型和文件名命名分別為:頁面name屬性值+ContentType,頁面name屬性值+FileName

2、提供setter方法,以便接收對應的數據

3、定義目標文件存放處,用commons-io-2.0.1.jar包提供的FileUtils工具類把上傳文件復制到指定位置

 1 package com.lcw.struts2.upload; 2  3 import java.io.File; 4 import java.io.IOException; 5  6 import org.apache.commons.io.FileUtils; 7 import org.apache.struts2.ServletActionContext; 8  9 import com.opensymphony.xwork2.ActionSupport;10 11 public class UploadAction extends ActionSupport {12     //<s:file label="上傳文件:" name="upload"></s:file>13     private File upload;//命名應該和上傳頁面name屬性值保持一致14     private String uploadContentType;//屬性值+ContentType15     private String uploadFileName;//屬性值+FielName16     17     public void setUpload(File upload) {18         this.upload = upload;19     }20 21     public void setUploadContentType(String uploadContentType) {22         this.uploadContentType = uploadContentType;23     }24 25     public void setUploadFileName(String uploadFileName) {26         this.uploadFileName = uploadFileName;27     }28 29     public String upload() {30         File destFile = new File(ServletActionContext.getServletContext()31                 .getRealPath("/uploads")32                 + "/" + uploadFileName);33         try {    34             //工具類35             FileUtils.copyFile(upload, destFile);36         } catch (IOException e) {37             e.printStackTrace();38         }39         return SUCCESS;40     }41 }

struts.xml

 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE struts PUBLIC 3     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4     "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 <struts> 6     <constant name="struts.devMode" value="true" />     7     <!-- 全局國際化配置 --> 8     <constant name="struts.custom.i18n.resources" value="messages"></constant> 9 10     <package name="struts2test" extends="struts-default">11         <action name="upload" class="com.lcw.struts2.upload.UploadAction" method="upload">12             <result name="success">/index.jsp</result>13             <result name="input">/upload.jsp</result>14         </action>15     </package>16 17 </struts>

看下效果:

到這里基本的上傳操作已經完成了,下面來下關于上傳文件的配置參數:

首先我們打開Struts2的核心包文件:

在這個文件里,我們可以找到一些關于Struts2的常量和默認參數設置

其中我們可以看到2個參數:

①struts.multipart.saveDir    --默認的上傳路徑

struts.multipart.maxSize=2097152    --默認上傳文件的大小

若我們想改變參數設置,我們可以在struts.xml里配置,例如改變上傳文件大小限定..于此類推(這里改變的是全局設定)

1 <constant name="struts.multipart.maxSize" value="200000"></constant>

若我們想對單獨的表單做設定,struts2的攔截器FileUpload有3個屬性可以供我們選擇

①fileUpload.maximumSize: 上傳文件的最大長度(以字節為單位), 默認值為 2 MB②fileUpload.allowedTypes: 允許上傳文件的類型, 各類型之間以逗號分隔③fileUpload.allowedExtensions: 允許上傳文件擴展名, 各擴展名之間以逗號分隔

關于參數,我們可以打開struts2的核心包里的struts-default.xml進行查看

我們可以發現fielUpload攔截器處于Struts2默認的攔截棧里,并且可以發現這個攔截棧引用了workflow,調用Action的validate方法,一旦有錯誤返回,重新定位到INPUT頁面

例如:我們保持以上上傳代碼不變,在配置文件的Actin里添加:

1 <interceptor-ref name="defaultStack">2                 <param name="fileUpload.allowedExtensions">.txt</param>3 </interceptor-ref>

設置允許上傳文件類型為txt,此時來看看效果:

很明顯,上傳失敗了,也就意味我們的配置文件限制起作用了。

那么關于錯誤信息的回顯

1、 若我們是針對常量做設置,出錯則跳轉input 視圖, 通過 <s:actionError /> 回顯錯誤信息

2、若我們是對fileLoad做設置,出錯則在頁面通過 <s:fieldError /> 回顯錯誤信息

例如上面出現的回顯錯誤信息File extension not allowed,我們可以在struts2的核心jar的struts-messages.properties里找到

其中的{0}{1}{2}{3}參數分別代表upload,"C和C++程序員的Lua快速入門.pdf" ,"upload__689312be_147f80f105d__8000_00000005.tmp" ,application/pdf

我們可以來個國際化覆蓋對應的key值,進行我們想要的回顯信息:

我上傳一個Word文件,看下此時的頁面效果:

搞定搞定,寫博客還是蠻累的。。。關于Struts2的多文件上傳請戳這里:http://m.survivalescaperooms.com/lichenwei/p/3928200.html


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 通渭县| 泸西县| 宽城| 安达市| 随州市| 五常市| 特克斯县| 延安市| 广德县| 合阳县| 盘山县| 灵台县| 镇赉县| 颍上县| 开阳县| 兴仁县| 宁远县| 樟树市| 阿合奇县| 安远县| 吉木乃县| 大田县| 建昌县| 肥东县| 临沂市| 迁安市| 大英县| 龙井市| 望都县| 安阳市| 涪陵区| 嘉兴市| 龙川县| 桂东县| 靖宇县| 时尚| 阿尔山市| 札达县| 徐汇区| 德昌县| 固原市|