首页 > 代码库 > struts2 灵魂拦截器

struts2 灵魂拦截器

此文还是小零食..我将会用最通俗易懂的方式 来解释 面向切面编程 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="http://www.mamicode.com/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 灵魂拦截器