文中部分借鉴了:https://www.cnblogs.com/xdp-gacl/p/3855702.html

https://blog.csdn.net/p744174529/article/details/71716097

session

1.什么是session:

session是一种将数据保存到服务端的技术,依赖Cookie技术。

2.session的实现原理:

当客户端访问服务器时,Servlet容器会创建一个Session对象和id属性,服务器创建Session后,会把session的Id以Cookie的形式返回给客户机,只要客户机的浏览器不关闭,再次访问服务器时,都会带着session的id值过来。

服务端会为每一个客户端创建一个session对象,session对象就像是客户端在服务端的账号,它们被服务器放到一个Map集合中,这个Map集合被称为session缓存。当客户端后续访问服务端时,只要将session的id值传递给服务端,服务端就能判断出时哪一个客户端发送的,从而选择与之对应的session对象来为其服务。

3.HttpSession API:

HttpSession中的常用方法:

String getId():用于返回当前HttpSession对象关联的Id值;

long getCreationTime():用于返回当前HttpSession的创建时间。

long getLastaccessedTime():返回客户端最后一次发送与session相关请求的时间。

boolean isNew():判断当前session是否时新创建的。

void invalidate():强制使当前的session对象失效。

ServletContext getServletContext():用于返回当前session对象所属的ServletContext对象。

void setAttribite(String name,Object value):将一个对象和一个名称关联后存储到session对象中。

string getAttribite():用于从当前session对象中返回指定名称的属性对象。

void removeAttribite(String name):用于从当前Httpsession对象中删除指定名称的属性。

4.获取session:

session与每个请求有关,为此HttpSessionRequest定义了两个获取session对象的getSession()方法:

public HttpSession getSession(boolean create)

public HttpSession getSession()

request.getSession()有两种可能:一种使创建session,一种使获取session。

第一个getSession方法使根据参数来判断当没有session对象时是否创建新的session对象,如果为true,就创建新的session对象。

第二个getSession方法相当于第一个方法参数为true时,在相关的session对象不存在时创建新的session对象

注意:由于getSession方法可能会返回会话标识号(id)的Cookie头字段,因此,必须在发送相应内容前调用getSession方法。

session是由服务器端来创建的,当你访问服务器时,服务器不会立马给你创建一个session对象,而是在第一次访问session时,才给你创建,什么时候时第一次访问呢?既当你第一次调用getSession()方法时,服务器会先判断请求头中的Cookie.

packagecn.it.gan.sessionDemo;importjava.io.IOException;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjavax.servlet.http.HttpSession;

