Struts2的拦截器就是一个实现了Interceptor接口的类。
自定义Interceptor一:
public class MyIntercept implements Interceptor {
private Integer age;
@Override
public void destroy() {
System.out.println("销毁方法");
}
@Override
public void init() {
System.out.println("初始化方法");
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("age---->"+age);
System.out.println("拦截器1的方法");
//如果要往下调用action,就必须使用这个方法***************************************
return invocation.invoke();
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
自定义Interceptor二:
public class MyIntercept2 implements Interceptor {
@Override
public void destroy() {
System.out.println("销毁方法");
}
@Override
public void init() {
System.out.println("初始化方法");
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println("拦截器2的方法");
//如果要往下调用action,就必须使用这个方法***************************************
return invocation.invoke();
}
}
struts.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true" />
<package name="myInterceptor" namespace="/" extends="struts-default">
<interceptors>
<!-- 声明一个拦截器 -->
<interceptor name="myInterceptor" class="com.xxc.interceptor.MyIntercept">
<param name="age">20</param><!-- 拦截器中有age属性,并且设置了get和set方法,那么这里就可以给age属性进行赋值操作 -->
</interceptor>
<interceptor name="myInterceptor2" class="com.xxc.interceptor.MyIntercept2"></interceptor>
<!--
创建自定义的拦截器栈,拦截器栈中既能引入一个拦截器,又能引入包含多个拦截器的拦截器栈
-->
<interceptor-stack name="myStack">
<!-- 引入struts2内部的默认拦截器栈(栈中有多个拦截器) -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<!-- 引入用户自定义的拦截器 -->
<interceptor-ref name="myInterceptor2"></interceptor-ref>
<interceptor-ref name="myInterceptor"></interceptor-ref>
</interceptor-stack>
</interceptors>
<!--
如下配置后,struts2容器在启动的时候会加载两个部分
*struts2默认的拦截器栈defaultStack
*自定义的拦截器myInterceptor
先后顺序是参照myStack中配置的先后顺序执行
-->
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<action name="testInterceptorAction" class="com.xxc.interceptor.TestAction">
<result name="success">index.jsp</result>
</action>
</package>
</struts>
Action:
public class TestAction extends ActionSupport {
public String execute() throws Exception {
return SUCCESS;
}
}
运行结果如下:(因为自定义拦截器2在自定义拦截器1前,所以先执行拦截器2的方法)
拦截器2的方法
age---->20
拦截器1的方法