- 一、Session是什么?
- 二、实现步骤
- 1.创建Person类
- 2.创建Session
- 3.获取Session值
- 4.销毁Session
- 三、运行示例
一、Session是什么?
二、实现步骤 1.创建Person类当浏览器第一次访问服务器时,服务器创建一个session对象(该对象有一个唯一的id,一般称之为sessionId),服务器会将sessionId 以cookie的方式发送给浏览器。
当浏览器再次访问服务器时,会将sessionId发送过来,服务器依据 sessionId就可以找到对应的session对象。
package com.xxx.pojo;
import java.util.Objects;
public class Person {
private String name;
private int age;
public Person() {
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + ''' +
", age=" + age +
'}';
}
}
2.创建Session
package com.xxx.request;
import com.xxx.pojo.Person;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.io.PrintWriter;
public class Session01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
//得到Session
HttpSession session=req.getSession();
//给Session中存东西
session.setAttribute("name",new Person("安丽",18));
//获取Session的ID
String id = session.getId();
//判断session是不是新的
PrintWriter out=resp.getWriter();
if(session.isNew()){
out.write("Session创建成功:ID:"+id);
}else{
out.write("Session已经在服务器中存在:ID:"+id);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
web.xml中的配置
3.获取Session值session com.xxx.request.Session01 session /s1
package com.xxx.request;
import com.xxx.pojo.Person;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class Session02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//解决乱码问题
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
resp.setContentType("text/html,charset=utf-8");
//得到Session
HttpSession session=req.getSession();
//获取值
Person person= (Person) session.getAttribute("name");
System.out.println(person.toString());
resp.getWriter().write(person.toString());
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
web.xml中的配置
4.销毁Sessionsession1 com.xxx.request.Session02 session1 /s2
package com.xxx.request;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
public class Session03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session=req.getSession();
session.getAttribute("name");
session.invalidate();//注销
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
web.xml中的配置
三、运行示例session2 com.xxx.request.Session03 session2 /s3
**注:**先运行/s1向Session中存值,再运行/s2获取Session中的值
**注:**先运行s1往Session中存值,再运行s3注销Session,再运s2就会出错,因为Session已被销毁,不存在Session



