web03(过滤器,监听器,cookie,数据库连接池)

  • 过滤器 (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. 作用:用于监听特定事件并做出相应的处理;
  4. 实现接口:如:implements ServletRequestAttributeListener 或 ServletRequestListener
  5. 有六种监听器,域值:request,session,contextlistener
  6. 生命周期

    (1)初始化阶段:当Web应用程序启动时,Listener会被初始化。在这个阶段,你可以设置监听器的属性,如监听的事件类型、事件源等。

    (2)就绪阶段:当Web应用程序准备好接收请求时,所有的Listener都处于就绪状态,等待相应的事件发生。

    (3)事件处理阶段:当事件发生时,Listener会执行相应的操作。这个阶段是在事件源上调用监听器的某个方法来触发的。

    (4)销毁阶段:当Web应用程序停止时,所有的Listener会被销毁。在这个阶段,你可以释放监听器持有的资源。

  • 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进行相应的操作  
     }  
     } 
  • session和cookie的区别
  1. 保存位置:Session保存在服务器端的内存中,而Cookie保存在客户端,通常是浏览器中或者文件中。
  2. 保存时间:Session在关闭当前会话后会自动清空,而Cookie的存留时间取决于过期时间。
  3. 安全性:由于Session保存在服务器端,相对较安全,而Cookie保存在客户端,存在安全隐患,可能被拦截或被人为清除。
  4. 大小限制:Session没有大小限制,而Cookie的大小通常受限于浏览器,一般是4K左右。
  5. 稳定性:由于Session保存在服务器端,相对较稳定。而Cookie在客户端,受用户控制,可能被禁用或清除。
  6. 生存周期:Session通常在浏览器关闭后消失,而Cookie的生存周期取决于预先设置的生存周期或永久的保存于本地文件。
  • 数据库连接池
  1. 常用数据库连接池:DBCP C3P0 druid;
  2. xmind
posted @ 2023-11-19 23:06  卡皮巴拉  阅读(38)  评论(0)    收藏  举报