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

    测试通过.