您的位置:首页 > 编程语言 > Java开发

Day27 JavaWeb知识 (4)Cookie & Session

2019-06-06 19:09 417 查看

请求转发和重定向

  1. 重定向
    - - //以前的写法
          response.setStatus(302);
          response.setHeader("Location","login_success.html");
    - - //重定向写法:重新定位访问, 参数即跳转的位置
          response.sendRedirect("login_success.html");
      地址栏上显示的是最后的那个资源的路径地址
  2. 请求次数最少有两次,服务器在第一次请求后,会返回302以及一个地址,浏览器根据这个地址执行第二次访问
  3. 可以跳转到任意路径,不是自己的工程也可以跳
  4. 效率稍微低一点,执行两次请求
  5. 后续的请求,没法使用上一次的request存储的数据,或者没法使用上一次的request对象,因为这是两次不同的请求
  • 请求转发
    - - //请求转发的写法 : 参数即跳转到位置
    request.getRequestDispatcher("login_success.htm").forward(request,response);
     
      地址栏上显示的是请求servlet的地址    返回200  OK
    1. 请求只有一次,因为是服务器内部帮客户端执行了后续的工作
    2. 只能跳转自己项目的资源路径
    3. 效率上稍微高一点,因为只执行一次请求
    4. 可以使用上一次的request对象

     (一)Cookie

    服务器发给客户端,并且存储在客户端上的一份小数据

    1. 应用场景:
      - - 自动登陆,浏览记录,购物车
    2. 为什么会有Cookie
      - - http的请求是无状态.客户端与服务器在通讯的时候,是无状态的,
      - - 为了更好的用户体验,交互,公司层面讲是为了收集用户习惯

    一.Cookie使用

    1. 简单使用 在响应的时候,添加Cookie
      Cookie cookie = new Cookie("aa","bb");
      //给响应,添加一个cookie
      response.addCookie(cookie);
    2. 客户端收到的信息里面,响应头中多了一个字段  Set-Cookie  aa=bb
  • 获取客户端带过来的Cookie
     Cookie cookies = request.getCookies();
     if(cookies != null){
            for(Cookie c : cookies){
                  String cookieName = c.getName();
                  String cookieValue = c.getValue();
                  syso(cookieName + "=" + cookieValue);
            }
     }
  • 二.案例1 显示最近访问的时间

    1. 判断账号是否正确
    2. 如果正确,则获取cookie, 但是得到的cookie是一个数组,我们要从数组里面找到我们想要的对象
    3. 如果找到的对象为空,表明是第一次登陆,那么要添加cookie
    4. 如果找到的对象不为空,表明不是第一次登陆

    三.案例2 显示商品浏览记录

    1. 将html原型文件,放到工程的WebContent里面
    2. 在WebContent目录下新建一个jsp文件,product_list.jsp,然后拷贝原来product_list.html的内容
      到jsp里面,建好之后,jsp里面的所有ISO-8859改成UFT-8
       //拷贝html标签的所有内容 .  替换jsp里的html标签
    3. 修改product_info.htm里面的手机数码超链接标签 product_list.jsp
    4. 修改首页(index.html)顶部的手机数码跳转到位置为 product_list.jsp
    5. 清除浏览记录
      其实就是清除Cookie,删除cookie是没有什么delete方法的,只有设置maxAge为0
      Cookie cookie = new Cookie("history","");
      cookie.setMaxAge(0);     //设置时间为0,立即删除
      coolie.setPath("/CookieDemo02");
      response.addCookie(cookie);
       

    四.Jsp里面使用java代码

    jsp
    Java Server Pager ---->最终会翻译成一个类,就是一个Servlet

    1. //定义全局变量
      <%! int a = 99; %>
      //定义局部变量
      <% int b = 999; %>
      在jsp页面上,显示a和b的值
      <%=a %>
      <%=b %>

    五.Cookie安全问题

    1. 由于Cookie会保存在客户端上,所以有安全隐患问题,
    2. Cookie的大小与个数有限制.

    (二)Session

    一.概述

    1. 会话.  Session是基于Cookie的一种会话机制.
      Cookie是服务器返回一小份数据给客户端,并且存放在客户端上
      Session是,数据存放在服务器端        

    二.常用API

    HttpSession session = request.getSession();  //得到一个session对象

    1. //得到会话ID
      String id = session.getId();
    2. //存值
      session.setAttribute(name,value);
    3. //取值
      session.getAttribute(name);
    4. //移除值
      session.removeAttribute(name);

    三.生命周期

    1. 创建
      如果有在servlet里面调用了request.getSession()
    2. 销毁
      session是存放在服务器的内存中的一份数据,可以持久化..Redis..  即使关了浏览器,session也不会销毁
      销毁方式:
      1.关闭服务器
      2.session会话时间过期,  有效期过了,       默认有效期:30分钟

    四.案例3  简单购物车

    1. 获取要添加到购物车的商品id
    2. 获取购物车存放东西的session
    3. 判断购物车里面有没有该商品
    4. 输出界面(跳转)

    移除Session中的元素:
    //强制关掉会话
    session.invalidate();
    //从session中移除某一个数据
    session.removeAttribute("cart");

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: