struts2 靈魂攔截器
阿新 • • 發佈:2017-08-04
todo ognl 代理 tor XML 實施 spa struts-2 ftw
此文還是小零食..我將會用最通俗易懂的方式 來解釋 面向切面編程 AOP
話不多說上圖 管理攔截器最好的解釋
就是在你的service或者一個方法前調用一個方法,或者在方法後調用一個方法比如動態代理就是攔截器的簡單實現,在你調用方法前打印出字符串(或者做其它業務邏輯的操作),也可以在你調用方法後打印出字符串,甚至在你拋出異常的時候做業務邏輯的操作。 這貨還有一個說法 就是可插拔因為Struts2攔截器是在訪問某個Action或Action的某個方法,字段之前或之後實施攔截,所以你可以先他插入可以先他拔出 ....正經點臉.所以攔截器就像填充物= = 用的時候放上 不用的時候也可以放上..
然後就是配置咯 先搞個接口 Interceptor 然後實現 裏面的方法 第一個第二個 基本上沒什麽卵用 第三個 才是重點
Init()方法:在服務器起動的時候加載一次,並且只加載一次;
Destroy()方法:當攔截器銷毀時執行的方法;
Interceptor()方法:其中裏邊有一個參數invocation
這是代碼
package cn.java.Interceptor; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor; public class MyInterceptor implements Interceptor{ @Override public void destroy() { // TODO Auto-generated method stub } @Override public void init() { // TODO Auto-generated method stub } @Overridepublic String intercept(ActionInvocation invocation) throws Exception { Object user = invocation.getInvocationContext().getSession().get("user"); if(user!=null){ //告訴S2接著繼續幹比如 調用下一個攔截器 或 執行下一個Action //就等於退出了你自己編寫的這個intercept invocation.invoke(); }else{ ActionContext.getContext().put("message", "message"); } return "message"; } }
然後是xml文件的配置 可能有點雜亂= =
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <constant name="struts.devMode" value="true"></constant> <constant name="struts.custom.i18n.resources" value="baseName"></constant> <!-- <constant name="struts.action.extension" value="xxx,do,action"></constant> <include file="struts-vv.xml"/> <include file="struts-mm.xml"/> <include file="struts-test.xml"/> --> <package name="kk" namespace="/kk" extends="struts-default"> <!-- 註冊一個攔截器 --> <interceptors> <interceptor name="myinterceptor" class="cn.java.Interceptor.MyInterceptor"></interceptor> <interceptor name="myinterceptor1" class="cn.java.Interceptor.MyInterceptor1"></interceptor> <interceptor-stack name="myinter"> <!-- 手動引入攔截器棧 --> <interceptor-ref name="defaultStack" /> <interceptor-ref name="myinterceptor1"></interceptor-ref> </interceptor-stack> <interceptor name="methodinterceptor" class="cn.java.Interceptor.MethodInterceptor"></interceptor> </interceptors> <action name="dt1" class="cn.java.action.DataTypeAction"> <result name="success">/1.jsp</result> <result name="input">/error.jsp</result> </action> <action name="aca" class="cn.java.action.ActionAContextAction"> <result>/info.jsp</result> </action> <action name="ia" class="cn.java.action.InterceptorAction"> <interceptor-ref name="myinterceptor"></interceptor-ref> <result>/main.jsp</result> <result name="message">/message.jsp</result> </action> <action name="kw" class="cn.java.action.KeyWordAction"> <interceptor-ref name="myinter"></interceptor-ref> <result>/main.jsp</result> </action> <action name="mth_*" class="cn.java.action.MyMethodAction" method="{1}"> <interceptor-ref name="methodinterceptor"> <param name="includeMethods">execute,execute2,execute3</param><!--不攔截誰 --> </interceptor-ref> <result>/main.jsp</result> </action> <action name="mva_*" class="cn.java.action.MyValidateAction" method="{1}"> <result name="success">/main.jsp</result> <result name="input">/register1.jsp</result> </action> <action name="sa_*" class="cn.java.action.StudentAction" method="{1}"> <result name="success">/main.jsp</result> <result name="input">/Xmlvalidator.jsp</result> </action> <action name="i18a" class="cn.java.action.I18nAction"> <result name="success">/main.jsp</result> </action> <action name="ognlaction" class="cn.java.action.OGNLAction"> <result name="success">/main.jsp</result> </action> </package> </struts>
不肝了明天繼續...
struts2 靈魂攔截器