【问题标题】:Filter is not working properly过滤器无法正常工作
【发布时间】:2013-09-15 15:26:07
【问题描述】:

我已经为 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 {}
}

在这两个类中,我都编写了 print 语句来检查,TestFilter 是否在 Test(类)之前执行。

但我得到的输出是

we are in servlet

TestFilter 什么时候执行???

【问题讨论】:

  • 过滤器的映射代码在哪里
  • @ankit:已经在问题中了。

标签: java servlets servlet-filters


【解决方案1】:

在这种情况下,永远不会。您已将 Filter 映射到 URL /TestFiler,它不会被命中,/Test 是。

改成

@WebFilter("/Test")

使其与您的@WebServlet 的映射相匹配。

请注意,您放在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");

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 2013-08-16
    • 2012-11-16
    • 2011-04-06
    • 1970-01-01
    相关资源
    最近更新 更多