0
点赞
收藏
分享

微信扫一扫

Session 简单购物车

陆佃 2022-02-25 阅读 24


package session.test;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

//代表网站,列出所有书籍

public class SessionDemo1 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        response.setCharacterEncoding("UTF-8");

        response.setContentType("text/html);charset=UTF-8");

        PrintWriter out = response.getWriter();


        //输出网站商品

        out.write("本网站有如下书籍:<br/>");

        Map<String,Book> map = Db.getAll();

        for(Map.Entry<String,Book>entry:map.entrySet()) {

            Book book = entry.getValue();

            out.println("<a href='/session/servlet/SessionDemo2?id="+book.getId()+"' target='_blank'>"+book.getName()+"</a><br/>");


        }


        //2,显示用户看过的商品

        out.print("<br/>您曾经浏览过的商品:<br/>");

        HttpSession session= request.getSession(false);

        if(session==null) {

            out.write("尚未购买商品<br/>");

            return;

        }

        out.write("购物车中商品:<br/>");

        List<String> list = (List)session.getAttribute("list");

        for(String str:list) {

            out.write(str+"<br/>");

        }

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

    }


}

class Db{

    //private Map map = new HashMap();

    private static Map<String,Book> map = new LinkedHashMap<String,Book>();

    static {

        map.put("1",new Book("1","水浒传","施耐庵","名著"));

        map.put("2",new Book("2","三国演义","罗贯中","名著"));

        map.put("3",new Book("3","西游记","吴承恩","名著"));

        map.put("4",new Book("4","红楼梦","曹雪芹","名著"));

        map.put("5",new Book("5","金-瓶梅","笑笑生","名著"));

    }


    public static Map<String, Book> getAll() {

        return map;

    }

}

class Book{

    private String id;

    private String name;

    private String author;

    private String description;



    public Book() {

        super();

        // TODO Auto-generated constructor stub

    }

    public Book(String id, String name, String author, String description) {

        super();

        this.id = id;

        this.name = name;

        this.author = author;

        this.description = description;

    }

    public String getId() {

        return id;

    }

    public void setId(String id) {

        this.id = id;

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public String getAuthor() {

        return author;

    }

    public void setAuthor(String author) {

        this.author = author;

    }

    public String getDescription() {

        return description;

    }

    public void setDescription(String description) {

        this.description = description;

    }

}










package session.test;

import java.util.List;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.LinkedList;

import javax.servlet.ServletException;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

//购买servlet

public class SessionDemo2 extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {


        response.setCharacterEncoding("UTF-8");

        response.setContentType("text/html);charset=UTF-8");

        PrintWriter out = response.getWriter();

        //根据用户带过来的id,显示相应商品的详细信息

        String id = request.getParameter("id");

        Book book = (Book)Db.getAll().get(id);

        out.write(book.getId() + "<br/>");

        out.write(book.getName() + "<br/>");

        out.print(book.getAuthor() + "<br/>");/////////////////////////////

        out.write(book.getDescription() + "<br/>");


        //构建session


        HttpSession session = request.getSession();

        //用集合来保存买的东西。

        List list = (List) session.getAttribute("list");

        if(list==null) {

            list = new ArrayList();

            session.setAttribute("list", list);

        }


        list.add(book);

        //session.setAttribute("list", list);

//        request.getRequestDispatcher("/servlet/SessionDemo1").forward(request, response);

//        this.getServletContext().getRequestDispatcher("/servlet/SessionDemo1").forward(request, response);

        response.sendRedirect(request.getContextPath()+"/servlet/SessionDemo3");//

    }


    private String buildSession(String id, HttpServletRequest request) {

        //bookHistory = null


        String bookHistory = null;

        Cookie cookies[] = request.getCookies();

        for(int i=0;cookies!=null&&i<cookies.length;i++) {

            if(cookies[i].getName().equals("bookHistory"));

                bookHistory = cookies[i].getValue();


        }


        if(bookHistory==null) {

            return id;

        }


        LinkedList<String> list = new LinkedList<String>(Arrays.asList(bookHistory.split("\\,")));

        if(list.contains(id)) {

            list.remove(id);


        }else {

            if(list.size()>=3) {

                list.removeLast();

            }

        }

        list.addFirst(id);


        StringBuffer sb = new StringBuffer();

        for(String bid : list) {

            sb.append(bid + ",");

        }

        return sb.deleteCharAt(sb.length()-1).toString();

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

    }

}







package session.test;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

public class SessionDemo3 extends HttpServlet {

    /**

     * The doGet method of the servlet. <br>

     *

     * This method is called when a form has its tag value method equals to get.

     *

     * @param request the request send by the client to the server

     * @param response the response send by the server to the client

     * @throws ServletException if an error occurred

     * @throws IOException if an error occurred

     */

    public void doGet(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {

        response.setCharacterEncoding("utf-8");

        response.setContentType("text/html;charset=utf-8");

        PrintWriter out = response.getWriter();

        out.write("<br/>");

        out.write("<br/>");


        //2,显示用户看过的商品

        out.print("<br/>您曾经浏览过的商品:<br/>");

        HttpSession session= request.getSession(false);

        if(session==null) {

            out.write("尚未购买商品<br/>");

            return;

        }

        out.write("购物车中商品:<br/>");

        List list = (List)session.getAttribute("list");

        for(Object str:list) {

            Book book = (Book)str;

            out.write(book.getName()+"<br/>");

        }


    }


    public void doPost(HttpServletRequest request, HttpServletResponse response)

            throws ServletException, IOException {


    }

}


客户端无法存cookie的情况,把sessionID存到地址栏。

request.getSession();//先创建session不然下面这句不会有效果

……

String url = response.encodeRedirectUrl(url);


对于重定向的url:


String url = response.encodeRedirectURL(……);


session Id存在地址栏,如果客户端支持cookie会自动存在cookie里,否则才会存在地址栏


举报

相关推荐

0 条评论