nojave 2009-10-29 17:45
浏览 356
已采纳

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条回答 默认 最新

  • CaiHuajiang 2009-10-29 18:05
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 poi合并多个word成一个新word,原word中横版没了.
  • ¥15 【火车头采集器】搜狐娱乐这种列表页网址,怎么采集?
  • ¥15 求MCSCANX 帮助
  • ¥15 机器学习训练相关模型
  • ¥15 Todesk 远程写代码 anaconda jupyter python3
  • ¥15 我的R语言提示去除连锁不平衡时clump_data报错,图片以下所示,卡了好几天了,苦恼不知道如何解决,有人帮我看看怎么解决吗?
  • ¥15 在获取boss直聘的聊天的时候只能获取到前40条聊天数据
  • ¥20 关于URL获取的参数,无法执行二选一查询
  • ¥15 液位控制,当液位超过高限时常开触点59闭合,直到液位低于低限时,断开
  • ¥15 marlin编译错误,如何解决?