1. 程式人生 > >struts2 靈魂攔截器

struts2 靈魂攔截器

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 } @Override
public 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 靈魂攔截器