实现servlet过滤器需要使该类实现Filter接口并设置拦截对象,同时还要重写Filter接口的三个方法,如下所示:
package com.wjh.Test;import javax.servlet.*;import javax.servlet.annotation.WebFilter;import java.io.IOException;@WebFilter("/servlet01")//拦截servlet01的请求,当参数是“/*”时表示拦截所有的请求(包括到请求到servlet类、jsp、html...)public class Filter01 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println("Filter01的生命周期开始...");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("Filter01对该请求进行了拦截...");filterChain.doFilter(servletRequest,servletResponse);//放行被拦截的资源,如果不放行的话,请求就无法到达相应的文件}@Overridepublic void destroy() {//释放该类的资源System.out.println("Filter01的生命周期结束...");}}
package com.wjh.Test;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/servlet01")public class servlet01 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("请求到达了servlet01...");}}
package com.wjh.Test;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;@WebServlet("/servlet02")public class servlet02 extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("请求到达了servlet02...");}}
运行结果:
访问servlet01:
访问servlet02:
可以看见,过滤器只是拦截了被设置好的servlet01
如过设置了多个过滤器,那么过滤器的名字的首字母小的先执行,而响应却刚好反过来。
