会话层技术-session
会话层技术-session
session技术拿下!

一、先整理学习过程中的几个疑惑
cookie和session分别都是怎么创建的?
首先cookie是一个类,它需要java后端开发人员手动创建。
Cookie cookies1 = new Cookie(keya, valuea);
其次session是HttpSession接口的接口对象,它是由服务器来创建的,注意这里的创建不是指的是你在浏览器访问网址的同时,他就创建了,而是在servlet重写的service或doXXX方法中通过HttpSession session = request.getSession();或者HttpSession session = request.getSession(true);这两种方式任一个创建的。
注意:在默认访问jsp文件时,在你打开网站的同时就创建了Session对象,这是因为jsp中默认设置为true,<%@ page session = "true"%>,当jsp文件编译生成.java代码后,里面会有一句session = pageContext.getSession();所以,在tomcat启动后默认访问jsp页面时,这条代码就帮你创建session了,本质上,还是要通过获取session对象的时候判断有没有才会自动创建或者选择之前的session对象。
借助这个问题解决response.getWriter()获取的对象是由是创建的?
response.getWriter()获取的是PrintWriter类型的对象,当使用这条代码时候,服务器(就是servlet容器)自动创建该类型的对象来向网页上打印字符串。
可能又会有疑惑了,为什么不直接new 一下创建这个对象啊!这个我通过搜索整理,简单理解为:response.getWriter()输出的是流对象(所谓的流对象,就是打印结果可以输出在页面上),如果new PrintWriter()一个对象,再输出就不会输出到网页上,而是idea的打印台了,这仅仅是我自己的个人理解,便于我记忆!大家有好的可以给我分享,学习永无止境,哈哈!
二、ServletC用来实现session技术的处理过程
先简单那介绍下session技术的处理流程:
- 用户首次访问服务器,服务器没有Session,自动创建session对象和ID(这个ID相当于一个特殊的cookie,用于保存每一个Session对象独有的id值,他特殊就特殊在name = JSESSIONID, value = 这个id的值,普通的cookie的名字可以随意起,值可以随意更改,而由服务器创建的这个Session对象的ID名字是固定的,值也是唯一的。
- 服务器把这个特殊的cookie响应给客户端,等到下次用户访问的时候,Servlet可以获取到每个用户独有的JSESSIONID值,从而对数据进行存储记录。
三、ServletC代码具体要怎么实现呢
- 首先我要通过request对象调用getParameter()方法来获得访问服务器的用户信息。
- 紧接着,我调用request对象的getSession()方法来判断(是通过JSESSIONID的值来判断的)是否该用户是之前已经创建过的session,若是则不再重新创建,直接获取,若否,则自动重新创建并获取。
- 之后,我把获取到的用户信息存入Session对象中(相当于个人档案)。
- 最后,通过response对象向客户端响应JSESSIONID的值(特殊的cookie)。
具体代码实现如下:
package com.atguigu.servlet;
import com.sun.deploy.net.cookie.CookieUnavailableException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "ServletC", urlPatterns = "/ServletC")
public class ServletC extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接收请求中的用户参数的值,接收姓名
String username1 = req.getParameter("username");//调用req对象的getParameter方法获得usrname参数的值
//该方法传入参数名,获得参数值
//创建Session对象
HttpSession session1 = req.getSession();//具体含义上述已说
//把用户信息存入Session对象中
session1.setAttribute("username", "yzh");
//查看该Session对象的JSESSION值
String id01 = session1.getId();
System.out.println("JSESSIONID = " + id01);
//响应用户信息
resp.getWriter().println("已响应");
}
}
四、ServletB来获取已经创建的session对象存储的用户信息
我已经通过ServletC将用户信息存入创建的Session,那怎么来通过下次的访问,根据特殊的cookie来识别用户,并把用户信息提取打印出来呢?ServletB给我们答案(小嘲:有点小风范啊!哈哈)
package com.atguigu.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/ServletD")
public class ServletD extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session2 = req.getSession();//再次判断session是否已经存在,已经存在,直接瞄准他
System.out.println("上个session的id值是:" + session2.getId());
String username2 = (String)session2.getAttribute("username1");//调用getAttribute()方法得到该用户的属性值
resp.getWriter().println(username2);//来吧,展示!
}
}
让我们每天进步一点点,稳才是长远之道!
会话层技术-session的更多相关文章
- 会话跟踪技术——Session
一.什么是Session Session从用户访问页面开始,到断开与网站连接为止,形成一个会话的生命周期.在会话期间,分配客户唯一的一个SessionID,用来标识当前用户,与其他用户进行区分. Se ...
- 基于webrtc技术session border controler (SBC)
由于原来的文章 http://blog.csdn.net/voipmaker 转载注明出处. 我建了一个通信学习 交流群. 45211986, 欢迎增加. WebRTC技术致力于在浏览器端实现实时音 ...
- 会话技术( Cookie ,Session)
会话技术: 会话:浏览器访问服务器端,发送多次请求,接受多次响应.直到有一方断开连接.会话结束. 解决问题:可以使用会话技术,在一次会话的多次请求之间共享数据. ...
- JavaWeb学习笔记五 会话技术Cookie&Session
什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ...
- Cookie&Session(会话技术)
一.Cookie技术 从打开一个游览器访问某个站点,到关闭这个游览器的整个过程成为一次会话 会话技术分为Cookie和Session Cookie:数据存储在客服端本地,减少对服务端的存储的压力,安全 ...
- 会话技术、Cookie技术与Session技术
一.会话技术 1. 存储客户端状态 会话技术是帮助服务器记住客户端状态(区分客户端)的. 2. 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术就是记录这 ...
- Java第三阶段学习(十三、会话技术、Cookie技术与Session技术)
一.会话技术 1. 存储客户端状态 会话技术是帮助服务器记住客户端状态(区分客户端)的. 2. 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术就是记录这 ...
- PHP学习10——Cookie和Session技术
主要内容: Cookie技术 创建cookie 查看cookie 读取cookie 用cookie记录访问时间和次数 删除cookie cookie的生命周期 Session技术 session工作原 ...
- JavaEE之会话技术Cookie&Session
会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪 里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并 ...
- 会话技术: Cookie 和 Session
会话技术 会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话. Cookie 和 Session 都是处理会话技术的两种具体实现,Cookie将数据保 ...
随机推荐
- 键盘中上、下、左、右四个光标键所对应的ASCII码值为多少
首先给出ASCII码值表: 上.下.左.右这四个光标键对应的ASCII码值不是一个值而是三个,准确的说光标键的ASCII码值是一个组合. 每个方向键所对应的三个键值为:0x1b + 0x5b + n ...
- Inno Setup 出现 the drive or unc share you selected does not exist or is not accessible 解决记录
背景 软件是使用Inno Setup的,且安装后,再次安装是默认安装到历史路径.一次用户电脑维修后,发现再次安装后报错 解决办法 取消自动安装到默认路径就好了~ UsePreviousAppDir=n ...
- Navicat 导入sql文件执行失败问题的处理
之前有很多次用Navicat执行导出的sql文件,跑着跑着就批量报错,有的报错能看懂,有的报错压根就找不到,很长的记录中翻也不好翻. 现在用命令行执行的话,还是挺好使. 1进入mysql安装路径下的b ...
- SMU Autumn 2023 Round 4(Div.1+2)
SMU Autumn 2023 Round 4(Div.1+2) A. Access Denied 通过分析样例可以得知如果所猜字符串与答案字符串长度不同,则只要\(5ms\),且答案最多\(20\) ...
- Odoo13开发环境搭建
准备:windows10 64位系统.Python3.6.8.Pycharm2019.2.Postgresql-12.0-1.Odoo13 其它:nodejs.rtlcss.wkhtmltopdf 安 ...
- 强!34.1K star! 再见Postman,新一代API测试利器,功能强大、颜值爆表!
1.引言 在当今的互联网时代,API(应用程序编程接口)已经成为连接不同软件系统的桥梁.作为一名开发者,掌握API测试技能至关重要.市面上的API测试工具琳琅满目,今天我们要介绍的是一款开源.跨平台的 ...
- 【爬虫实战】——利用bs4和sqlalchemy操作mysql数据库,实现网站多行数据表格爬取数据
前言 此篇接上一篇的内容,在其基础上爬取网站的多行表格数据,以及把数据写入到mysql数据库中 目录 一.定位表格查找元素 二.提取数据 三.写入mysql数据库 四.附录 一.定位表格查找元素 首先 ...
- Kubernetes-14:持久化存储PV、PVC和StatefulSet介绍及使用
PV.PVC简介 PersistentVolume(PV) 是由管理员设置的存储,它是集群的一部分,就像节点是集群中的资源一样,PV也是集群中的资源.PV是Volume之类的卷插件,但具有独立于使用P ...
- 【YashanDB数据库】YashanDB如何回收表空间
确认表空间高水位线,是否有可回收空间. select a.tablespace_name,a.high_water_mark,b.user_bytes,b.total_bytes from (SELE ...
- c++ 命名的强制类型转换
显式转换:显式将一种类型转换为另一种类型. References: C++中的显示数据类型转换 与命名的强制类型转换相比,旧式的强制类型转换从表现形式上来说不那么清晰明了,容易被看漏,所以一旦转换过程 ...