学习笔记之jsp状态管理之cookie

jsp状态管理

http协议的无状态性
无状态是指 当浏览器放松请求给服务器的时候,服务器响应客户端请求。但是当同一个浏览器再次发送请求给服务器的时候,服务器并不知道它就是刚才那个浏览器。
简单地说,就是服务器不会去记得你,所以就是无状态协议
保存用户的状态的两大机制:
Session
Cookie(客户端的技术)
什么是Cookie

Web服务器保存在客户端的一系列文本信息
1.判断是否已经登录网站(保存了登录信息)
2.购物车的处理
Cookie

  • 对特定对象的追踪
  • 保存用户网页浏览记录与习惯
  • 简化登录
    Cookie容易泄露用户信息

Jsp中创建与使用Cookie

创建Cookie对象

Cookie newCookie = new Cookie(String key,Object value)

写入Cookie对象

response.addCookie(newCookie);

读取Cookie对象

Cookie[]cookies=request.getCookies();

void setMaxAge(int expiry) 设置cookie有效期,以秒为单位
void setValue(String value)在cookie创建后,对cookie进行赋值
String getName()获取cookie的名称
String getValue()获取cookie的值
int getMaxAge()获取cookie的有效时间,以秒为单位

<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.net.*" %>
<html>
<head>
  <title>首页</title>
</head>
<body>
今天的日期<%= new java.util.Date().toString()%>
<%
  request.setCharacterEncoding("utf-8");
  String username="";
  String password="";
  Cookie[] cookies = request.getCookies();
  if(cookies!=null&&cookies.length>0){
    for (Cookie c:cookies){
      if(c.getName().equals("username")){
        username=URLDecoder.decode(c.getValue(),"utf-8");
      }
      if(c.getName().equals("password")){
        password=URLDecoder.decode(c.getValue(),"utf-8");
      }
    }
  }
%>
<form action="login.jsp" method="post">
  <table>
    <tr>
      <td>
      用户名:
      </td>
      <td>
        <input type="text" name="username" value="<%=username %>">
      </td>
    </tr>
    <br>
    <tr>
      <td>密码</td>
      <td><input type="password" name="password" value="<%=password %>"></td>
    </tr>
    <br>
    <tr>
      <td colspan="2"><input type="checkbox" name="isUseCookies" checked="checked">是否保存信息</td></tr>
    <tr>
      <td><input type="submit" value="登录" align="center"></td>
    </tr>
  </table>
</form>
</body>
</html>

<head>
    <title>Title</title>
</head>
<body>
  <h1>登录成功</h1>
  <hr>
  <br>
  <br>
  <br>
  <%
      request.setCharacterEncoding("utf-8");
      //首先判断用户是否选择了记住
      String[] isUseCookies =request.getParameterValues("isUseCookies");
      if(isUseCookies!=null&&isUseCookies.length>0) {
          //把用户名和密码保存在Cookie对象里面
          String username = URLEncoder.encode(request.getParameter("username"),"utf-8");

          String password =URLEncoder.encode( request.getParameter("password"),"utf-8");

          Cookie usernameCookie = new Cookie("username",username);
          Cookie passwordCookie = new Cookie("password",password);
          response.addCookie(usernameCookie);
          response.addCookie(passwordCookie);
          usernameCookie.setMaxAge(864000);
          passwordCookie.setMaxAge(864000);
      }
      else{
          Cookie[] cookies = request.getCookies();
          if(cookies!=null&&cookies.length>0){
          for (Cookie c:cookies){
              if(c.getName().equals("username")||c.getName().equals("password")){
                  c.setMaxAge(0);//设置Cookie失效
                  response.addCookie(c);//重新保存
              }
          }
          }
      }
  %>
  <a href="users.jsp" target="_blank">查看用户信息</a>
</body>
</html>

<%--
  Created by IntelliJ IDEA.
  User: HJCD
  Date: 2020/5/16
  Time: 11:44
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="java.net.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <h1>用户信息</h1>
   <hr>
   <%
      request.setCharacterEncoding("utf-8");
      String username="";
      String password="";
      Cookie[] cookies = request.getCookies();
      if(cookies!=null&&cookies.length>0){
         for (Cookie c:cookies){
            if(c.getName().equals("username")){
               username = URLDecoder.decode(c.getValue(),"utf-8");
            }
            if(c.getName().equals("password")){
               password = URLDecoder.decode(c.getValue(),"utf-8");
            }
         }
      }
   %>
   <br>
   <br>
   <br>
   用户名:<%=username%><br>
   密码:<%=password%><br>
</body>
</html>

以上3个jsp页面使用了cookie存储信息
在这里插入图片描述1.URLEncoder.encode(String s, String enc)
使用指定的编码机制将字符串转换为 application/x-www-form-urlencoded 格式

URLDecoder.decode(String s, String enc)
使用指定的编码机制对 application/x-www-form-urlencoded 字符串解码。

2.发送的时候使用URLEncoder.encode编码,接收的时候使用URLDecoder.decode解码,都按指定的编码格式进行编码、解码,可以保证不会出现乱码

3.主要用来http get请求不能传输中文参数问题。http请求是不接受中文参数的。

这就需要发送方,将中文参数encode,接收方将参数decode,这样接收方就能收到准确的原始字符串了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值