web03(过滤器,监听器,cookie)

发布时间 2023-11-19 23:15:36作者: 卡皮巴拉
  • 过滤器 (Filter)
  1. 作用:在访问到正式资源之前进行过滤(请求到达Servlet之前、Servlet处理之后以及响应返回客户端之前进行干预);
  2. 解决中文乱码问题:
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            //设置请求的编码格式
            request.setCharacterEncoding("UTF-8");
            response.setCharacterEncoding("GBK");
            chain.doFilter(request, response);
        }
  3. 要实现Filter过滤器,implements Filter;
  4. 重写Filter的抽象方法,init()进入,doFilter()验证,destroy()销毁;
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
                throws IOException, ServletException {
            //验证用户的请求是否拥有登录状态
            HttpServletRequest req=null;
            HttpServletResponse resp=null;
            if(request instanceof HttpServletRequest) {
                req=(HttpServletRequest)request;
                resp=(HttpServletResponse)response;
            }
            //通过请求获取session对象
            HttpSession session=req.getSession();
            //检查session中是否存储了登录的数据
            Object loginobj=session.getAttribute(Sys.LOGIN_USER);
            if(loginobj!=null) {
                //如果登录了,就放行
                chain.doFilter(request, response);//有下一个过滤器就进入,不然就进入servlet  过滤器用同一个注解 比如:@WebFilter("/easyi")
                System.out.println("------已经登录");
            }else {
                //如果没有登录就回应对应数据
    //            response.getWriter().write("未登录");
                resp.sendRedirect("http://localhost:8080/wed/login2.jsp");//重定向
            }
  5. 过滤器的实现过程

  • 监听器(Listener)
  1. 监听作用域对象  生命周期和存放值;如:RequestAttributeListener;
  2. 生命周期监听器;如:RequestListener;
  3. 实现接口:如:implements ServletRequestAttributeListener 或 ServletRequestListener
  4. 有六种监听器,request,session,contextlistener
  • Cookie
  1. 创建Cookie
     Cookie cookie = new Cookie("cookieName", "cookieValue"); 
  2. 设置Cookie的有效期:
     cookie.setMaxAge(60 * 60 * 24); // 设置有效期为一天(以秒为单位) 
  3. 将Cookie添加到响应中:
    response.addCookie(cookie); // 将Cookie添加到响应中 
  4. 从请求中获取Cookie:
     Cookie[] cookies = request.getCookies(); // 获取请求中的所有Cookie  
     for (Cookie c : cookies) {  
     if ("cookieName".equals(c.getName())) {  
     String cookieValue = c.getValue(); // 获取名为"cookieName"的Cookie的值  
     // 根据cookieValue进行相应的操作  
     }  
     }