开始使用 STS 并创建一个新的基本“Hello World”Spring MVC 项目。 我想在我的应用程序中添加一个过滤器,所以我使用以下 doFilter 方法创建了一个过滤器 (HelloWorldFilter.java):
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("Entering Filter");
request.setAttribute("hello", "Hello World from HelloWorldFilter!");
chain.doFilter(request, response);
System.out.println("Exiting HelloWorldFilter");
}
根据我的阅读,它(我的过滤器)也应该在应用程序上下文中定义为 spring bean(Spring 将它委托(delegate)给我的过滤器 - 来自 this manual)
所以在我的应用上下文中我有:
<bean id="helloWorldFilter" class="com.yl.mvc.filters.HelloWorldFilter"> </bean>
我的 web.xml 包含以下内容:
<filter>
<display-name>HelloWorldFilter</display-name>
<filter-name>HelloWorldFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>HelloWorldFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在我的 .jsp 文件中,我添加了:
<P><%=request.getAttribute("hello")%></P>
但我在我的网页中看到的都是空的(我期望 HelloWorldFilter 提供 Hello World!)。 过滤器甚至不会被调用..
我是不是漏掉了什么?
提前致谢, 瑜珈
最佳答案
好的,解决了。
过滤器(它是一个 spring bean)在 bean 定义中(在应用程序上下文中)必须与 filter-name 元素(在 web.xml 中)具有相同的名称。
在我的例子中,我在我的应用程序上下文中有:
<bean id="helloWorldFilter"...
在我的 web.xml 中:
<filter-name>HelloWorldFilter</filter-name>
因此,一次是大写 H,一次是小写 h - 这导致了问题。 为了解决这个问题,我只是将应用程序上下文中的 bean id 更改为 HelloWorldFilter。
关于spring-mvc - 简单的 Web 应用程序过滤器不过滤请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10453109/