【发布时间】:2011-06-23 09:22:54
【问题描述】:
我读到过滤器的处理顺序可以由它们在web.xml中声明的顺序来确定
但是如何在没有 web.xml 的情况下执行此操作,例如使用 @WebServlet 注释? 我不想弄乱我的 web.xml
【问题讨论】:
-
这不是可以通过
loadOnStartupOrder属性控制的吗?
标签: java jakarta-ee servlet-filters web.xml
我读到过滤器的处理顺序可以由它们在web.xml中声明的顺序来确定
但是如何在没有 web.xml 的情况下执行此操作,例如使用 @WebServlet 注释? 我不想弄乱我的 web.xml
【问题讨论】:
loadOnStartupOrder属性控制的吗?
标签: java jakarta-ee servlet-filters web.xml
正如@axtavt 所说,你不能这样做。这就是(我认为)他们这样设计的原因。
要指定顺序,注释需要一个额外的参数,(不知何故)指定链中的位置;例如订单'。这样做有问题:
如果一个 servlet 有多个过滤器,它们的顺序由注释参数指定,那么程序员/部署者必须检查所有过滤器类的注释以确定实际顺序是什么。
理论上,给定的过滤器类可以用于多个 servlet,甚至多个 web 应用程序。每个 servlet 或 webapp 可能希望过滤器顺序不同。您无法仅使用过滤器类上的注释来实现此目的。
如果部署 webapp 的人需要更改过滤顺序,他/她需要修改源代码,重新编译和重建 WAR 文件。
我想设计者看了这些问题并决定最好指定过滤顺序的地方是在web.xml文件中。
【讨论】:
看起来对于带注释的过滤器是不可能的。 Servlet 3.0 Specification 说:
如上所述,当使用 用于定义侦听器、servlet 和过滤器的注释,它们的顺序 调用未指定。
【讨论】: