JavaEE之过滤器

    技术2022-07-11  112

    过滤器 过滤器有两个功能: 1 过滤器 需要在请求和相应拦截 2 需要过滤器放行

    1 过滤器(Filter): 实现一个Filter接口 init()、destroy() 原理、执行时机 同Servlet 配置过滤器,类似servlet 通过doFilter()处理拦截,并且通过chain.doFilter(request, response);放行

    细节 过滤器中doFilter方法参数:ServletRequest 在Servlet中的方法参数:HttpServletRequest

    public class MyFilter implements Filter{ @Override public void init(FilterConfig filterConfig) throws ServletException { System.out.println("init.............."); } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { System.out.println("处理请求"); filterChain.doFilter(servletRequest,servletResponse);//过滤器执行停止接着请求向Servlet转发 System.out.println("处理相应的响应"); } @Override public void destroy() { System.out.println("destroy..............."); }

    2 filter映射 配置filter

    <filter> <filter-name>MyServlet</filter-name> <filter-class>cn.tju.filter.MyFilter</filter-class> </filter> MyServlet /MyServlet

    只拦截 访问MyServlet的请求

    <url-pattern>/MyServlet</url-pattern>

    拦截一切请求(每一次访问 都会被拦截)

    <url-pattern>/*</url-pattern>

    3 通配符 dispatcher请求方式: REQUEST:拦截HTTP请求 get post FORWARD:只拦截 通过 请求转发方式的请求

    INCLUDE:只拦截拦截通过 request.getRequestDispatcher("").include() 、通过<jsp:include page="…" />此种方式发出的请求 ERROR:只拦截发出的请求

    例子

    <filter-mapping> <filter-name>MyServlet</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>

    当请求转发的时候 客户端请求initServlet的时候,在initServlt中请求转发

    request.getRequestDispatcher("jstl2.jsp").forward(request,response);

    就会拦截两次 过程 Filter处理请求 serlvlet中处理请求 Filter处理转发请求 Filter处理转发的响应 Filter处理响应 当重定向的时候 客户端请求MyServlet的时候,在MyServlet中重定向el.jsp

    response.sendRedirect("el.jsp");

    过程 过滤器处理到MyServlet请求 MyServlet运行,重定向 过滤器处理MyServlet响应 过滤器处理到el.jsp请求 过滤器处理el.jsp响应

    4 过滤器链 可以配置多个过滤器,过滤器的先后顺序是由< filter-mapping>的位置决定

    Processed: 0.008, SQL: 9