注:来自视频的学习笔记
会话技术:从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话,会话技术就是记录这次会话中客户端的状态与数据的。
(1)cookie:数据存储在客户端本地。
优点:减少服务器端的存储的压力
缺点:安全性不好,客户端可以清除cookie
(2)session:将数据存储到服务器端
优点:安全性好
缺点:增加服务器的压力。
(3)两者关系
session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间,所以说session的实现是基于cookie,session需要借助于cookie存储客户的唯一标识JSESSIONID。
cookie学习代码:
package study.zx.cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "CookieServlet",urlPatterns = "/cookie")
public class CookieServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置cookie,注意不能用中文
Cookie cookie = new Cookie ("goods", "cellphone");
cookie.setMaxAge (60);//设置cookie存活时间,单位是秒
cookie.setPath ("/hello/getCookie");//设置cookie存在位置
Cookie cookie1=new Cookie ("userName","preston");
//cookie.setMaxAge (0);//删除cookie,把对应的cookie生命周期设置为0即可
response.addCookie (cookie);//发送cookie到浏览器
}
}
package study.zx.cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "GetCookieServlet",urlPatterns = "/getCookie")
public class GetCookieServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取cookie信息
Cookie[] cookies = request.getCookies ();
for(Cookie cookie:cookies){
String name = cookie.getName ();//获取cookie名称
if(name.equals ("userName")){
String cookieValue = cookie.getValue ();//获取cookie值
response.getWriter ().write ("userName"+cookieValue);//发送到客户端浏览器
}
}
}
}
package study.zx.cookie;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*cookie常用的API学习
*
*
*/
@WebServlet(name = "TimeCookieServlet",urlPatterns = "/interview")
public class TimeCookieServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//格式化时间
Date date = new Date ();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");
String time = simpleDateFormat.format (date);
Cookie cookie=new Cookie ("time",time);
cookie.setMaxAge (60*60);//设置cookie的生存周期
response.addCookie (cookie);
//获取cookie
Cookie[] cookies = request.getCookies ();
String timeValue=null;
for(Cookie cookie1:cookies){
if(cookie1.getName ().equals ("time")){
timeValue=cookie1.getValue ();
}
}
if(timeValue==null){//第一次访问不存在时间存储
response.getWriter ().write ("欢迎你访问我们的网站");
}else{
response.getWriter ().write ("您上次访问该网站的时间是:"+timeValue);
}
}
}
session学习代码:
package study.zx.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "SessionServlet",urlPatterns = "/session")
public class SessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession ();//获取session对象
String sessionId = session.getId ();//获取session的id
response.getWriter ().write ("JSESSIONID"+sessionId);
}
}
package study.zx.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet(name = "SaveSessionServlet",urlPatterns = "/saveSession")
public class SaveSessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置session信息
HttpSession session = request.getSession ();
//创建一个cookie覆盖之前服务器自动生成的JSESSIONID
Cookie cookie = new Cookie ("JSESSIONID", session.getId ());
//设置持久化时间
cookie.setMaxAge (60*30);
response.addCookie (cookie);
session.setAttribute ("goods","cellphone");
}
}
package study.zx.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "GetSessionServlet",urlPatterns = "/getSession")
public class GetSessionServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取session的信息
HttpSession session = request.getSession ();
String goods = (String)session.getAttribute ("goods");
response.getWriter ().write (goods);
}
}
package study.zx.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@WebServlet(name = "AddShoppingServlet",urlPatterns = "/addGoods")
public class AddShoppingServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取商品的信息
String name = request.getParameter ("name");
//2.需要保存商品信息到session
HttpSession session = request.getSession ();
List list = (List)session.getAttribute ("list");
//第一次访问的list不存在,需要创建一个list
if(list ==null){
list = new ArrayList ();
}
list.add (name);
session.setAttribute ("list",list);
//对session进行持久化操作,也就是持久化JSESSIONID
Cookie cookie = new Cookie ("JSESSIONID", session.getId ());
cookie.setMaxAge (60*60);
cookie.setPath ("/hello");
response.addCookie (cookie);
}
}
package study.zx.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
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.util.List;
@WebServlet(name = "GetShoppingServlet",urlPatterns = "/getGoods")
public class GetShoppingServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession ();
List<String> list=(List<String>)session.getAttribute ("list");
response.setContentType ("text/html;charset=utf-8");//设置响应编码格式
for (String s : list) {
response.getWriter ().write (s+"<br/>");
}
}
}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>购物车</title>
</head>
<body>
<h2>商品列表</h2>
<a href="/hello/addGoods?name=华为9pro">华为9pro</a>
<a href="/hello/addGoods?name=小米9">小米9</a>
<a href="/hello/addGoods?name=红米6">红米6</a>
</body>
</html>