JavaWeb的学习—Filter

Filter

  1. 过滤器。Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器(Filter)。通过Filter,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截.

    比如:在用户张三登录后,会跳转到张三的个人主页,正常来说,当张三注销登录时,想要再次直接使用这个页面的URL直接请求张三的个人主页是不被允许的。Filter就可以起到拦截此时的URL。

    即在调用目标资源之前先运行Filter做判断。

  2. Filter接口的三个方法

    • public void init(FilterConfig filterConfig);//初始化Filter。服务器一运行就执行
      //参数的方法
      public interface FilterConfig {
          String getFilterName();
      
          ServletContext getServletContext();
      
          String getInitParameter(String var1);
      
          Enumeration getInitParameterNames();
      }
      
      
    • public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
          //ServletRequest,ServletResponse就是ServletResponse请求与响应。注意不是HttpServletRequest,HttpServletResponse。
          
          public interface HttpServletRequest extends ServletRequest {}
      	//使用强转
      	HttpServletRequest req=(HttpServletRequest)servletRequest;
          HttpServletResponse resp=(HttpServletResponse) servletResponse;
      
      	/*FilterChain可以进行doFilter的循环调用。这可以保证每次资源调用之前doFilter的运行。web服务器在调用doFilter方法时,会传递一个filterChain对象进来,filterChain对象是filter接口中最重要的一个对象,它也提供了一个doFilter方法,开发人员可以根据需求决定是否调用此方法,调用该方法,则web服务器就会调用web资源的service方法,即web资源就会被访问否则web资源不会被访问。*/
      
      public interface FilterChain {
          void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;
      }
      
      
    •     //服务器关闭,Filter销毁。可以释放过滤器使用的资源。
          public void destroy() {
          }
      
  3. Filter 的使用

    • 创建 Filter实现类,重写上面三个方法。

      public class SysFilter implements Filter {
          //服务器建立,Filter就建立
          @Override
          public void init(FilterConfig filterConfig) throws ServletException {
      
          }
      
          @Override
          public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
              HttpServletRequest req=(HttpServletRequest)servletRequest;
              HttpServletResponse resp=(HttpServletResponse) servletResponse;
              if(req.getSession().getAttribute("USER_SESSION")==null){
                  resp.sendRedirect("/error/404.jsp");
              }else{
      
              }
              filterChain.doFilter(servletRequest, servletResponse);
          }
          //服务器关闭,Filter销毁
          @Override
          public void destroy() {
      
          }
      }
      
    • 在web.xml文件中配置注册与映射。

          <filter>
              <!--自定义Filter实现类name-->
              <filter-name>SysFilter</filter-name>
              <!--Filter实现类的路径-->
              <filter-class>com.mcwen.filter.SysFilter</filter-class>
          </filter>
          <!--Filter路径映射-->
          <filter-mapping>
              <filter-name>SysFilter</filter-name>
              <url-pattern>/sys/*</url-pattern>
          </filter-mapping>
      

JavaWeb的学习—Filter

上一篇:ECharts 给X轴文字添加点击事件


下一篇:C++第10课 STL容器 (十)