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);

二、客户端不关闭,服务器关闭后,两次获取的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();
		 
	}

}

猜你喜欢

转载自blog.csdn.net/qq_45821255/article/details/125441746