@WebServlet("/SessionText")public class SessionText extendsHttpServlet {private static final long serialVersionUID = 1L;publicSessionText() {super();//TODO Auto-generated constructor stub

}protected void doGet(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {

response.setCharacterEncoding("utf-8");

response.setContentType("text/html;charset=utf-8");//使用request对象来获取session,如果session不存在就创建一个session;

HttpSession session=request.getSession();//将数据存到session中

session.setAttribute("date", "小小");//获取session的ID值

String sessionID=session.getId();//判断此session是新建的还是已经存在的

if(session.isNew()) {

System.out.println("session对象已经创建好了,sessionID是"+sessionID);

}else{

System.out.println("session对象已经存在了");

}

}protected void doPost(HttpServletRequest request, HttpServletResponse response) throwsServletException, IOException {//TODO Auto-generated method stub

doGet(request, response);

}

}

我猜想request.getSession()方法内部新创建了Session之后一定是做了如下的处理

1 //获取session的Id

2 String sessionId = session.getId();

3 //将session的Id存储到名字为JSESSIONID的cookie中

4 Cookie cookie = new Cookie("JSESSIONID", sessionId);

5 //设置cookie的有效路径

6 cookie.setPath(request.getContextPath());

7 response.addCookie(cookie);

session注意事项:

1.session的创建并不是在浏览器向服务器发出请求的瞬间产生的,而是在servlet端调用HttpServletRequest.getSession()时创建的。

2.在一个jsp页面中,session能作为隐式对象被调用是因为jsp在编译的过程中自动调用了HttpServletRequest.getSession()。

3.当在jsp页面中使用了时,jsp页面不会去主动创建session,但是我们可以手动的去创建一个session。

session的失效有两种情况:

1.设置session的超时响应使它失效

2.调用了session的invalidate()方法使它失效。

需要注意的是,如果使用了第二种方法,session在失效的同时,浏览器会自动创建一个新的session。

一般来说,要想使一个jsp中session为null,那么只有在jsp页面中使用且不使用HttpServletRequest.getSession()或使用时设置为 HttpServletRequest.getSession(false)。

同时需要注意的是当使用,且在jsp代码中调用:

HttpSession session = new request.getSession();

out.print(session);

session.invalidate();

out.print(session);

%>

时,前后两个out.print()输出的是同一个session。

但是如果不使用,仅在jsp代码中使用

out.print(session);

session.invalidate();

out.print(session);

%>

此时,输出的两个session不同。

JAVA创建会话的方法_javaweb学习——会话技术(二)相关推荐

  1. java创建数组并赋值_「java 数组」Java创建数组的方法 - seo实验室

    java 数组 最近学java,一点小心得,希望和大家分享一下,第一次写文章,写的不好希望大家谅解,当然我也会尽力写好这篇文章! Java创建数组的方法大致有三种 说明:这里以int为数据类型以arr ...

  2. OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十

    OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...

  3. java web开发周志_javaweb学习笔记及周报告

    第三周: 1.html(HyperText Markup Language:超文本标记语言 ):网页语言. (1)解释名词 a.超文本:超出文本的范畴,使用html可以轻松实现类似使文字带颜色的操作: ...

  4. java web 文件上传_Javaweb学习笔记10—文件上传与下载

    今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思 ...

  5. java 反射 field get方法_JAVA学习之反射getDeclaredField()方法与getField()方法的区别

    在使用反射的时候,常用到的几个方法老是傻傻的分不清楚是干吗的,功能差不多的啊, 比如: Class.getFields(), Class.getField(String), Class.getDecl ...

  6. java 微信api框架_Java架构学习(五十二)使用框架开发微信微信框架介绍整合微信开发框架WxJava使用微信返回消息模板接口使用WxJava框架发送模板消息http协议参数转义知识...

    一.微信框架介绍 1.access_token是公众号的全局唯一调用接口的凭证,它两个小时更新一次. 获取access_token方法: https请求方式: GET https://api.weix ...

  7. 如何学习黑客技术?初级黑客入门

    学习黑客技术很苦恼吗? 或许你并不想成为一个黑客而是好奇,或许你只是为了高超的技术.无论是什么都需要刻苦的去学习,没有什么事情是不付出努力就能轻易成功的,之所以叫成功是因为那个人拥有着与众不同的本领, ...

  8. oracle用dual创建临时表,Oracle 学习系列之二(会话与事务级临时表和dual表 )

    一. 会话临时表 --创建会话临时表 create global temporary table tmp_user_session(user_id int, user_name varchar2(20 ...

  9. java中session对象登录_JavaWeb中Session对象的学习笔记

    一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...

  10. excelexportentity中设置null不显示的方法_学习笔记-Java中的$符

    JavaEE中$符号出现在两个地方,一个是前端jQuery中的$(),一个是后端JSP中的EL表达式${}. 一.$()中放不同的东西代表不同的含义,(1)$(function(){}),表示文档加载 ...

最新文章

  1. Java 为 Excel 中的行设置交替背景色
  2. 解决DeferredResult 使用 @ResponseBody 注解返回中文乱码
  3. 大数据WEB阶段(六)MySql详解(二)
  4. centos 安装php扩展gd,linux(centos)下为php添加添加GD扩展
  5. CSS3 box-shadow 属性
  6. C++工作笔记-作用域的巧妙使用,释放堆区创建的资源
  7. 安卓团课快进_青年大学习网上主题团课第十季第七期答案
  8. 安卓 qemu 运行linux,在Qemu的beagleboard上运行Android
  9. 大写数字时钟电脑壁纸下载
  10. 二维码扫码支付实现方案(仅供自己参考)
  11. uni-app ucharts无法显示
  12. coap php 发送,CoAP 客户端
  13. ipython notebook 如何打开.ipynb文件?
  14. c++手机编程软件_今天小编推荐几款好用的手机编程APP!
  15. 算法 - 求一个数组的最长递减子序列(C++)
  16. 计算机网络故障的排除,网络故障怎么排除 网络故障排除方法
  17. 希尔排序------排序
  18. 程序员接私活一定要知道的事情,我走的弯路你们都别走了
  19. RAID | 更新驱动
  20. 2023第十三届MathorCup高校数学建模挑战赛C题解析

热门文章

  1. 用同一个文件流读取同一个文件两次所需要做的操作
  2. 女神节福利来了!(自动驾驶/三维重建/SLAM/点云/标定/深度估计/3D检测)
  3. 综述|线结构光中心提取算法研究
  4. 在ie7中overflow:hidden失效问题及解决方案
  5. GML C++ Camera Calibration Toolbox 相机标定畸变矫正
  6. 【GDB调试学习笔记】Makefile多级目录生成多个可执行文件
  7. 算法复杂度与NP问题
  8. 进化计算中基于分类的预处理代理模型
  9. 【LeetCode】【字符串】题号:383. 赎金信
  10. [vs2015 + AE]建立窗体应用程序的简单实验