我正在做一个CMS。
我的代码是在 doGet()
的servlet函数 "/market"
. 我想要一个 HttpServletRequestWrapper
将通过所有为url设置的过滤器 "/page"
.
我希望这些过滤器能够更新请求,这样注释处理器就可以在以后注入具有正确值的依赖关系。
我在Tomcat服务器中,所以我应该可以投射到正确的特殊对象,我不需要符合其他服务器的要求。
一个相关的问题是,使用 req.getRequestDispatcher(path).forward(requestWrapper, responseWrapper);
我期待着过滤器被调用。javadoc说:"它们应该被调用吗?
这个方法允许一个servlet对一个请求进行初步处理
过滤器默认映射在 REQUEST
仅供调度员使用。下面是一个过滤器映射的例子
<filter-mapping>
<filter-name>yourFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
隐含着相当于
<filter-mapping>
<filter-name>yourFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
这意味着,过滤器只在 "原始 "传入请求上触发,而不是在转发请求上触发。
还有三个调度器。FORWARD
, INCLUDE
和 ERROR
. 该 RequestDispatcher#forward()
触发 FORWARD
派遣员。如果你想让你的过滤器也挂在上面,那么只需添加它。
<filter-mapping>
<filter-name>yourFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
注意,你需要明确指定 REQUEST
调度器,否则它会认为你完全覆盖了它,而只对 FORWARD
派遣员。
在过滤器里面,如果你想区分一个。REQUEST
和 FORWARD
的请求属性,然后你就可以通过确定一个以 RequestDispatcher#FORWARD_REQUEST_URI
String forwardRequestURI = (String) request.getAttribute(RequestDispatcher.FORWARD_REQUEST_URI);
if (forwardRequestURI != null) {
// Forward was triggered on the given URI.
}