日本免费精品_最新日韩一区_亚洲视频一区在线_a在线视频观看_天天射夜夜骑_粉嫩av一区二区三区_欧美中日韩免费视频_综合图区欧美_国内精品美女在线观看_午夜精品久久久久久久男人的天堂

首頁 > 編程 > Java > 正文

關(guān)于Struts2文件上傳與自定義攔截器

2019-11-26 16:12:22
字體:
供稿:網(wǎng)友

一、訪問或添加request/session/application屬性

public String scope() throws Exception{
   ActionContext ctx = ActionContext.getContext();
   ctx.getApplication().put("app", "應(yīng)用范圍");//往ServletContext里放入app
   ctx.getSession().put("ses", "session范圍");//往session里放入ses
   ctx.put("req", "request范圍");//往request里放入req
   return "scope";
}
JSP:
 <body>
    ${applicationScope.app} <br>
    ${sessionScope.ses}<br>
    ${requestScope.req}<br>
 </body>

二、獲取HttpServletRequest / HttpSession / ServletContext / HttpServletResponse對象

方法一,通過ServletActionContext.類直接獲取:
public String rsa() throws Exception{
 HttpServletRequest request = ServletActionContext.getRequest();
 ServletContext servletContext = ServletActionContext.getServletContext();
 request.getSession() 
 HttpServletResponse response = ServletActionContext.getResponse();
 return "scope";
}
方法二,實現(xiàn)指定接口,由struts框架運行時注入:
public class HelloWorldAction implements ServletRequestAware, ServletResponseAware, ServletContextAware{
 private HttpServletRequest request;
 private ServletContext servletContext;
 private HttpServletResponse response;
 public void setServletRequest(HttpServletRequest req) {
  this.request=req;
 }
 public void setServletResponse(HttpServletResponse res) {
  this.response=res;
 }
 public void setServletContext(ServletContext ser) {
  this.servletContext=ser;
 }
}

三、文件上傳

第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。這兩個文件可以從http://commons.apache.org/下載。

第二步:把form表的enctype設(shè)置為:“multipart/form-data“,如下:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
  <input  type="file" name="uploadImage">
</form>

第三步:在Action類中添加以下屬性,屬性紅色部分對應(yīng)于表單中文件字段的名稱:

public class HelloWorldAction{
  private File uploadImage;//得到上傳的文件
  private String uploadImageContentType;//得到文件的類型
  private String uploadImageFileName;//得到文件的名稱
  //這里略省了屬性的getter/setter方法
  public String upload() throws Exception{
 String realpath = ServletActionContext.getServletContext().getRealPath("/images");
 File file = new File(realpath);
 if(!file.exists()) file.mkdirs();
 FileUtils.copyFile(uploadImage, new File(file, uploadImageFileName));
 return "success";
  }
}

四、多文件上傳

第一步:在WEB-INF/lib下加入commons-fileupload-1.2.1.jar、commons-io-1.3.2.jar。這兩個文件可以從http://commons.apache.org/下載。

第二步:把form表的enctype設(shè)置為:“multipart/form-data“,如下:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
  <input  type="file" name="uploadImages">
  <input  type="file" name="uploadImages">
</form>

第三步:在Action類中添加以下屬性,屬性紅色部分對應(yīng)于表單中文件字段的名稱:
public class HelloWorldAction{
  private File[] uploadImages;//得到上傳的文件
  private String[] uploadImagesContentType;//得到文件的類型
  private String[] uploadImagesFileName;//得到文件的名稱
  //這里略省了屬性的getter/setter方法
  public String upload() throws Exception{
 String realpath = ServletActionContext.getServletContext().getRealPath("/images");
 File file = new File(realpath);
 if(!file.exists()) file.mkdirs();
 for(int i=0 ;i<uploadImages.length; i++){ File uploadImage = uploadImages[i];
    FileUtils.copyFile(uploadImage, new File(file, uploadImagesFileName[i]));
}
 return "success";
  }}

