至此,学习Servlet三个域对象:ServletContext(web项目)、request(一次请求)、Session(一个客户端)!均有相同的方法!

  从用户开始打开浏览器进行操作,便开始了一次会话,直至关闭浏览器为止结束。在此过程中,每次产生请求时均会产生一次cookie,同时会产生一个JESSIONID进入到客户端进行创建内存空间,下次调用直接寻找此唯一的ID值。数据存储在两个地方均有利弊!需要注意的是,浏览器关闭,session并没有销毁!

一、会话技术简介:

1、存储客户端的状态:

  因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态。

会话技术是帮助服务器记住客户端状态(区分客户端)

2、会话技术:

①、从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。

②、会话技术分为Cookie 和Session:

Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清楚cookie.

Session:将数据存储到服务器端,安全性相对好,增加服务器的压力。

二、Cookie技术:

1、服务器向客户端发送一个Cookie(不能存中文)

Cookie cookie=new Cookie(String name,String value)

2、设置cookie在客户端的持久化时间:

cookie.setMaxAge(int seconds)

如果不设置持久化时间,cookie会存储到浏览器的内存中,浏览器关闭时cookie信息销毁。设置了的话,会在规定的时间内存在。

3、设置cookie的携带路径:

cookie.setPath(String path)

如果不设置携带路径,cookie信息在访问 产生 该cookie的web资源所在的路径 都携带cookie信息。

4、向客户端发送cookie

response.addCookie(Cookie cookie)

5、删除客户端的cookie

使用同名同路径的持久化时间为0的cookie进行覆盖

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie对象
Cookie cookie= new Cookie("godds","naiping");
//设置持久化时间(从请求Servlet开始)
cookie.setMaxAge(60*2);
//设置cookie携带路径(只有访问此路径才携带)
//cookie.setPath("/WEB07/SendCookieServlet");
/*cookie.setPath("/WEB07");
cookie.setPath("/");*/
//发送
response.addCookie(cookie);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//删除Cookie
Cookie cookie = new Cookie("goods","naiping");
cookie.setMaxAge(0);
response.addCookie(cookie);
}

6、服务器接收客户端携带cookie的方式:

以请求头的方式发送到服务器端的

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取cookie数组
Cookie[] cookies = request.getCookies();
//遍历cookie数组通过cookie名获取cookie值
for(Cookie c:cookies){
if(c.getName().equals("goods")){
System.out.println(c.getValue());
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取当前的时间对象
Date date = new Date();
//创建日期转换类对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
//将日期对象转为字符串
String time = sdf.format(date);
//创建cookie对象,记录当前访问时间
Cookie cookie = new Cookie("lastTime",time);
cookie.setMaxAge(60*10);
//发送cookie
response.addCookie(cookie);
//接收cookie
Cookie[] cookies = request.getCookies();
//定义变量存储上次访问时间
String lastTime = null;
//遍历
for(Cookie c:cookies){
if(c.getName().equals("lastTime")){
lastTime=c.getValue();
}
}
//解决响应乱码
response.setContentType("text/html;charset=utf-8");
if(lastTime==null){
//第一次访问
response.getWriter().write("您是第一次访问");
}else{
response.getWriter().write("您上次访问时间为"+lastTime);
}
}

三、Session技术:(一个域对象)

1、简介:

  Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID。

2、获得Session对象:

HttpSession session = request.getSession()

  此方法会获得专属于当前会话(当前客户端)的Session对象,如果服务器端没有该会话的Session对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有 的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在session了)

3、域对象的存取数据;

4、生命周期:

①、创建:

    第一次执行 request.getSession() 时创建

②、销毁:

    服务器非正常关闭时;

    Session 过期、失效(默认30分钟)

    手动销毁Session

③、作用范围:

  默认在一次会话中,也就是说,在一次会话中任何资源公用一个session对象。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取Session域中的内容
HttpSession session = request.getSession();
//获取Session中的内容
String goods = (String)session.getAttribute("goods");
//解决乱码
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(goods);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取Session对象
HttpSession session = request.getSession();
//向Session域中存储数据(cookie不能存汉字)
session.setAttribute("goods", "奶瓶");
//获取JESSIONID
String id = session.getId();
//设置持久化时间---创建一个新的cookie设置其时间并覆盖原来的
//创建Cookie
Cookie cookie = new Cookie("JSESSIONID",id);
cookie.setPath("/WEB08");
cookie.setMaxAge(60*3);
//发送cookie
response.addCookie(cookie);
response.getWriter().write("JSESSIONID:"+id);
//结果 JSESSIONID:0CDD85B8A6E216CA5BDA8E9729D5F230 }

最新文章

  1. Asp.net MVC 传递数据 从前台到后台,包括单个对象,多个对象,集合
  2. ASP.NET Web 应用程序及页面生命周期
  3. pod install后无反应
  4. ural One-two, One-two 2
  5. [转]easyui tree 模仿ztree 使用扁平化加载json
  6. 关于路由、AP、交换机的小总结
  7. eclipse快捷键说明
  8. java web分享ppt大纲 -- servlet容器简介
  9. MySQL FEDERATED 存储引擎
  10. Luogu P4358 密钥破解 题解报告
  11. python-类里面各种方法的学习补充
  12. ssh 第一次登录输入yes 问题
  13. Extjs Window用法详解 2 打印具体应用
  14. MySQL-慢查询日志
  15. eclipse中导入SVN项目步骤
  16. elasticsearch安装指导(new)
  17. Converting HTML to PDF with pdfHTML
  18. 12、Node.js 路由
  19. Visual Format Language(VFL)视图约束
  20. iOS应用App Store发布流程

热门文章

  1. TFS变更地址
  2. Windows通过URL启动本机App
  3. 011 webpack中使用vue
  4. mysql的全量备份与增量备份
  5. c# 通过win32 api 得到指定Console application Content
  6. 创建Observer
  7. BootStrap table服务端分页
  8. SpringBoot配置热部署
  9. js:如何在iframe重载前执行特定动作
  10. Kubernetes 原理架构介绍(一)