91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在java項目中如何使用Struts2攔截器

發布時間:2020-11-11 16:24:47 來源:億速云 閱讀:170 作者:Leah 欄目:編程語言

在java項目中如何使用Struts2攔截器?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

1、攔截器是什么?

攔截器相當于過濾器:就是將不想要的去掉,想要的留下。攔截器抽象出一部分代碼可以用來完善原來的action。同時可以減輕代碼冗余,提高重用率。通俗地講就是一張網,過濾掉不需要的沙子,留下水。

2、攔截器的作用:

攔截器可以構成特定的功能。比如權限認證、日志記錄和登陸判斷。

3、攔截器的原理

  在java項目中如何使用Struts2攔截器

其每一個Action請求都在攔截器中,每一個action可以將操作轉交給下面的攔截器,也可以直接退出到界面上。

4、定義攔截器:

(1)自定義一個實現Interceptor接口(不過我初學者一般直接實現框架中的Interceptor)

(2)在struts.xml中注冊定義的攔截器

(3)可以需要的action中引用攔截器

Interceptor接口聲明了三個方法

public interface Interceptor extends Serializable {
 
  void destroy();
 
  void init();
 
  String intercept(ActionInvocation invocation) throws Exception;
}

Init方法是在action作用之前調用,就是開始給爛機器的初始化操作。

Destory方法在攔截器被垃圾回收之前調用,用來回收init方法初始化的資源。

interceptor方法是攔截器的主要操作。如果需要調用后續的Action或者攔截器,只需要在該方法中調用invocation.invoke()方法即可,在該方法調用的前后可以插入Action調用前后攔截器需要做的方法。

現在對用戶登錄進行攔截,代碼如下:

public String intercept(ActionInvocation invocation) throws Exception {
    
    System.out.println("在action執行之前");
    ActionContext actionContext=invocation.getInvocationContext();
    Map<String,Object> session=actionContext.getSession();
    
    Object currentUser=session.get("currentUser");
    String result=null;
    if(currentUser!=null){
      result=invocation.invoke();
      
    }else{
      
      HttpServletRequest request=(HttpServletRequest)invocation.getInvocationContext().get(ServletActionContext.HTTP_REQUEST);
      request.setAttribute("error", "請先登錄");
      result="error";
    }
    System.out.println("result+"+result);
    System.out.println("在action執行之后");
    return result;
  }

注冊攔截器:

<interceptors>
       <interceptor name="myInterceptor"
       class="com.fangchao.interceptor.MyInterceptor"></interceptor>
       <interceptor name="loginInterceptor"
       class="com.fangchao.interceptor.LoginInterceptor"></interceptor>
       
       <interceptor-stack name="myStack">
         <interceptor-ref name="loginInterceptor"></interceptor-ref>
         <interceptor-ref name="defaultStack"></interceptor-ref>  
       </interceptor-stack>
     </interceptors>

上述代碼中的interceptor-stack是個攔截器棧。到目前為止,就是在下面引用時,比較方便。一般來講,每個action都會使用defaultStack。

攔截器參數:

配置參數:

  • excludeMethods:過濾掉不使用攔截器的方法
  • includeMethods:使用攔截器的方法。

有兩種配置方式:

<interceptor-ref name="validation">
 <param name="excludeMethods">myValidationExcudeMethod</param>
</interceptor-ref>
<interceptor-ref name="workflow">
 <param name="excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>

或者

<interceptor-ref name="defaultStack">
  <param name="validation.excludeMethods">myValidationExcludeMethod</param>
  <param name="workflow.excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>

看完上述內容,你們掌握在java項目中如何使用Struts2攔截器的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宁夏| 鹤庆县| 扬州市| 吉隆县| 城固县| 吴旗县| 赤水市| 湛江市| 富阳市| 耿马| 常宁市| 即墨市| 东乡族自治县| 中牟县| 巴彦淖尔市| 昭觉县| 右玉县| 铅山县| 商丘市| 黄龙县| 嘉黎县| 彩票| 无极县| 浑源县| 永城市| 汝城县| 隆安县| 冷水江市| 伊宁县| 页游| 电白县| 勃利县| 河东区| 江津市| 兰西县| 合作市| 肇源县| 晴隆县| 崇文区| 社旗县| 郁南县|