74.【JavaWeb -02】(一)

简介: 74.【JavaWeb -02】

(十二)、Cookie

36.会话

1.会话定义:
会话打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器这个过程
可以称之为会话。
2.有状态会话:
服务端Session先给小朋友A发了一个邀请函Cookie,这就证明小朋友A可以来参加
Session聚会,并且有留存登入聚会的信息,曾经来过,就叫做有状态会话。

37.保存会话的两种技术

1.cookie:
(1).客户端技术:(响应,请求)
2.session:
(1).服务器技术: 利用这个技术可以保存会话的用户信息,我们可以把信息或则数据
放在session里面
3.常见的应用:
网站登入之后,下次就不用登入了,第二次直接登入
4.一个网站cookie是否存在上限?
(1).一个cookie只能保存一个信息
(2).一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;
(3).300个cookie浏览器上限
(4).Cookie大小有限制4kb
5.删除cookie:
(1).不设置有效期,关闭浏览器,自动失效
(2).设置有效期为0
1.请求获得cookie:
Cookie[] cookies = req.getCookies();
2.获得cookie的键key
cookie.getName()
3.获得cookie的值value
cookie.getValue();
4.将字符串参数解析为带符号的十进制 long 
parseLong(String s) 
5.创建一个cookie key 和 value
Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+""); 
6.cookie的生存期
cookie.setMaxAge(24*60*60);
7.响应给客户端cookie
resp.addCookie(cookie);

package com.Jsxs.Cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
//保存用户上一次访问的时间
public class Demo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        服务器告诉你来的时间,把这个时间封装成为一个信件,你带来信件,我就知道是你来了
        resp.setCharacterEncoding("utf-16");
        req.setCharacterEncoding("utf-16");
        PrintWriter out = resp.getWriter();
//        cookie,是服务端从客户端获取,客户端需要请求服务端先得到cookie
        Cookie[] cookies = req.getCookies();     //这里返回一个数组,说明存在多个。
//        判断cookie数组是否存在
        if (cookies != null){
//            如果存在了怎么办?
            out.write("您上一次访问的时间是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if (cookie.getName().equals("lastLoginTime")){
//                    获取cookie中的值
                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    out.write(date.toLocaleString());
                }
            }
        }else {
            out.write("您第一次访问本次网站,我们将会对您的信息进行详细的保存");
        }
//        服务器相应一个cookie
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");
        cookie.setMaxAge(24*60*60);
        resp.addCookie(cookie);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

再创建一个DEMO2,并且创建一个cookie的key,一定要和demo1的key相等,进行替换的操作。
• 1
package com.Jsxs.Cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Demo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis()+"");
        cookie.setMaxAge(0);
        resp.addCookie(cookie);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

38.编码和解码(养成习惯)

编码是信息从一种形式或格式转换为另一种形式的过程也称为计算机编程语言的代码简称编码。用预先规定的方法将文字、数字或其它对象编成数码,或将信息、数据转换成规定的电脉冲信号。编码在电子计算机、电视、遥控和通讯等方面广泛使用。编码是信息从一种形式或格式转换为另一种形式的过程。解码,是编码的逆过程

1.编码:
String string=URLEncoder.encode("字符串","utf-8")
2.解码:
String string=URLDecoder.decode("字符串","UTF-8")
3.JSP文件上写:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
package com.Jsxs.Cookie;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class Demo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setCharacterEncoding("utf-16");
        req.setCharacterEncoding("utf-16");
        PrintWriter out = resp.getWriter();
        Cookie[] cookies = req.getCookies();
        if(cookies!=null){
            out.write("您带了小饼干,我很欢迎");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if(cookie.getName().equals("name")){
                    System.out.println(URLDecoder.decode(cookie.getValue(),"UTF-8"));
                }
            }
        }else {
            out.write("第一次登入还没创建到cookie");
        }
        Cookie cookie = new Cookie("name", URLEncoder.encode("吉士先生","UTF-8"));
        resp.addCookie(cookie);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}


相关文章
|
1月前
|
设计模式 Java 关系型数据库
【Java笔记+踩坑汇总】Java基础+JavaWeb+SSM+SpringBoot+SpringCloud+瑞吉外卖/谷粒商城/学成在线+设计模式+面试题汇总+性能调优/架构设计+源码解析
本文是“Java学习路线”专栏的导航文章,目标是为Java初学者和初中高级工程师提供一套完整的Java学习路线。
307 37
|
4月前
|
存储 前端开发 JavaScript
基于JavaWeb实现停车场管理系统
基于JavaWeb实现停车场管理系统
|
4月前
|
前端开发 JavaScript Java
图书借阅管理平台|基于JavaWeb实现图书借阅系统
图书借阅管理平台|基于JavaWeb实现图书借阅系统
|
10天前
|
前端开发 Java 应用服务中间件
Javaweb学习
【10月更文挑战第1天】Javaweb学习
21 2
|
17天前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
20 5
|
1月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
4月前
|
前端开发 Java 关系型数据库
JavaWeb开发简介
JavaWeb开发简介
50 0
|
27天前
|
安全 Java Android开发
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
JavaWeb解压缩漏洞之ZipSlip与Zip炸弹
62 2
|
1月前
|
SQL JSON JavaScript
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
Vue 指令、生命周期、this和$、vue脚手架进行模块化开发/ElementUI框架、综合案例,element商品列表展示增删改查
JavaWeb基础9——VUE,Element&整合Javaweb的商品管理系统
|
4月前
|
SQL Java 数据库连接
JavaWeb Mapper代理开发
JavaWeb Mapper代理开发