java回顾:cookie、session

目录

一、会话技术

二、cookie

2.1、常用常用 API 

2.2、 记住账户密码案例实现

2.3 、cookie中存储特殊字符

2.4、cookie存活时间(掌握) 能够实现cookie的持久化

2.5、设置cookie的有效路径

 2.5.1 测例

2.6、 Cookie删除

2.7、使用cookie记住浏览商品的历史记录demo

三、session 

3.1、session介绍

3.2、Session原理

3.3、Session容器创建和销毁的API

3.5、Session的域对象操作

小结

3.6、Session的生命周期

3.7、浏览器关闭后,session持久化方案(重要)

3.8、 Session的钝化与活化技术(在硬盘存储、取出) 

3.9、Cookie禁用后Session的处理(重写url)

3.9.1 重定向重写URL

3.9.2 超连接重写URL

四、servlet的三大域对象


一、会话技术

二、cookie

  1. Cookie属于一个类,可以直接创建对象
  2. Cookie是在服务器端创建的,然后tomcat服务器会将创建的cookie以及cookie中的数据响应给浏览器,保存到浏览器端。说明:
    1. 好处:减轻服务器压力。
    2. 弊端:不安全
  3. 使用HttpServletResponse中的对象调用方法addCookie将服务器创建的cookie直接保存到浏览器端
  4. 当我们下次访问同一个服务器会携带相同的cookie信息,在服务器中我们可以使用HttpServletRequest对象调用方法getCookies获取随着请求携带过来的所有的cookie。

 

应用场景:

购物车、记住账户密码

2.1、常用常用 API 

需求:实现第二次访问服务器取出cookie中的数据

图解:

Cookie[] getCookies()  获取随着请求的所有cookie放到数组中

操作Cookie类中的name和value方法

1.String getName() 获取cookie类中的name值
2.String getValue()  获取cookie类中的value值
3.void setValue(String newValue) 修改value值

使用HttpServletResponse中的对象调用方法addCookie将服务器创建的cookie直接保存到浏览器端  

void addCookie(Cookie cookie)   参数需要一个cookie类的对象

 使用HttpServletRequest对象调用方法getCookies获取随着请求携带过来的所有的cookie。

常见api:

方法 使用示例 说明
创建Cookie对象 Cookie(String name,String value)name表示指定 cookie 名称 ,value 表示指定 cookie 值 Cookie c1 = new Cookie("username","suoge")
获取cookie的name值 String getName() c1.getName()
获取cookie的value值 String getValue() c1.getValue()
设置cookie的值 void setValue(String value) c1.setValue("李四")

2.2、 记住账户密码案例实现

准备登录页面: 

<form action="/loginServlet" method="post">
    用户名:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    记住用户名和密码:<input type="checkbox" name="check"><br>
    <input type="submit" value="提交">
</form>

如勾选记住密码,存储cookie 

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    ...
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
            登录servlet。用来创建cookie,将用户名和密码保存到cookie中并响应给浏览器
         */
        //1.获取用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        //2.获取复选框的值
        String check = request.getParameter("check");
        //3.到数据库查询用户名和密码是否存在,这里不书写了,使用固定数据
        if("on".equals(check)){
            //4.说明勾选了记住用户名和密码的复选框,创建cookie  Cookie(String name, String value)
            Cookie cookieUsername = new Cookie("userName", username);
            //new Cookie("pwd", password); 第一个参数表示cookie的name,随便定义,password表示value,这里是要存储的数据变量
            Cookie cookiePwd = new Cookie("pwd", password);
            //5.将cookie响应给浏览器
            response.addCookie(cookieUsername);
            response.addCookie(cookiePwd);
        }

    }
}

获取cookie:

@WebServlet("/getCookiesServlet")
public class GetCookiesServlet extends HttpServlet {
    ...
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
            获取随着请求过来的cookie,获取cookie中的用户名和密码并输出到控制台
         */
        //1.获取请求中的所有cookie
        Cookie[] cookies = request.getCookies();
        //2.遍历数组
        for (Cookie cookie : cookies) {
            //3.获取name值 String getName() 获取cookie类中的name值
            String name = cookie.getName();
            //4.获取value值 String getValue()  获取cookie类中的value值
            String value = cookie.getValue();
            System.out.println(name+"---"+value);
        }
    }
}

2.3 、cookie中存储特殊字符

//存特殊字符
@WebServlet("/specialChar01Servlet")
public class SpecialChar01Servlet extends HttpServlet {
    ...
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
            向cookie中存储特殊的字符
            说明:
            1.cookie中可以存储汉字,但是不能存储特殊字符,例如空格等
            2.如果想cookie中存储特殊的字符,我们需要在存储之前进行编码
         */
        //1.创建cookie对象
        String s = URLEncoder.encode("12 34", "UTF-8");
        Cookie cookie = new Cookie("msg", s);
        //2.将cookie响应给浏览器
        response.addCookie(cookie);
    }
}

//取特殊字符
@WebServlet("/specialChar02Servlet")
public class SpecialChar02Servlet extends HttpServlet {
    ...
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       //1.获取浏览器中的cookie
        Cookie[] cookies = request.getCookies();
        //2.遍历数组
        for (Cookie cookie : cookies) {
            //3.获取cookie的name
            String name = cookie.getName();
            //4.判断name的值是否等于msg
            if("msg".equals(name)){
                //5.获取msg的value
                String value = cookie.getValue();
                //6.对value进行解码
                String decode = URLDecoder.decode(value, "utf-8");
                System.out.println("decode = " + decode);
            }
        }
    }
}

2.4、cookie存活时间(掌握) 能够实现cookie的持久化

需求:向cookie中存储数据,并设置cookie的存活时间为1周;

cookie默认的存活时间是会话结束即关闭浏览器。平常开发中对于某些cookie中存储的数据希望保存的时间更长一些,而不是浏览器关闭就不存在。如果想让cookie长久保存可以使用Cookie类的方法即可:

 void setMaxAge(int expiry) 参数是秒
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, I
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值