Filter

  • Filter表示过滤器,是JavaWeb 三大组件之一(Servlet,Filter,Listener)

  • 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。

  • 过滤器一般完成一些通用的操作,比如:权限控制,统一编码处理,敏感字符处理等。

  • 定义一个类,实现implements Filter

    在类上添加注解@WebFilter

    在doFilter中输出 chain.doFilter(request,response)

     

  • Filter 可以根据需求,配置不同的拦截资源路径

    1.拦截具体的资源:/index.jsp

    2.目录拦截:/user/ *,访问/user下的所有资源都会被拦截

    3.后缀名拦截:* .jsp:访问后缀名为jsp的资源,都会被拦截

    4.拦截所有: /* :访问所有资源,都会被拦截

 

 

package com.yang.web.filter;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.io.IOException;
//加注解
@WebFilter("/*")
public class LoginFilter implements Filter {//实现这个Filter接口
   @Override
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
       //强转request
       HttpServletRequest hsr = (HttpServletRequest) request;
       //登录有关的都要放行
       String[] urls = {"/register.jsp","/login.jsp","/loginServlet","/registerServlet"};
       //获取当前的访问路径资源
       String url = hsr.getRequestURL().toString();

       System.out.println(url);
       //遍历集合
       for (String s : urls) {
               //比对s.equals(url),
           //url.contains(s) 要这样写
           //打印url:http://localhost:8080/loginServlet
           //url包含这个s这个地址
           if (url.contains(s)) {
               //放行
               chain.doFilter(request, response);
               //结束方法
               return;
          }

      }

       //获取session
       HttpSession session = hsr.getSession();
       //放行前验证用户是否登录,判断Session中是否有user
       Object user = session.getAttribute("user");
       if (user != null) {
           //登录成功
           //放行
           chain.doFilter(request, response);
      } else {
           //打印登录失败信息
           request.setAttribute("login_msg","请登录");
           //登录失败跳转到登录页面
           request.getRequestDispatcher("/login.jsp").forward(request,response);

      }


  }
   public void init(FilterConfig config) throws ServletException {
  }

   public void destroy() {
  }


}

Listener

  • listener : 表示监听器,是JavaWeb三大组件之一。

  • 在application,session,request三个对象创建,销毁或者往其中添加,修改,删除属性时自动执行代码的功能组件。

  • 分类:

    *ServletContext 监听

    1. ServletContextListener 用于对ServletContext对象进行监听(创建,销毁)

*Session监听

*Request监听

package com.yang.web.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
//加注解
@WebListener
public class ContextLoaderListener implements ServletContextListener {//实现这个接口
   @Override
   public void contextInitialized(ServletContextEvent servletContextEvent) {
       //加载资源
       System.out.println("ContextLoaderListener....");
  }

   @Override
   public void contextDestroyed(ServletContextEvent servletContextEvent) {
      //释放资源
  }
}