拦截器

  • 拦截器的方法过滤

默认情况下,如果为某个Action配置拦截器,则这个拦截器将拦截Action中的所有方法。因此想实现拦截器的方法过滤应该继承MethodFileInterceptor抽象类,重写其doIntercept()方法。

需要使用的两个参数:

excludeMethods

参数指定拦截器拒接拦截器拦截的方法列表。如果有多个方法,则每两个方法用“,”隔开。如:login,register.拦截器将不会拦截login()和register()方法。

includeMethods

参数指定拦截器需要拦截器拦截的方法列表。如果有多个方法,则每两个方法用“,”隔开。如:login,register.拦截器将会拦截login()和register()方法。


1.拦截器类MethodInterceptor.java配置

package interceptor;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

public class MethodInterceptor extends MethodFilterInterceptor{

	/**
	 * 
	 */
	private static final long serialVersionUID = 456618038854682063L;

	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		System.out.println("拦截器起作用了");
		//invoke()继续执行下一步操作。
		return invocation.invoke();
	}

}

2.action类配置MethodAction.java

package action;

import com.opensymphony.xwork2.ActionSupport;

public class MethodAction  extends ActionSupport{

	/**
	 * 
	 */
	private static final long serialVersionUID = -6421309871527198245L;

	@Override
	public String execute(){
		System.out.println("execute()方法执行");
		return SUCCESS;
	}
	public String login(){
		System.out.println("login()方法执行");
		return SUCCESS;
	}
	public String register(){
		System.out.println("register()方法执行");
		return SUCCESS;
	}


}

3.struts.xml配置

<!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.i18n.encoding" value="gb2312" />
	<package name="default" extends="struts-default">
		<interceptors>
			<interceptor name="methodInterceptor" class="interceptor.MethodInterceptor" />
		</interceptors>
		<action name="method" class="action.MethodAction" method="login">			<!-- 配置Action -->
			<result name="success">/success.jsp</result>
			<result name="login">/login.jsp</result>

			<interceptor-ref name="methodInterceptor">
				<param name="excludeMethods">execute</param>
			</interceptor-ref>

			<!-- <interceptor-ref name="methodInterceptor"> <param name="excludeMethods">login,register</param> 
				</interceptor-ref> -->
			<!-- <interceptor-ref name="methodInterceptor"> <param name="includeMethods">login</param> 
				<param name="excludeMethods">execute</param> </interceptor-ref> -->

			<interceptor-ref name="defaultStack" />					<!-- 引用系统默认拦截器 -->
		</action>

	</package>
</struts>

  • 拦截器执行顺序

execute()方法执行之前,配置在前面的拦截器会先对用户起作用,execute()方法执行之后,配置在后的拦截器会先对用户起作用。

  • 拦截结果监听器

实现拦截结果的监听器,只需要实现PreresultListener接口。

注:在拦截器结果监听器的方法beforeResult()中,也可以获得ActionInvocation实例,但是千万不能通过此实例再次调用invoke()方法,如果再次调用,将会再次进入Action处理,Action处理之后再执行beforeResult()fangfa,这样会进入死循环。


































































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值