struts2 自定义拦截器的使用

拦截器类似于Filter,会在调用Action前和后执行。默认情况下,每个Action都会调用defaultStack这个拦截器栈,包含了多个常用的拦截器(在struts-default.xml中声明),但是当在Action声明中显式添加某个拦截器时,defaultStack就会失效,需要在最后一行手动添加.

Interceptor1.java:


package com.interceptor;

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

public class Interceptor1 implements Interceptor {
	/*
	 * 声明字符串变量,及setter方法,名字与param name属性对应,会自动从struts.xml读取配置
	 */
	private String test;
	public void setTest(String test) {
		this.test = test;
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

	@Override
	public void init() {
		// TODO Auto-generated method stub
		System.out.println("init invoked");
		System.out.println(test);
	}

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		System.out.println("before invoked");
		String result=invocation.invoke();
		System.out.println(result);
		System.out.println("after invoked");
		return result;
	}

}

也可以继承AbstractInterceptor,而不是实现Interceptor,该类对init和destory方法作了空实现

struts.xml中声明及使用:


		<interceptors>
			<interceptor name="interceptor1" class="com.interceptor.Interceptor1">
				<!-- 初始化参数,需要在拦截器类中定义相应的属性 -->
				<param name="test">asdfjweoifjljfsd</param>
			</interceptor>
		</interceptors>



		<action name="login" class="com.struts2.LoginAction">
			<result name="success">/result.jsp</result>
			<result name="input">/login.jsp</result>
			<result name="invalid.token">/1.jsp</result>
			<interceptor-ref name="interceptor1"></interceptor-ref>
			<interceptor-ref name="token"></interceptor-ref>
			<!-- 添加其他拦截器后,默认的defaultStack拦截器栈就会失效,需要显示添加 -->
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>

© 2012, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记