五、自定義攔截器

要自定義攔截器需要實現(xiàn)com.opensymphony.xwork2.interceptor.Interceptor接口:
public class PermissionInterceptor implements Interceptor {
   private static final long serialVersionUID = -5178310397732210602L;
   public void destroy() {
   }
   public void init() {
   }
   public String intercept(ActionInvocation invocation) throws Exception {
  System.out.println("進入攔截器");
 if(session里存在用戶){
  String result = invocation.invoke();
 }else{
  return “l(fā)ogon”;
 }
 //System.out.println("返回值:"+ result);
 //return result;
    }
}
<package name="csdn" namespace="/test" extends="struts-default">
 <interceptors>
           <interceptor name=“permission" class="cn.csdn.aop.PermissionInterceptor" />
           <interceptor-stack name="permissionStack">
    <interceptor-ref name="defaultStack" />
   <interceptor-ref name=" permission " />
            </interceptor-stack>
  </interceptors>
 <action name="helloworld_*" class="cn.csdn.action.HelloWorldAction" method="{1}">
  <result name="success">/WEB-INF/page/hello.jsp</result>
  <interceptor-ref name="permissionStack"/>
 </action>
</package>

因為struts2中如文件上傳,數(shù)據(jù)驗證,封裝請求參數(shù)到action等功能都是由系統(tǒng)默認(rèn)的defaultStack中的攔截器實現(xiàn)的,所以我們定義的攔截器需要引用系統(tǒng)默認(rèn)的defaultStack,這樣應(yīng)用才可以使用struts2框架提供的眾多功能。

如果希望包下的所有action都使用自定義的攔截器,可以通過<default-interceptor-ref name=“permissionStack”/>把攔截器定義為默認(rèn)攔截器。注意:每個包只能指定一個默認(rèn)攔截器。另外,一旦我們?yōu)樵摪械哪硞€action顯式指定了某個攔截器,則默認(rèn)攔截器不會起作用。

六、輸入校驗

在struts2中,我們可以實現(xiàn)對action的所有方法進行校驗或者對action的指定方法進行校驗。
對于輸入校驗struts2提供了兩種實現(xiàn)方法:
1. 采用手工編寫代碼實現(xiàn)。
2. 基于XML配置方式實現(xiàn)。

七、手工編寫代碼實現(xiàn)對action中所有方法輸入校驗

