一、Session概述
Session即会话,是Web开发中的一种会话跟踪技术
Session是以javax.servlet.http.HttpSession的接口对象的形式出现的
二、Session与Cookie区别
- Cookie是将会话状态保存在了客户端
- Session是将会话状态保存在了服务端
三、Session的创建
- HttpSession session=request.getSession();
四、对Session域属性空间的操作(跨请求)
Session是一个专门用于存放数据的集合,一般称这个用于存放数据的内存空间为域属性空间
五、request的getSession()方法:参数true或false
- 一般情况下,若要向Session写入数据,则需要request.getSession(true),意义是:有老的Session用老的Session,没有老的Session创建新的Session
- 若要从Session中读取数据,则需要request.getSession(false),意义是:有老的Session用老的Session,没有老的Session则返回null。因为要读取数据只有老的Session中才有可能存在要查找的数据,新建的Session中是不可能有要查找的数据的
六、Session基本用法
其中对跨请求有一个对比,request不跨请求,session跨请求
index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="some" method="Post">
USER:<input type="text" name="username"/><br>
<input type="submit" value="submit">
</form>
</body>
</html>
SomeServlet.java
package com.xulinjie;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
* @author Administrator
*
*/
public class SomeServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户提交参数
String username = request.getParameter("username");
//将参数放入request域
request.setAttribute("user", username);
/*
* 下面是session请求响应部分,与上面区分开
*/
//获取session对象
HttpSession session = request.getSession();
//向session域中写入属性
session.setAttribute("username_s", username);
response.getWriter().println("SomeServlet :"+username);
response.getWriter().println("SomeServlet :"+session);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
OtherServlet.java
package com.xulinjie;
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 OtherServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//从request中读取user域
String user = request.getParameter("user");
//获取session
HttpSession session = request.getSession(false);
//从session中读指定属性
String username=null;
if(session!=null)
{
username=(String) session.getAttribute("username_s");
}
PrintWriter out=response.getWriter();
out.println("OtherServlet_request:user:"+user);
out.println("OtherServlet_session:session_username:"+username);
out.println("OtherServlet:session:"+session);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
结果
1、在表单输入数据
2、表单提交后,session接收响应
3、session支持跨请求