- _nosay
Session的持久化以及简单购物车的实现
2017-11-21 10:12:41
Session的持久化
由于Session的创建和获取是取决于Cookie中的JSESSIONID决定的,所以如果Cookie被清除了,服务器就无法找到对应的Session了,因此如果想要持久化Session就必须对Cookie中的JSESSIONID进行持久化.
相关代码如下
package net.zixue.session;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
@WebServlet(name = "SaveSessionServlet",urlPatterns = "/save")
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 {
HttpSession session = request.getSession();
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60*60);
response.addCookie(cookie);
session.setAttribute("goods","cup");
}
} 这样就成功的将Session作了持久化处理.
下面做一个简单的购物车demo
建立AddCartServlet文件,代码如下
package net.zixue.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 = "AddCartServlet",urlPatterns = "/addCart")
public class AddCartServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
HttpSession session = request.getSession();
List list = (List) session.getAttribute("list");
if(list==null)
{
list = new ArrayList(); //第一次访问的时候list不存在,需要创建一个list
}
list.add(name);
session.setAttribute("list",list);
//对session进行持久化操作
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);
}
} 建立GetCartServlet文件,代码如下:
package net.zixue.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 = "GetCartServlet",urlPatterns = "/getCart")
public class GetCartServlet 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 />");
}
}
} 在根目录下建立addCart.html文件,代码如下
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>商品列表</h1> <a href="/addCart?name=杯子">杯子</a><br /> <a href="/addCart?name=书包">书包</a><br /> <a href="/addCart?name=笔记本">笔记本</a><br /> </body> </html>
访问,addCart.html文件,分别点击三个链接,然后访问GetCartServlet查看,商品是否添加成功.
测试通过.