javaweb之过滤器监听器

来源:互联网 发布:数据分析招聘网 编辑:程序博客网 时间:2024/05/16 09:22

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配置过滤器    <filter>        <filter-name>encodingFilter</filter-name>        <filter-class>usermng.filter.EncodingFilter</filter-class>    </filter>      <filter-mapping>        <filter-name>encodingFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>

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

1、使用地址或者通配符,例如/*2、过滤指定的servletName,需要在filter-mapping配置    <filter-mapping>        <filter-name>checkLoginFilter</filter-name>        <servlet-name>userServlet</servlet-name>        <!-- <url-pattern>/user</url-pattern> -->    </filter-mapping>

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>        <listener-class>listener.TestServletRequestAttributeListener</listener-class>  </listener>3、测试    在任何页面设置或删除属性:    request.setAttribute("userName", "在嘎嘎比萨");     访问该页面,控制台就会输出你变动的属性内容
原创粉丝点击