3

我从 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 将它委托给我的过滤器 - 来自本手册

所以在我的应用程序上下文中,我有:

<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!)。过滤器甚至没有被调用..

我在这里错过了什么吗?

在此先感谢,瑜伽士

4

1 回答 1

2

好的,解决了。

过滤器(它是一个 Spring bean)在 bean 定义(在应用程序上下文中)中必须与 filter-name 元素(在 web.xml 中)中的名称相同。

在我的情况下,我在我的应用程序上下文中:

<bean id="helloWorldFilter"...

在我的 web.xml 中:

<filter-name>HelloWorldFilter</filter-name>

因此,一旦它是大写的 H 和一个小 h - 这导致了问题。为了解决这个问题,我只是将应用程序上下文中的 bean id 更改为 HelloWorldFilter。

于 2012-05-05T05:43:00.277 回答