通過重寫validate() 方法實現(xiàn), validate()方法會校驗action中所有與execute方法簽名相同的方法。當(dāng)某個數(shù)據(jù)校驗失敗時,我們應(yīng)該調(diào)用addFieldError()方法往系統(tǒng)的fieldErrors添加校驗失敗信息(為了使用addFieldError()方法,action可以繼承ActionSupport ),如果系統(tǒng)的fieldErrors包含失敗信息,struts2會將請求轉(zhuǎn)發(fā)到名為input的result。在input視圖中可以通過<s:fielderror/>顯示失敗信息。
validate()使用例子:
public void validate() {
       if(this.mobile==null || "".equals(this.mobile.trim())){  this.addFieldError("username", "手機號不能為空");
        }else{  if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
  this.addFieldError(“mobile", "手機號的格式不正確"); }
       }
}

驗證失敗后,請求轉(zhuǎn)發(fā)至input視圖:

<result name="input">/WEB-INF/page/addUser.jsp</result>
在addUser.jsp頁面中使用<s:fielderror/>顯示失敗信息。
通過validateXxx()方法實現(xiàn), validateXxx()只會校驗action中方法名為Xxx的方法。其中Xxx的第一個字母要大寫。當(dāng)某個數(shù)據(jù)校驗失敗時,我們應(yīng)該調(diào)用addFieldError()方法往系統(tǒng)的fieldErrors添加校驗失敗信息(為了使用addFieldError()方法,action可以繼承ActionSupport ),如果系統(tǒng)的fieldErrors包含失敗信息,struts2會將請求轉(zhuǎn)發(fā)到名為input的result。在input視圖中可以通過<s:fielderror/>顯示失敗信息。

validateXxx()方法使用例子:
public String add() throws Exception{  return "success";}
public void validateAdd(){
          if(username==null && "".equals(username.trim()))  this.addFieldError("username", "用戶名不能為空");
}

驗證失敗后,請求轉(zhuǎn)發(fā)至input視圖:

<result name="input">/WEB-INF/page/addUser.jsp</result>
在addUser.jsp頁面中使用<s:fielderror/>顯示失敗信息。

八、輸入校驗的流程

1、類型轉(zhuǎn)換器對請求參數(shù)執(zhí)行類型轉(zhuǎn)換,并把轉(zhuǎn)換后的值賦給action中的屬性。
2、如果在執(zhí)行類型轉(zhuǎn)換的過程中出現(xiàn)異常,系統(tǒng)會將異常信息保存到ActionContext,conversionError攔截器將異常信息添加到fieldErrors里。不管類型轉(zhuǎn)換是否出現(xiàn)異常,都會進入第3步。
3、系統(tǒng)通過反射技術(shù)先調(diào)用action中的validateXxx()方法,Xxx為方法名。
4、再調(diào)用action中的validate()方法。
5、經(jīng)過上面4步,如果系統(tǒng)中的fieldErrors存在錯誤信息(即存放錯誤信息的集合的size大于0),系統(tǒng)自動將請求轉(zhuǎn)發(fā)至名稱為input的視圖。如果系統(tǒng)中的fieldErrors沒有任何錯誤信息,系統(tǒng)將執(zhí)行action中的處理方法。

九、基于XML配置方式實現(xiàn)對action的所有方法進行輸入校驗

使用基于XML配置方式實現(xiàn)輸入校驗時,Action也需要繼承ActionSupport,并且提供校驗文件,校驗文件和action類放在同一個包下,文件的取名格式為:ActionClassName-validation.xml,其中ActionClassName為action的簡單類名,-validation為固定寫法。如果Action類為cn.csdn.UserAction,那么該文件的取名應(yīng)為:UserAction-validation.xml。下面是校驗文件的模版:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE validators PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">

<validators>
    <field name="username">
        <field-validator type="requiredstring">
            <param name="trim">true</param>
            <message>用戶名不能為空!</message>
        </field-validator>
    </field>
</validators>

<field>指定action中要校驗的屬性,<field-validator>指定校驗器,上面指定的校驗器requiredstring是由系統(tǒng)提供的,系統(tǒng)提供了能滿足大部分驗證需求的校驗器,這些校驗器的定義可以在xwork-2.x.jar中的com.opensymphony.xwork2.validator.validators下的default.xml中找到。
<message>為校驗失敗后的提示信息,如果需要國際化,可以為message指定key屬性,key的值為資源文件中的key。
在這個校驗文件中,對action中字符串類型的username屬性進行驗證,首先要求調(diào)用trim()方法去掉空格,然后判斷用戶名是否為空。
編寫校驗文件時,不能出現(xiàn)幫助信息
在編寫ActionClassName-validation.xml校驗文件時,如果出現(xiàn)不了幫助信息,可以按下面方式解決:
windwos->preferences->myeclipse->files and editors->xml->xmlcatalog
點“add”,在出現(xiàn)的窗口中的location中選“File system”,然后在xwork-2.1.2解壓目錄的src/java目錄中選擇xwork-validator-1.0.3.dtd,回到設(shè)置窗口的時候不要急著關(guān)閉窗口,應(yīng)把窗口中的Key Type改為URI 。Key改為http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
亚洲午夜av| 欧美精选午夜久久久乱码6080| 91精品国产综合久久香蕉最新版| 日韩av一区二| 国产欧美久久久精品影院| 日本不卡视频一区| av三级在线播放| 国产午夜精品久久| 精品日韩一区二区三区免费视频| 日本视频久久久| 亚洲一区中文字幕在线观看| 五月天久久比比资源色| 日韩精品视频在线免费观看| 97视频在线| 亚洲黄页一区| 婷婷中文字幕在线观看| 日韩在线视频观看| 国产裸舞福利在线视频合集| 久久综合九色欧美综合狠狠| 久久精品欧美日韩精品| 国产日韩亚洲欧美| 欧美日韩一级片在线观看| 日韩精品在线私人| 91最新在线| 国产福利久久| 免费精品国产自产拍观看| 国产福利在线播放| 午夜亚洲福利| 日韩美女中文字幕| 在线精品观看| 欧美高清一级片在线| 日韩 欧美 亚洲| 亚洲国产福利| 久久久精品午夜少妇| 日韩欧美中文| 日韩中文字幕网| 国产黄色一级片| 亚洲一区在线观看网站| 国产性一级片| 91精品国产自产在线| 日韩国产一区久久| 精人妻一区二区三区| 一级片在线免费看| 精品调教chinesegay| wwwwww在线观看| 在线一区二区三区精品| 一区二区在线高清视频| 欧美日韩国产观看视频| 日韩精品视频在线观看网址| 婷婷综合福利| 欧美久久久久久蜜桃| 日本亚洲视频在线| 一级国产黄色片| 免费高清在线一区| 精品免费久久久| 影音先锋一区二区资源站| 日韩精品视频在线播放| 日本亚洲欧美天堂免费| 亚洲九九精品| 精品国产99| 精品视频www| 国产一区在线观看视频| 日韩精品在线免费观看| 中文字幕亚洲国产| 亚洲视频中文字幕| 亚洲v中文字幕| 亚洲欧洲三级| 亚洲乱码在线观看| 日韩欧美一二三| 精品亚洲国内自在自线福利| 国产成人精品网址| 91精品免费看| 搞黄在线观看| 日韩精品三级| 欧美日韩精品在线| 亚洲最新永久观看在线| 一区二区不卡久久精品| 日韩精品丝袜在线| 欧美三级日本三级少妇99| 日韩欧美国产免费| 蜜臀久久精品| 欧美日韩国产高清一区| av中文在线资源| 国产91久久久久| 三级精品视频| 日本精品福利视频| 一区二区精品区| 欧美日韩国产综合视频在线观看中文| 天天综合天天做| 国产欧美日韩在线看| 国产69精品久久久久孕妇国产69久久 | 国产乱国产乱300精品| 国产欧美日韩中文字幕| 精品久久久久久综合日本欧美| 欧美一级日韩一级| 国产黄在线看| 国产三级视频网站| 国产乱国产乱300精品| 日韩在线不卡| 国产专区中文字幕| 国产一级视频在线播放| 一区二区不卡在线播放| 国产在线看一区| 精品播放一区二区| 亚洲一级二级| 99久久www免费| 久本草在线中文字幕亚洲欧美| 国产成人中文字幕| 91精品国产综合久久精品| 日韩精品在线第一页| 日本亚洲欧美| 国产乱国产乱300精品| 国产一区精品| 国产网站av| 国产在线第一页| aaa大片在线观看| 欧美日韩性视频一区二区三区| 日韩欧美亚洲国产| 黄色国产网站在线观看| 青青久在线视频免费观看| 国产成人中文字幕| 久久久精品福利| 一区二区三区免费看视频| 亚洲成年人在线播放| 激情婷婷亚洲| 精品福利一区二区三区| 在线精品视频免费播放| 久久精品一级爱片| 99在线精品视频免费观看20| 中文字幕在线观看精品| 香蕉人人精品| 91精品国产丝袜白色高跟鞋| 久久99精品久久久久子伦| av免费看在线| 中文字幕在线日韩| 欧美日韩国产第一页| 中文字幕在线视频久| 亚洲.国产.中文慕字在线| 中文字幕 亚洲视频| 国产欧美三级| 欧美日韩精品欧美日韩精品| 国产日韩精品电影| 久本草在线中文字幕亚洲欧美| 日韩视频一区| 国产欧美久久久| 一区二区三区在线播| 亚洲视频日韩| 欧美日韩综合在线免费观看| 三级精品视频| 国产香蕉精品视频| 狠狠色噜噜狠狠狠狠97| 精品国内自产拍在线视频| 久久综合久久综合九色| 国产一卡2卡3卡免费网站| 不卡视频一区二区| 亚洲尤物av| 国产中文在线视频| www.中文字幕在线| 国产午夜精品视频免费不卡69堂| 日本中文字幕在线观看| 欧美中文字幕在线视频| 亚洲一区精品在线| 日韩精品在线免费观看| 国产不卡精品在线| 日韩欧美中文| 国产在线第一页| 亚洲国产无线乱码在线观看 | 欧美一级久久| 日韩精品第一区| 国产日韩精品在线看| 亚洲中文字幕一区| 欧美日韩国产一级片| 欧美日韩国产大片| 国产日韩中文在线| 国产欧美久久久久久久久| 91精品国产高清91久久久久久| 亚洲欧洲在线观看av| 久久久精品免费免费| 国产一区日韩| 久久电影国产免费久久电影| 伊人网站在线| 精品在线99| 在线观看区一区二| 日韩在线小视频| 黄色精品在线观看| 国产欧美日韩精品高清二区综合区| 香蕉视频亚洲一级| 国产在线日韩精品| 在线综合 亚洲 欧美中文字幕| 日韩欧美国产高清91| 97久久精品午夜一区二区| 欧美日韩国产第一页| 在线视频第一页| 91久久久久| 欧美日韩国产综合视频在线观看| 91久久精品网| 欧美日韩综合在线观看| 激情五月综合| 欧美日韩亚洲系列| 国产视频一二区| 中文字幕亚洲视频| 一区二区三区在线播放视频| 日韩欧美中文字幕在线视频| 国产伦精品免费视频| 中文在线а√在线8| 一区二区三区在线不卡| 日韩视频精品| 日韩精品首页| 精品国产乱码一区二区| 亚洲欧美中文在线视频| 国产综合精品在线| 久久电影国产免费久久电影| 亚洲免费看av| 日韩美女中文字幕| 日韩欧美中文第一页| www.尤物.com| 午夜少妇久久久久久久久| 国产欧美日韩在线视频| 欧美日韩一二| 国产69精品久久久久孕妇国产69久久| 91久久中文| 亚洲第一香蕉网| 日韩 欧美 中文| 欧洲精品在线一区| 国产一区久久久| 中文字幕在线观看欧美| 欧美在线视频一区二区| 中文av字幕一区| 欧美日韩一级黄| 日韩精品乱码av一区二区| 亚洲欧美小说国产图片| 在线视频日韩欧美| 成人欧美亚洲| 国产一级免费看| 91精品国产调教在线观看| 欧美成人二区| 精品久久九九| 亚洲第一中文字幕在线观看| 日韩欧美久久久| 日韩欧美亚洲国产一区| 日韩精品视频中文在线观看| 国产欧美日韩中文久久| 天天综合日日夜夜精品| 欧美中文字幕在线| 中文字幕久久av| 在线三级av| 精品福利一区二区三区| 亚洲欧洲日韩在线| 一区二区视频免费看| 欧美乱大交xxxxx免费| 日韩中文字幕视频网| 欧美日韩综合视频网址| 精品亚洲永久免费| 国产成人精品综合网站| 国产在线视频一区二区| 欧美在线日韩精品| 91日韩欧美| 亚洲一区精品电影| 午夜亚洲一区| 欧美日韩不卡在线视频| 99亚洲视频| 欧美日韩国产首页| 国产福利第一页| 久久蜜桃一区二区| 日韩a一区二区| 亚洲成年人在线播放| 日韩精品久久久| 激情久久99| 亚洲欧美小说国产图片| 一区二区91| 欧美日韩亚洲天堂| 久久精品久久精品国产大片| 日本精品国语自产拍在线观看| 亚洲一区三区在线观看| 精品视频在线导航| 国产免费一级| 人人做人人澡人人爽欧美| 黄色视屏免费在线观看| 欧美日韩中文字幕日韩欧美| 国产一级片播放| 一区二区中文字幕在线| 日本不卡免费高清视频| 国产乱码在线观看| 中文字幕欧美在线| 精品视频资源站| 欧美片网站免费| 国产95在线|亚洲| 午夜一区二区三区免费| 深夜福利一区二区| 欧美日韩免费高清| 欧美中文字幕精品| 欧美日韩高清一区二区| 欧美日韩性视频| 日韩久久在线| 日韩在线 中文字幕| 日韩欧美三级视频| 一区二区精品免费| 中文字幕成人乱码在线电影| 国产免费电影网站入口| 在线一区免费| 国产视频97| 日韩精品视频网| 中文字幕精品国产| 欧美一级在线免费| 久久视频在线免费观看| 国产主播中文字幕| 国产福利在线看| 天堂在线视频中文网| 日韩免费看网站| 欧美日韩国产中文精品字幕自在自线| 一区二区在线看| a视频免费在线观看| 国产一级视频| 在线中文字幕视频| 亚洲成av人片在线| 91精品国产91久久久久青草| 日韩欧美中文视频| 国产一区日韩| 国产欧亚日韩视频| 日韩免费电影网站| 国产视频一二区| 国产欧美中文在线| 人人做人人澡人人爽欧美| 日韩精品a在线观看91| 国产乱码在线观看| 男人的天堂网av| 一区二区三区四区五区视频在线观看 | 国产成人精品三级| 国产一区日韩欧美| 精品久久久精品| 欧美日韩激情在线一区二区三区| 午夜一区二区三区视频| 日韩国产专区| 日韩欧美中文在线视频| 国产欧美综合在线观看第十页| 日韩在线 中文字幕| 欧美日韩中文字幕在线| 欧美日韩中文| 日韩影院二区| 中文国产字幕在线观看| 在线免费播放av| 亚洲区中文字幕| 中文字幕在线官网| 亚洲成a人片在线www| 国产一区激情在线| 久久久精品网| 中文字幕在线播出| 一区二区视频免费看| 亚洲大片精品永久免费| 九九九精品视频| 高清1区2区| av高清一区| 日韩视频不卡中文| 精品福利一区二区三区| 久久婷婷国产| 国产福利一区二区| 欧美日韩亚洲天堂| 欧美中文字幕精品| 欧美熟妇乱码在线一区| 精品免费久久久| 麻豆精品视频入口| 亚洲开心激情| 日韩精品视频在线播放| 欧美三级免费观看| 国产视频1区2区| 国产自产视频| 亚洲福利在线观看| 国产在线视频一区二区| 不卡视频一区二区三区| 欧美人妻一区二区三区| 国产欧美日韩中文字幕| 亚洲免费看av| 国产亚洲一级| 日韩精品一二三四区| 国产91大片| 日韩精品丝袜在线| 日韩在线视频中文字幕| 日韩一级在线视频| 国产视频2区| 欧美.日韩.国产.一区.二区| 欧美片网站免费| 天堂在线一区二区三区| 亚洲女人天堂a在线播放| а√天堂8资源中文在线| 精品久久久精品| 国产欧美日韩中文字幕在线| 欧美日韩精品国产| 日韩精品丝袜在线| 欧美日韩成人一区| 亚洲三级免费看| www.精品视频| 欧美三级网址| 91精品国产欧美日韩| 一级片在线免费看| 欧美日韩国产中文| 日韩精品中文字幕第1页| 国产一区在线精品| 极品久久久久久| 精品国产999| 国产在线不卡一区|