我已经为servlet过滤器编写了演示程序。这是我的代码
这是我的Test类(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(class)之前执行的。
但我的输出为
we are in servlet
当TestFilter要执行时???
答案 0 :(得分:5)
在这种情况下,永远不会。您已将Filter
映射到未被点击的网址/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");