Session与Cookie很相似。
Cookie是将内容存在客户的机器上
Session是将内容存在服务器上,同时Session可以存对象(存类)。
制作一个Session
package com.Li.servlet;
import com.Li.pojo.Persion;
//之所以能连起来是因为Session能做Context的内容
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
//创建Session
public class SessionDemo01 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 Persion("蔡勾", 1));
//获取Session的ID
String sessionId = session.getId();
//判断Session是不是新创建的
if (session.isNew()){
resp.getWriter().write("session创建成功。ID:"+sessionId);
}else {
resp.getWriter().write("session已经存在。ID:"+sessionId);
}
//Session创建的时候做了什么
Cookie cookie = new Cookie("JSESSIONID", sessionId);
resp.addCookie(cookie);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
将Session中的内容取出来并显示
package com.Li.servlet;
import com.Li.pojo.Persion;
import javax.servlet.ServletException;
import javax.servlet.http.*;
import java.io.IOException;
//拿到Demo01的session并且输出到控制台
public class SessionDemo02 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();
Persion name = (Persion) session.getAttribute("name");
System.out.println(name);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
实现手动清除Session
package com.Li.servlet;
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;
//注销Session(手动)
public class SessionDemo03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.removeAttribute("name");
session.invalidate();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
创建测试所需要的对象
package com.Li.pojo;
public class Persion {
private String name;
private int age;
public Persion(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 String toString() {
return "Persion{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
设置自动清空Session
在web.xml中
<!-- 设置Session默认的失效时间 -->
<session-config>
<!-- 一分钟自动失效,分钟为单位-->
<session-timeout>1</session-timeout>
</session-config>