Struts2 过滤器和拦截器执行的顺序

在web.xml ,定义首页位置:
[code="xml"]

index.jsp

[/code]

并配置了一个filter,用于过滤对jsp的直接访问.
[code="xml"]

indexfilter
com.prodinfo.filter.IndexFilter


indexfilter
/index.jsp

[/code]

[code="java"]
......
public class IndexFilter implements Filter {
......
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

    HttpServletRequest re = (HttpServletRequest) request;
    HttpSession session = re.getSession();
    //redirect to action

    request.getRequestDispatcher("loadindex.action?id=xxx").forward(
            request, response);
    System.out.println("i am filter");
}
     ......

}
[/code]

struts.xml中配置了interceptor,拦截用户的请求,在action执行之前,load页面信息,然后继续.
[code="xml"]

class="loadHeaderFooter">







method="loadCompanyInfo">
/index.jsp


[/code]

[code="java"]
......
public String intercept(ActionInvocation invocation) throws Exception {
//System.out.println("Before Action");
//get header & footer infomation
List result = ci.getHeaderFooter("xxx");
......
System.out.println("i am interceptor");

    final String res = invocation.invoke();
    //System.out.println("After Action");
    return res;
}

......
[/code]

我理解的执行顺序是()index.jsp->(filter)"loadindex.action?id=xxx"->(interceptor)"loadHeaderFooter"->(Action)"loadindex"->(jsp)index.jsp
可是现在执行的顺序是先interceptor再filter,程序运行打印结果是:
i am interceptor
loading company info of null

i am filter
请问我该在哪里配置filter 和 interceptor的顺序呢? 谢谢!
[b]问题补充:[/b]
谢谢 蔡华江 的回复.
即是说我应该从web.xml里filter的位置来下手找我的问题的原因?
[b]问题补充:[/b]
去掉了interceptor,发现还是先执行的action再进的filter. Struts2的执行顺序一定是先action再filter? 已经把FilterDispatcher放到web.xml最上面了.

1个回答

基本正确,但是有一个地方例外。filter。
因为struts2使用的也是filter,因此filter的位置决定了filter和action的执行顺序。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问