Session
前言
本文详细介绍了会话技术Session
一、JSP 简单学习
1.1 概念∶
Java server Pages : java服务器端页面
- 可以理解为:一个特殊的页面,其中既可以指定定义html标签,又可以定义java代码*用于简化书写!!!
1.2 原理
JSP本质上就是一个servlet
1.3 JSP的脚本:JSP定义Java代码的方式
- <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么。
- <%! 代 码 %>:定义的java代码,在jsp转换后的java类的成员位置。
- <%=代码%‰>:定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么。
- JSP的内置对象︰
- 在jsp页面中不需要获取和创建,可以直接使用的对象
- jsp一共有9个内置对象。
1.4 JSP指令
- 作用:用于配置]SP页面,导入资源文件
- 格式:
<%@ 指合名称 属性名1=属性值1 属性名2=属性值2 … %>
分类:
- page:配置JSP页面的
- include:页面包含的。导入页面的资源文件
- 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()之前.
二、状态管理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文件转化为内存中的session对象即可。
三、session什么时候被销毁?
1、服务器关闭。
2.、session对象调用invalidate() 。
3、 session的默认失效时间为30分钟
2.1.5 session特点
-
session的特点
- session用于存储一次会话的多次请求的数据,存在服务器端
- session可以存储任意类型,任意大小的数据
-
session与cookie的区别:
- session存储数据在服务器端,Cookie在客户端.
- session没有数据大小限制,Cookie有
- 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();
}
}