- _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查看,商品是否添加成功.
测试通过.