nojave 2009-10-29 09: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 10:05
    关注

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

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

报告相同问题?

悬赏问题

  • ¥15 nginx使用nfs进行服务器的数据共享
  • ¥15 C#i编程中so-ir-192编码的字符集转码UTF8问题
  • ¥15 51嵌入式入门按键小项目
  • ¥30 海外项目,如何降低Google Map接口费用?
  • ¥15 fluentmeshing
  • ¥15 手机/平板的浏览器里如何实现类似荧光笔的效果
  • ¥15 盘古气象大模型调用(python)
  • ¥15 传人记程序做的plc 485从机程序该如何写
  • ¥15 已知手指抓握过程中掌指关节、手指各关节和指尖每一帧的坐标,用贝塞尔曲线可以拟合手指抓握的运动轨迹吗?
  • ¥50 libwebsockets 如何添加其他socket事件回调