1. 程式人生 > >JavaEE--SSH--structs2-自定義多個攔截器及攔截器鏈(棧)的使用演示

JavaEE--SSH--structs2-自定義多個攔截器及攔截器鏈(棧)的使用演示

之前我已經介紹過了自定義攔截器的使用方法.

通常我們使用攔截器來對action請求進行功能增強.

但是在使用自定義攔截器後會導致struts2內建的攔截器失效.這樣就會影響action的正常存取引數.

下面我來演示一下如何避免這種情況的發生.

1.首先建立專案

2.匯入struts2的相關jar包

3.建立struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 開發者模式-->
<constant name="struts.devMode" value="true"></constant>
<package name="p1" extends="struts-default" abstract="true"></package>
<package name="p2" extends="p1" namespace="/">
<!--配置自定義攔截器 -->
<interceptors>
<interceptor name="myInterceptor01"
class="cn.asiainfo.web.interceptor.InterceptorTest01"></interceptor>
<interceptor name="myInterceptor02"
class="cn.asiainfo.web.interceptor.InterceptorTest02"></interceptor>
<!-- 配置攔截器棧 -->
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="myInterceptor01" />
<interceptor-ref name="myInterceptor02" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 預設執行的攔截器 -->
<default-interceptor-ref name="myDefaultStack" />
<!-- 配置action -->
<action name="demo01" class="cn.asiainfo.web.action.ActionTest"
method="demo01">
<result>/demo01.jsp</result>
</action>
<action name="demo02" class="cn.asiainfo.web.action.ActionTest02"
method="demo02">
<result>/demo01.jsp</result>
</action>
</package>
</struts>

4.建立多個攔截器(Interceptor)

public class InterceptorTest01 extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
System.out.println("MyInterceptor01攔截器執行");
String value = arg0.invoke();
System.out.println("MyInterceptor01攔截器放行");
return value;
}

}

public class InterceptorTest02 extends MethodFilterInterceptor {
@Override
protected String doIntercept(ActionInvocation arg0) throws Exception {
System.out.println("MyInterceptor02攔截器執行");
String value = arg0.invoke();
System.out.println("MyInterceptor02攔截器放行");
return value;
}
}

5.建立多個動作類(Action)

public class ActionTest extends ActionSupport{
public String demo01() {
System.out.println("demo01.......");
return SUCCESS;
}

}

public class ActionTest02 extends ActionSupport{
public String demo02() {
System.out.println("demo02.......");
return SUCCESS;
}

}

6.建立jsp頁面.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
demo01.jsp
</body>

</html>

6.測試: 將專案新增到Tomcat,執行伺服器進行訪問.

訪問action1的demo01方法



訪問action2的demo02方法



7.結果分析

我們定義的攔截器會按照struts.xml中的順序進行執行.

<!-- 配置攔截器棧 -->
<interceptor-stack name="myDefaultStack">
<interceptor-ref name="myInterceptor01" />
<interceptor-ref name="myInterceptor02" />
<interceptor-ref name="defaultStack" />

</interceptor-stack>

注:要把struts2自帶的攔截器放到最後,否則會報錯.

    當我們配置了

<!-- 預設執行的攔截器 -->

<default-interceptor-ref name="myDefaultStack" />

    就不用在action中單獨配置攔截器了.它會預設執行.

覺得對你有幫助或者喜歡的可以點個贊哦~~