前言:本次学习主要是学习了cookie和session,整体难度不算很大,也比较好记一点。但还是需要注意区分session和servletContext二者在传递数据时的区别;
一:cookie
cookie在之前常用于用户的登入,这里只需要了解几个cookie的常用用法就可以了
//创建cookie对象,并赋值a=100 Cookie cookie=new Cookie("a","100"); //设置一个cookie存在的有效值,通俗来说就是设置cookie存在60s cookie.setMaxAge(60); //发送cookie到前端 resp.addCookie(cookie);
这边需要接受时就需要用一个增强for循环来接收
Cookie[] cookies = req.getCookies();
for (Cookie cookie : cookies) {
System.out.println(cookie.getName()+cookie.getValue());
}
二:session(可用于多个服务器访问)
session是非常依赖于cookie的,可以这样理解,session就是一个舔狗,没有cookie就活不下去那种,当客户端访问路径时,会生成一个session对象,生成一个唯一的seesion id返回到客户端并且存储在cookie中,并且还会有一个session容器存放id和输入的值,当客户端,想要访问时,会携带cookie中的id,与session id进行一个比较,如果符合的情况下,那么 session容器就会把值反馈给客户端;
//创建一个session对象 HttpSession session = req.getSession(); session.setAttribute("a",200); session.setAttribute("b",300); //这边创建一个cookie对象并且将session id存放到JSESSIONID中 Cookie cookie=new Cookie("JSESSIONID",session.getId()); //设置JSESSIONID的有效时长为60s,并且在发送cookie值 cookie.setMaxAge(60); resp.addCookie(cookie);
//创建session对象后获取刚刚存放的值 HttpSession session = req.getSession(); System.out.println(session.getAttribute("a")); System.out.println(session.getAttribute("b"));
这边需要做一个区别因为session和servletContext都能用来存值取值,但是二者之间还是有很大区别的,session在存储数据时会专门生成一个id,并且这个id还是唯一的,这就代表着在不同服务器所存储的值是不同的而servletContext却不一样,这个是存一个值就有,但是存新的值时,他会自动覆盖原来的值,这时候输出的就是新的值;
三:Filter过滤器
这个简单来说就是可以帮助过滤一些东西,如果创建了这个过滤器那么,当这个过滤器没有放行语句时,访问其他路口都不会通过,只有设置了放行语句时,才能访问其他入口;
这边首先要实现一个接口 Filter
然后在上面的路径上设置成默认访问全部路径@WebFilter("/*")//默认拦截所有接口
System.out.println("这是被过滤器执行的逻辑"); //可以将编辑器转格式的操作放到过滤器里,这样在请求post时就不要一个一个去打,更加简便 servletRequest.setCharacterEncoding("utf8"); //需要放行通过过滤器时需要输入这行代码 filterChain.doFilter(servletRequest,servletResponse);
过滤器的好处在于,所有接口要访问时都必须先经过过滤器,那么就可以将一些服务于多个路径的命令设置在过滤器里,这样就会更加的简便;
四:Listener监视器
这个监视器的作用是监视servletContext方法有没有被用到
这个要实现功能也是要先实现一个ServletContextListener接口才能实现功能
@Override public void contextInitialized(ServletContextEvent servletContextEvent) { //这个方法是用于当ServletContext被访问时,也就是被使用时就会执行的逻辑 } @Override public void contextDestroyed(ServletContextEvent servletContextEvent) { //这个方法是用于当ServletContext被销毁时被执行的逻辑