• Session会话技术详解



    前言

    本文详细介绍了会话技术Session


    一、JSP 简单学习

    1.1 概念∶

    Java server Pages : java服务器端页面
    - 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码*用于简化书写!!!

    1.2 原理

    JSP本质上就是一个servlet

    1.3 JSP的脚本:JSP定义Java代码的方式

    1. <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
    2. <%! 代 码 %>:定义的java代码,在jsp转换后的java类的成员位置。
    3. <%=代码%‰>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
    4. JSP的内置对象︰
      • 在jsp页面中不需要获取和创建,可以直接使用的对象
      • jsp一共有9个内置对象。

    1.4 JSP指令

    • 作用:用于配置]SP页面,导入资源文件
    • 格式:
      <%@ 指合名称 属性名1=属性值1 属性名2=属性值2 … %>
      分类:
    1. page:配置JSP页面的
    2. include:页面包含的。导入页面的资源文件
    3. taglib:导入资源

    1.4.1 page指令

    • contentType :等同于response.setcontentType()
      • 设置响应体的mime类型以及字符集
      • 设置当前jsp页面的编码(只能是高级的IDEA才能生效,如果使用低级工具,则需要设置pageEncoding属性设置当前页面的字符集)
    • import :导包
    • errorPage :当前页面发生异常后,会自动跳转到指定的错误页面
    • isErrorPage :标识当前也是是否是错误页面。
      • true:是,可以使用内置对象exception。
      • false :否。默认值。不可以使用内置对象exception。

    1.4.2 注释

    <%----%>︰可以注释所有

    1.5 内置对象(隐含对象)

    1、request
    2、response
    3、out::字符输出流对象。可以将数据输出到页面上。和response.getwriter()类似

    • response.getWriter()和out.write()的区别:
      • 在tomcat服务器真正给客户端做出响应之前,会先找response缓冲区数据,再找out缓冲区数据。
      • response.getwriter()数据输出永远在out.write()之前.

    4、

    在这里插入图片描述

    二、状态管理Session会话技术(面试)服务端

    2.1 Session

    2.1.1 什么是 Session(会话)?

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

    • 浏览器访问Web服务器时,服务器会为每一个浏览器在服务器端的内存中分配空间,单独创建一个Session对象,该对象有一个ld属性,其值唯一,一般称之为SessionId ,并且服务器会将这个Sessionld(使用Cookie的方式)发送给浏览器;浏览器再次访问服务器时,会将SessionId发送给服务器,服务器可以依据Sessionld找到对应的Session对象。

    2.1.2 快速入门

    • 步骤:
      1.获取Httpsession对象︰
      Httpsession session = request.getsession();
      2.使用Httpsession对象:
      object getAttribute(string name)
      void setAttribute(string name,object value)
      void removeAttribute( string name)I

    2.1.3 session工作原理

    • session 是依赖于cookie来实现的。

    • 服务器如何确保在一次会话中,多次获取的Session对象是同一个?
      在这里插入图片描述

    2.1.4 session使用细节

    一、当客户端关闭后,服务器不关闭,两次获取session是否为同一个?

    • 默认情况下。不是。
      • 如果需要相同,则可以创建cookie,键为"SESSIONID,设置最大存活时间,让cookie持久化保存。
    cookie c = new Cookie( "JSESSIONID",session.getId());
    c.setMaxAge(60*60);
    response.addcookie(c);
    
    • 1
    • 2
    • 3

    二、客户端不关闭,服务器关闭后,两次获取的session是同一个吗?

    • 不是同一个,但是要确保数据不丢失(tomcat已经帮我们做了)

    • session的钝化:

      • 在服务器正常关闭之前,将session对象系列化到硬盘上
    • session的活化:

      • 在服务器后动后,将session文件转化为内存中的session对象即可。
        (tomcat)

    三、session什么时候被销毁?

    1、服务器关闭。
    2.、session对象调用invalidate() 。
    3、 session的默认失效时间为30分钟

    2.1.5 session特点

    • session的特点

      1. session用于存储一次会话的多次请求的数据,存在服务器端
      2. session可以存储任意类型,任意大小的数据
    • session与cookie的区别:

      1. session存储数据在服务器端,Cookie在客户端.
      2. session没有数据大小限制,Cookie有
      3. session数据安全,cookie相对于不安全

    2.1.6 session验证

    用户访问需要保护的资源时,可以使用Session验证的方式来保证其安全性,比如要求登陆后才能访问的资源实现Session验证,遵循以下步骤

    • 1、使用Session.setAttribute ()先绑定数据.
    • 2、使用Session.getAttribute( )方式来读取绑定值,如果没有,则跳转回登录页面.

    2.1.7 session代码案例

    package com.qst.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    public class SessionServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    
    	public void service(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		request.setCharacterEncoding("UTF-8");
    		response.setContentType("text/html;charset=utf-8");
    		//当参数为false时,有session对象返回session对象,无Session对象返回null
    		 //HttpSession session=request.getSession(false);
    		 当参数为true时,有session对象返回session对象,无Session对象时创建一个新session对象返回。
    		// HttpSession session2=request.getSession(true);
    		 //request.getSession(true)等价于request.getSession()。
    		 HttpSession session=request.getSession();
    		 //设置Session生存时间
    		 session.setMaxInactiveInterval(3);
    		 System.out.println(session.getId());
    		  PrintWriter out=response.getWriter();
    		  out.println(session.getId()+"<br/>");
    		 //删除Session对象
    		 // session.invalidate();
    		 
    	}
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
  • 相关阅读:
    JVM stringTable的理解学习
    centos 7 yum install -y nagios
    拉线位移传感器要符合适应目前大方向
    MapReduce 论文
    [游戏] C++ chat
    小视频管理软件stash
    性能压测工具 —— wrk
    开源WordPress博客主题二次元风-LoliMeow主题
    RenduCore笔记-c++实用库
    多层神经网络和激活函数
  • 原文地址:https://blog.csdn.net/qq_45821255/article/details/125441746