一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java中的Struts2攔截器詳解

java中的Struts2攔截器詳解

2020-08-25 10:41心似猛虎細嗅薔薇 Java教程

本篇文章主要介紹了java中的Struts2攔截器淺解,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

最近在學習struts的攔截器,現在來總結一下。

1、攔截器是什么?

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

2、攔截器的作用:

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

3、攔截器的原理

java中的Struts2攔截器詳解

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

4、定義攔截器:

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

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

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

Interceptor接口聲明了三個方法

java" id="highlighter_374687">
?
1
2
3
4
5
6
7
8
public interface Interceptor extends Serializable {
 
  void destroy();
 
  void init();
 
  String intercept(ActionInvocation invocation) throws Exception;
}

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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;
  }

注冊攔截器:

?
1
2
3
4
5
6
7
8
9
10
11
<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:使用攔截器的方法。

有兩種配置方式:

?
1
2
3
4
5
6
<interceptor-ref name="validation">
 <param name="excludeMethods">myValidationExcudeMethod</param>
</interceptor-ref>
<interceptor-ref name="workflow">
 <param name="excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>

或者

?
1
2
3
4
<interceptor-ref name="defaultStack">
  <param name="validation.excludeMethods">myValidationExcludeMethod</param>
  <param name="workflow.excludeMethods">myWorkflowExcludeMethod</param>
</interceptor-ref>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/TigerandRose/p/6506438.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产乱码一卡二卡3卡四卡 国产乱插 | 欧美伦理影院 | 亚洲六月丁香六月婷婷蜜芽 | 国产免费视 | 白丝爆动漫羞羞动漫网站 | 久久精品观看影院2828 | 欧美日韩国产成人综合在线影院 | 久久精品一卡二卡三卡四卡视频版 | 99久久精品免费看国产一区二区 | 深夜成人 | 99热精品成人免费观看 | 精品久久成人免费第三区 | 日比免费视频 | 国产精品手机视频一区二区 | 国产欧美日韩专区 | japanesen女同| 亚洲日韩精品欧美一区二区 | 国产亚洲精品日韩香蕉网 | 我的奶头被客人吸的又肿又红 | 欧美性一区二区三区 | 日韩激情视频在线观看 | 6080伦理久久精品亚洲 | 久久视热频国产这里只有精品23 | 日本不卡视频免费 | 草逼网站视频 | 亚洲国产一区二区a毛片 | 青青青青青国产费线在线观看 | 亚洲成av人片天堂网 | 国偷盗摄自产福利一区在线 | 欧美视频精品一区二区三区 | 青青草国产一区二区三区 | 2021日产国产麻豆 | 热99精品 | 边摸边吃奶又黄激烈视频韩国 | 国产在线视频自拍 | 国产大乳美女挤奶视频 | hd最新国产人妖ts视频 | 久久精品动漫网一区二区 | 无套日出白浆在线播放 | 国产香蕉一区二区在线观看 | 美女全身体光羞羞漫画 |