1.如果一个系统中配置了多个拦截器,根据拦截器配置的顺序不同,执行拦截器的顺序也不一样。通常认为,先配置的拦截器,会先获得执行的机会,但是实际情况不是这样。execute()方法执行之前,配置在前面的拦截器,会先对用户的请求起作用。execute()方法执行之后,配置在后面的拦截器,会先对用户的请求起作用。(两头向中间靠拢的执行)
定义拦截器
action
struts.xml
--访问
http://localhost:8080/Struts2_interceptorSort/default.action
--控制台的信息 如下
拦截器1执行了。。。
拦截器2执行了。。。
拦截器3执行了。。。
拦截器3执行完毕。。。
拦截器2执行完毕。。。
拦截器1执行完毕。。。
定义拦截器
package com.sh.interceptor;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class DefaultInterceptor extends AbstractInterceptor{
private String name;
public void setName(String name) {
this.name = name;
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
System.out.println(name+"执行了。。。");
String result=invocation.invoke();
System.out.println(name+"执行完毕。。。");
return result;
}
}
action
package com.sh.action;
import com.opensymphony.xwork2.ActionSupport;
public class DefaultAction extends ActionSupport {
public String execute(){
return SUCCESS;
}
}
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> <!-- 如果 注解的action配置改变时候不需要重新启动tomcate --> <constant name="struts.devMode" value="false"/> <constant name="struts.convention.classes.reload" value="true" /> <package name="default" extends="struts-default"> <interceptors> <interceptor name="inter1" class="com.sh.interceptor.DefaultInterceptor"/> <interceptor name="inter2" class="com.sh.interceptor.DefaultInterceptor"/> <interceptor name="inter3" class="com.sh.interceptor.DefaultInterceptor"/> </interceptors> <action name="default" class="com.sh.action.DefaultAction"> <result>/index.jsp</result> <interceptor-ref name="inter1"> <param name="name">拦截器1</param> </interceptor-ref> <interceptor-ref name="inter2"> <param name="name">拦截器2</param> </interceptor-ref> <interceptor-ref name="inter3"> <param name="name">拦截器3</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </action> </package> </struts>
--访问
http://localhost:8080/Struts2_interceptorSort/default.action
--控制台的信息 如下
拦截器1执行了。。。
拦截器2执行了。。。
拦截器3执行了。。。
拦截器3执行完毕。。。
拦截器2执行完毕。。。
拦截器1执行完毕。。。