Struts2 拦截器的执行顺序(二十九)

1.如果一个系统中配置了多个拦截器,根据拦截器配置的顺序不同,执行拦截器的顺序也不一样。通常认为,先配置的拦截器,会先获得执行的机会,但是实际情况不是这样。execute()方法执行之前,配置在前面的拦截器,会先对用户的请求起作用。execute()方法执行之后,配置在后面的拦截器,会先对用户的请求起作用。(两头向中间靠拢的执行)

定义拦截器

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执行完毕。。。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值