javaweb之过滤器监听器

1、会话控制

使用浏览器的技术来保存信息,保存的信息是Key-Value的方式。

常用于:
购物车场景
记住我

使用方式:

1、添加信息到cookie

    Cookie cookie = new Cookie("key", value);
    //设置失效时间
    cookie.setMaxAge(3600);
    //设置路径
    cookie.setPath(req.getContextPath()+"/");
    //添加cookie
    response.addCookie(cookie);
2、从cookie获取数据
    String userName="";
    String passwd = "";
    Cookie[] cookies = request.getCookies(); 
    for(Cookie cookie:cookies){
        if("name".equals(cookie.getName())){
            userName = URLDecoder.decode(cookie.getValue());
        }
        if("password".equals(cookie.getName())){
            passwd = cookie.getValue();
        }
    }

1.2. Session

session是个域对象,能够保存数据让session共享

常用于:
验证码
保存登录用户信息

使用方式:

例如验证码
1、在登录页面展示验证码的时候,就将验证码放到session里面
    session.AddAttribute("validateCode",validateCode);

2、在登录的servlet里面,获取用户输入的验证码和从session里面获取的验证码进行比较
    //获取Session
    HttpSession session = req.getSession();
    //从session里获取验证码
    String vCode = (String)session.getAttribute("validateCode");
    //从页面获取验证码
    String validateCode = req.getParameter("validateCode");
    if(!validateCode.equalsIgnoreCase(vCode)){
        String msg = "验证码输入有误!";
        req.setAttribute("error", msg);
        req.getRequestDispatcher("login/login.jsp").forward(req, resp);
    }
    else{
        //去判断用户名和密码...
    }

2、过滤器

能够过滤客户端和服务端的所有请求

常用于:
统一请求编码
验证用户是否登录
过滤敏感词

过滤器的特点:
1、注意放行
2、可以有多个过滤器,执行顺序是按照web.xml配置的顺序

使用方式:

1、实现Filter接口

    public class EncodingFilter implements Filter{

        @Override
        public void destroy() {
        }

        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain filter) throws IOException, ServletException {
            System.out.println("编码过滤器....");
            request.setCharacterEncoding("utf-8");
            //放行
            filter.doFilter(request, response);
        }

        @Override
        public void init(FilterConfig arg0) throws ServletException {
        }

    }
2、在web.xml配置过滤器
    
        encodingFilter
        usermng.filter.EncodingFilter
      
    
        encodingFilter
        /*
    

注意:过滤器有两种过滤方式:

1、使用地址或者通配符,例如/*
2、过滤指定的servletName,需要在filter-mapping配置

    
        checkLoginFilter
        userServlet
        
    

3、监听器

能够监听web应用上的事件(ServletContext,ServletReqeust,HttpSession)

使用方式:

1、实现对应的接口
    public class TestServletRequestAttributeListener implements ServletRequestAttributeListener{

        @Override
        public void attributeAdded(ServletRequestAttributeEvent srae) {
            System.out.println("request域中添加一个属性"+srae.getName()+"="+srae.getValue());
        }
        @Override
        public void attributeRemoved(ServletRequestAttributeEvent srae) {
            System.out.println("request域中移除一个属性"+srae.getName()+"="+srae.getValue());
        }
        @Override
        public void attributeReplaced(ServletRequestAttributeEvent srae) {
            System.out.println("request域中一个属性被修改了"+srae.getName()+"="+srae.getValue());
        }


    }
2、在web.xml配置

  
        listener.TestServletRequestAttributeListener
  

3、测试

    在任何页面设置或删除属性:
    request.setAttribute("userName", "在嘎嘎比萨"); 

    访问该页面,控制台就会输出你变动的属性内容

你可能感兴趣的:(javaEE,cookie,java,web,过滤器,监听)