struts2拦截器

拦截器是struts2的一个功能,在访问Action的时候会调用struts2的拦截器(如果存在的话)。拦截器既可以作用于Action的前面,将传递的参数修改;也可以作用于Action的后面,将返回的结果转换。他是AOP(面向切面编程)的一种实现。

要实现拦截器,有三种方式:

实现Intercept接口( com.opensymphony.xwork2.interceptor.Interceptor

实现 AbstractInterceptor抽象类(com.opensymphony.xwork2.interceptor.AbstractInterceptor)

实现 MethodFilterInterceptor 抽象类(com.opensymphony.xwork2.interceptor.MethodFilterInterceptor)。

Interceptor 有以下方法必须实现:


public class AInterceptor implements Interceptor{
 public void init(){}
 public void destroy(){}
 public String intercept(ActionInvocation invocation) throws Exception{
  return invocation.invoke()
 }
}

init方法在拦截器初始化的时候执行

AbstractInterceptor和MethodFilterInterceptor是Interceptor的一个模板,简化了Interceptor的实现。

其中AbstracetInterceptor已经实现了init(),destroy方法。而MethodFilterInterceptor则多了 includeMethods excludeMethods 两个属性,includeMethods决定哪些方法需要拦截,exceludeMethods决定哪些方法不需要拦截。

-----------------------------------------------------例子---------------------------------------------------

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
import java.util.Map;

public class HeheInterceptor implements Interceptor {
    public void init(){
        System.out.println("this is init !");
    }

    public void destroy(){
        System.out.println("this is destroy !");
    }

    public String intercept(ActionInvocation invocation) throws Exception{
        try{
            Thread.sleep(10000);
        }catch (InterruptedException e){
            e.printStackTrace();
        }
        Map session = invocation.getInvocationContext().getSession();
        Operator operator = (Operator)session.get("cms_operator");
        System.out.println("hello the user's name is "+operator.getLoginName());
        System.out.println("hello the user's password is "+operator.getPassword());
        operator.setLoginName("hehe");
        return invocation.invoke();
    }
}
在以上代码中实现步骤是这样的:


1.初始化的时候会执行init方法

2.被拦截时进入interceptor方法

3.“沉睡”10秒钟

4.将一个账号的名字修改

5.让action继续执行

6.当该对象被回收时执行destory方法

struts的配置文件可以这样写:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" >
<struts>
	<package name="default" extends="struts-default">
	<interceptors>
            <interceptor name="hehe" class="moretv.cms.interceptor.HeheInterceptor"/>
            <interceptor-stack name="default">
			<interceptor-ref name="hehe" />
			</interceptor-stack>
		</interceptors>
		<default-interceptor-ref name="default" />
	</package>
	<package name="user" extends="default"  namespace="/">
	  <action name = "login" class="AAction" method="login">
          <result name="error">/WEB-INF/jsp/login.jsp</result>
          <result name="success">/WEB-INF/jsp/main.jsp</result>
         </action>
	</package>
</struts>



也可以这样写:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "struts-2.1.dtd" >
<struts>
	<package name="default" extends="struts-default">
	<interceptors>
            <interceptor name="hehe" class="moretv.cms.interceptor.HeheInterceptor"/>
		</interceptors>
	</package>
	<package name="user" extends="default"  namespace="/">
	  <action name = "login" class="AAction" method="login">
            <interceptor-ref name="hehe" />
          <result name="error">/WEB-INF/jsp/login.jsp</result>
          <result name="success">/WEB-INF/jsp/main.jsp</result>
         </action>
	</package>
</struts>

第一种方法所有继承了default的package下的action都会被hehe拦截器拦截

第二种方法则可以在需要的时候被拦截









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值