-1

我已经为 servlet 过滤器编写了演示程序。这是我的代码

这是我的测试类(servlet)

@WebServlet("/Test")
public class Test extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        PrintWriter out=response.getWriter();
        System.out.println("we are in servlet");
        out.println("<h1>hello</h1>");
    }
}

这是我的 TestFilter 类(过滤器)

@WebFilter("/TestFilter")
public class TestFilter implements Filter {
    public TestFilter() {}
    public void destroy() {}

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("we are in Filter One");
        chain.doFilter(request, response);
    }
    public void init(FilterConfig fConfig) throws ServletException {}
}

在这两个类中,我都编写了用于检查的打印语句,TestFilter 是否在 Test(类)之前执行。

但我得到的输出为

we are in servlet

TestFilter 什么时候执行???

4

1 回答 1

5

在这种情况下,永远不会。您已将Filterurl 映射到/TestFiler未命中的/Testis。

将其更改为

@WebFilter("/Test")

使其与您的@WebServlet.

供您参考,您在 servlet 之前放置的任何代码都chain.doFilter将在任何 servlet 之前执行,而您在其之后放置的任何代码都将在 servlet 之后执行。

System.out.println("we are in Filter One, before");
chain.doFilter(request, response);
System.out.println("we are in Filter One, after");
于 2013-09-11T14:31:26.223 回答