struts2框架學習筆記6:攔截器
阿新 • • 發佈:2018-02-23
筆記 頁面 actions err tor 框架 map 異常 protect
攔截器是Struts2實現功能的核心部分
攔截器的創建:
第一種:
package interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.Interceptor; //攔截器的第一種創建方式 //攔截器的生命周期:隨項目啟動創建,隨項目關閉而銷毀 public class MyInterceptor implements Interceptor { @Override public void destroy() {// 銷毀 } @Override public void init() { // 初始化 } @Override public String intercept(ActionInvocation arg0) throws Exception { // 攔截方法 return null; } }
第二種:
(原理上和和第一種相同,只是空實現了init和destroy方法)
package interceptor; import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.AbstractInterceptor; //第二種創建方式 public class MyInterceptor2 extends AbstractInterceptor { @Override public String intercept(ActionInvocation arg0) throws Exception { // 攔截方法 return null; } }
第三種(推薦):
package interceptor; importcom.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; //方法過濾攔截器:定制攔截的方法 public class MyInterceptor3 extends MethodFilterInterceptor { @Override protected String doIntercept(ActionInvocation arg0) throws Exception { return null; } }
攔截器的API:
package interceptor; import com.opensymphony.xwork2.ActionInvocation; import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor; //方法過濾攔截器:定制攔截的方法 public class MyInterceptor3 extends MethodFilterInterceptor { @Override protected String doIntercept(ActionInvocation invocation) throws Exception { //前處理 System.out.println("前處理"); //放行 String result = invocation.invoke(); //後處理 System.out.println("後處理"); return result; } }
攔截器的配置:
簡單寫一個Action:
package interceptor; import com.opensymphony.xwork2.ActionSupport; public class Demo1Action extends ActionSupport { public String add() throws Exception { System.out.println("Demo1Action_add!"); return SUCCESS; } public String delete() throws Exception { System.out.println("Demo1Action_delete!"); return SUCCESS; } public String update() throws Exception { System.out.println("Demo1Action_update!"); return SUCCESS; } public String find() throws Exception { System.out.println("Demo1Action_find!"); return SUCCESS; } }
配置:
<?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> <package name="inter" namespace="/" extends="struts-default" > <interceptors> <!-- 1.註冊攔截器 --> <interceptor name="myInter3" class="interceptor.MyInterceptor3"></interceptor> <!-- 2.註冊攔截器棧 --> <interceptor-stack name="myStack"> <!-- 自定義攔截器引入(建議放在20個默認攔截器之前) --> <interceptor-ref name="myInter3"> <!-- 指定哪些方法不攔截 <param name="excludeMethods">add,delete</param> --> <!-- 指定哪些方法需要攔截 --> <param name="includeMethods">add,delete</param> </interceptor-ref> <!-- 引用默認的攔截器棧(20個) --> <interceptor-ref name="defaultStack"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 3.指定包中的默認攔截器棧 --> <default-interceptor-ref name="myStack"></default-interceptor-ref> <action name="Demo1Action_*" class="interceptor.Demo1Action" method="{1}" > <!-- 為Action單獨指定走哪個攔截器(棧) <interceptor-ref name="myStack"></interceptor-ref>--> <result name="success" type="dispatcher" >/hello.jsp</result> </action> </package> </struts>
全局配置:
<global-results> <!-- 全局結果集配置 --> <result name="toLogin" type="redirect">/login.jsp</result> </global-results> <global-exception-mappings> <!-- 如果出現java.lang.RuntimeException異常,就將跳轉到名為error的結果 --> <exception-mapping result="error" exception="java.lang.RuntimeException"></exception-mapping> </global-exception-mappings>
這時候訪問:http://localhost:8080/struts2/Demo1Action_add時候,控制臺打印,頁面跳轉hello.jsp
前處理
Demo1Action_add!
後處理
如果訪問http://localhost:8080/struts2/Demo1Action_find,只會跳轉頁面,沒有攔截
struts2框架學習筆記6:攔截器