开始使用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将它委托给我的过滤器 - 来自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>
但我在网页中看到的只是null(我期待HelloWorldFilter的Hello World!)。 甚至都没有调用过滤器..
我在这里错过了什么吗?
提前致谢, 瑜珈
答案 0 :(得分:2)
好的,它解决了。
过滤器(它是一个spring bean)在bean定义中(在应用程序上下文中)必须与filter-name元素(在web.xml中)具有相同的名称。
在我的情况下,我在我的应用程序环境中:
<bean id="helloWorldFilter"...
并在我的web.xml中:
<filter-name>HelloWorldFilter</filter-name>
因此,一旦它与资本H和曾经的小h - 导致问题。 要解决它,我只需将应用程序上下文中的bean id更改为HelloWorldFilter。