2阶——web三大组件之2(Filter(过滤器) Listen(监听器))

1.实现一个filter步骤

  >编写一个java类实现Lister接口

@WebFilter("/*")  //这样就不需要在web.xml文件中再配置了
public class EncodingFilter implements Filter {
  
}

  >在web.xml文件中配置 可以用注解  @WebFilter("/*")替代xml文件配置

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>cn.filter.EncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Web三大组件(filter listen servlet)  其实filter listen 都与servlet 一样在服务器启动时创建

 

 

注解形式

@WebFilter(value = "/*",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})

 xml形式

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>cn.filter.EncodingFilter</filter-class>

    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
        <dispatcher> REQUEST</dispatcher>  <!--这个配置可以限制通过何种请求才会调用到这个过滤器-->
        <dispatcher> FORWARD</dispatcher>   <!--这个配置可以限制通过何种请求才会调用到这个过滤器-->
    </filter-mapping>

验证登录小demo

 public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)servletRequest;
        HttpServletResponse response = (HttpServletResponse)servletResponse;

        String requestURI = request.getRequestURI();
        HttpSession session = request.getSession();
    
     //先放行登录的资源
if(requestURI.contains("/login.jsp") || requestURI.contains("/css/") || requestURI.contains("/loginServlet")|| requestURI.contains("/js/")|| requestURI.contains("/checkCodeServlet") ){ filterChain.doFilter(request,response); }else {         
      //如果不是登录的资源则判断用户是否登录 如果登录则放行,如果没有登录则跳转
Object user
= session.getAttribute("user"); if(user != null){ filterChain.doFilter(request,response); }else{ //没有登录 需要跳转 request.setAttribute("login_msg","请先登录"); request.getRequestDispatcher("/login.jsp").forward(request,response); } } }
坚持
原文地址:https://www.cnblogs.com/gaoSJ/p/12931894.html