2024年Java最新JavaWeb之Cookie和Session技术(四),面试题+笔记+项目实战

最后

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。

关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。

image

这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

若大于0的整数,表示存储的秒数

表示 cookie 对象可存货指定的秒数。当生命大于 0 时,浏览器会把 Cookie 保存到硬盘上,就算关闭浏览器,就算重启客户端电脑,cookie 也会存活相应的时间

若为0,表示删除该 cookie

也就是说,如果原来的浏览器已经保存了这个 Cookie,那么可以通过 Cookie 的 setMaxAge(0) 来删除这个Cookie

Cookie cookie = new Cookie(“uname”,“zhangsan”);

cookie.setMaxAge(30); //表示存活30s

resp.addCookie(cookie);

2.4.5、cookie编码

  1. Cookie保存在当前浏览器中

在一般的站点中常常有记住用户名这样一个操作,该操作只是将信息保存在本机上,换电脑以后这些信息就失效了,而且 cookie 还不能跨浏览器

  1. Cookie 存中文问题

Cookie 中不能出现中文,如果有中文

  • 通过URLEncoder.encode()来编码,

  • 获取时通过URLDecoder.decode() 来进行解码

String name = “姓名”;

String value = “张三”;

// 通过 URLEncoder.encode() 来进行编码

name = URLEncoder.encode(name);

value = URLEncoder.encode(value);

// 创建 Cookie 对象

cookie cookie = new Cookie(name,value);

// 发送 Cookie 对象

resp.addCookie(cookie);

// 获取时通过URLDecoder.decode()来进行解码

URLDecoder.decode(cookie.getName());

URLDecoder.decode(cookie.getValue());

  1. 同名Cookie问题

如果服务器端发送重复的Cookie,那么会覆盖原有的Cookie

  1. 浏览器存放Cookie的数量
  • 一个Cookie只能保存一个信息

  • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie

  • Cookie大小有限制4kb

3、服务器端会话管理

============================================================================

3.1、Httpsession


  1. 什么是Httpsession?
  • 服务器会给每一个用户(浏览器)创建一个Httpsession对象

  • 一个Seesion独占一个浏览器,只要浏览器没有关闭,这个Session就存在

  • 服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中

3.2、HttpSession常用API


在这里插入图片描述

3.3、Httpsession的获取


  1. 获取HttpSession对象
  • req.getSession() 获取Session对象
  1. 使用HttpSession对象
  • session.setAttribute(String name,object) 设置session域对象

  • session.removeAttribute(String name) 移除指定名称的session域对象

3.4、session域对象


​ Session 用来表示一次会话,在一次会话中数据是可以共享的,这时 session 作为域对象存在,可以通过setAttribute(name,value) 方法向域对象中添加数据,通过getAttribute(name)从域对象中获取数据,通过removeAttribute(name)从域对象中移除数据

  • session.getId() 获取session的ID

  • session.isNew() 判断是否是新的session对象

// 得到Session

HttpSession session = req.getSession();

// 给Session中存东西

session.setAttribute(“name”,“狂神说”);

// 获取Session的ID

String id = session.getId();

// 判断Session是不是新创建的

session.isNew();

  • 数据存储在 session 域对象中,当session对象不存在了,或者是两个不同的session对象时,数据也就不能共享了。

3.5、例子


3.5.1、例一

  1. 我们给session中存入一个字符串,并在另一个session中拿到数据

SessionDemo01.java

public class SessionDemo01 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// 解决乱码问题

req.setCharacterEncoding(“utf-8”);

resp.setCharacterEncoding(“utf-8”);

resp.setContentType(“text/html;charset=UTF-8”);

// 得到Session

HttpSession session = req.getSession();

// 给Session中存东西

session.setAttribute(“name”,“狂神说”);

// 获取Session的ID

String id = session.getId();

// 判断Session是不是新创建的

if(session.isNew()){

resp.getWriter().write(“session创建成功,ID:” + id);

}else {

resp.getWriter().write(“session已经在服务器中存在了,ID:” + id);

}

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doGet(req, resp);

}

}

  • 在web.xml中注册servlet映射为 /s1

SessionDemo01

com.kuang.servlet.SessionDemo01

SessionDemo01

/s1

  • 测试启动

在这里插入图片描述

当浏览器打开时,会自动创建一个session对象,此时session已经存在

  1. 我们在另一个session对象中拿到第一个session中存入的数据

SessionDemo02.java

public class SessionDemo02 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// 解决乱码问题

req.setCharacterEncoding(“utf-8”);

resp.setCharacterEncoding(“utf-8”);

resp.setContentType(“text/html;charset=UTF-8”);

// 得到Session

HttpSession session = req.getSession();

// 获取第一个session中存入的数据 name

String name = (String) session.getAttribute(“name”);

resp.getWriter().write(name);

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doGet(req, resp);

}

}

  • 在web.xml中注册servlet映射为 /s2

SessionDemo02

com.kuang.servlet.SessionDemo02

SessionDemo02

/s2

  • 访问测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3.5.2、例二

我们给session中存入一个对象,并在另一个session中拿到数据

  1. 我们新建包 pojo

  2. 在包 pojo 下新建 Person类

public class Person {

private String name;

private int age;

public Person() {

}

public Person(String name, int age) {

this.name = name;

this.age = age;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return “Person{” +

“name='” + name + ‘’’ +

“, age=” + age +

‘}’;

}

}

SessionDemo01.java

public class SessionDemo01 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// 解决乱码问题

req.setCharacterEncoding(“utf-8”);

resp.setCharacterEncoding(“utf-8”);

resp.setContentType(“text/html;charset=UTF-8”);

// 得到Session

HttpSession session = req.getSession();

// 给Session中存东西 此时存入一个对象

session.setAttribute(“name”,new Person(“秦将”,1));

// 获取Session的ID

String id = session.getId();

// 判断Session是不是新创建的

if(session.isNew()){

resp.getWriter().write(“session创建成功,ID:” + id);

}else {

resp.getWriter().write(“session已经在服务器中存在了,ID:” + id);

}

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doGet(req, resp);

}

}

SessionDemo02.java

public class SessionDemo02 extends HttpServlet {

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

// 解决乱码问题

req.setCharacterEncoding(“utf-8”);

resp.setCharacterEncoding(“utf-8”);

resp.setContentType(“text/html;charset=UTF-8”);

// 得到Session

HttpSession session = req.getSession();

// 获取第一个session中存入的数据

Person person = (Person) session.getAttribute(“name”);

resp.getWriter().write(person.toString());

}

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

doGet(req, resp);

}

}

  • 访问测试

在这里插入图片描述

在这里插入图片描述

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

目录:

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

全靠这套面试题,才让我有惊无险美团二面拿offer  (面经解析)

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

8999a1a56545588b4ed83199411b1c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0F1Z2Vuc3Rlcm5fUVhM,size_16,color_FFFFFF,t_70#pic_center)

最后

本人也收藏了一份Java面试核心知识点来应付面试,借着这次机会可以送给我的读者朋友们

目录:

[外链图片转存中…(img-JS5p9HJV-1714912171262)]

Java面试核心知识点

一共有30个专题,足够读者朋友们应付面试啦,也节省朋友们去到处搜刮资料自己整理的时间!

[外链图片转存中…(img-5XXLGjN2-1714912171262)]

Java面试核心知识点

已经有读者朋友靠着这一份Java面试知识点指导拿到不错的offer了

[外链图片转存中…(img-9Cb1eWdH-1714912171263)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值