【JSP开发】session模拟购物车小例子2

上一篇写模拟购物车不够详细,只写了买一个商品进购物车的场景,这次提供一个完整的模拟购物车的例子(可以选取多个商品进购物车)

(上一篇的连接:http://blog.csdn.net/acmman/article/details/43450845)

购物车的主页,有商品列表,每一个商品后面都有一个"购买"按钮,用户点击商品的购
买按钮,就会将商品加入购物车(也就是将商品加入session中)
ListBookServlet:

package cn.edu.shoping;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.LinkedHashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//代表网站首页,列出所有书
public class ListBookServlet 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();

        request.getSession();//给下面的url用

        out.print("本站有如下商品:<br/>");
        Map<String,Book> map=Db.getAll();
        for(Map.Entry<String, Book> entry:map.entrySet()){
        	Book book=entry.getValue();

        	//为了防止用户禁止cookie
        	String url=response.encodeRedirectURL("/day07/BuyServlet?id="+book.getId());
        	out.print(book.getName()+"<a href='"+url+"' target='_blank'>购买</a><br/>");
        }
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
       doGet(request,response);
	}

}

//模拟数据库
class Db{
	private static Map<String,Book> map=new LinkedHashMap();//HashMap取

出来和存进去的顺序不是一致的(自己测试)
	//类初始化代码(写在静态代码块里)
	static{
		map.put("1",new Book("1","JAVAWEB开发","老张","一本好书!"));
		map.put("2",new Book("2","JDBC开发","老张","一本好书!"));
		map.put("3",new Book("3","Spring开发","老黎","一本好书!"));
		map.put("4",new Book("4","struts开发","老毕","一本好书!"));
		map.put("5",new Book("5","android开发","老黎","一本好书!"));
	}

	public static Map getAll(){
		return map;
	}
}

class Book{
	private String id;
	private String name;
	private String author;
	private String description;

	public Book(){
		super();
	}
	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;
	}

}

购买的Servlet,将买到的新商品加入到List集合中,然后将List集合添加到session中
(已经有了就更新session)。
BuyServlet:

package cn.edu.shoping;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

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;

public class BuyServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse 

response)
			throws ServletException, IOException {
       String id=request.getParameter("id");

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

       HttpSession session=request.getSession(false);//session在主页已经得到,不需要在再创建

       //手工以cookie形式发session,以解决关闭浏览器后,上次买的东西还在
       String sessionid=session.getId();//详见sessio的id
       Cookie cookie=new Cookie("JSESSIONID",sessionid);
       cookie.setPath("/day07");
       cookie.setMaxAge(30*60);
       response.addCookie(cookie);

       //从session中得到用户用于保存所有书的集合(购物车)
       List list=(List)session.getAttribute("list");

       if(list==null){
    	   list=new ArrayList();
    	   session.setAttribute("list", list);
       }
       list.add(book);
       session.setAttribute("list", list);

       //转发(用转发只要刷新,就会买一本书,相当于重新执行该页面,重新发送了一次指令)
       //原因,转发时URL没有换,URL中带有参数,相当于又一次传参
       //所以不要用转发,要用重定向
       //request.getRequestDispatcher("/ListCarServlet").forward(request, response);

       //重定向,为了以后项目会改名字,故项目名字最好不要写死在程序中,用request.getContextPath()代替项目名
       String url=response.encodeRedirectURL(request.getContextPath()+"/ListCarServlet");
       response.sendRedirect(url);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse 

response)
			throws ServletException, IOException {
      doGet(request,response);
	}

}

购物车的显示Servlet,在session中取出用户购买的商品的List列表,然后输出在界面
上。如果用户没有购买东西,就会检测到session中对应属性是null的,然后就会提醒
用户没有购买商品。

ListCarServlet:

package cn.edu.shoping;

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 ListCarServlet 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();

       HttpSession session=request.getSession();
       if(session==null){
    	   out.print("您没有购买任何商品!<br/>");
    	   return;
       }

       out.print("您购买了如下商品:<br/>");
       List<Book> list=(List) session.getAttribute("list");
       for(Book book:list){
    	   out.print(book.getName()+"<br/>");
       }

	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
      doGet(request,response);
	}

}

 至此,实现了一个完整的购物网站的购物车小样例

转载请注明出处:http://blog.csdn.net/acmman

时间: 2024-12-04 15:44:16

【JSP开发】session模拟购物车小例子2的相关文章

【JSP开发】session模拟购物车小例子

利用session来模拟购物网站的购物车,这次没有用静态页面,全部用Servlet来模拟. 用户点击购买之后,就会将商品加入到购物车中(其实就是放入session中),等用户点 击结账的时候,就会将购物车中的信息全部给用户看. 欢迎界面,里面有"购买"."结账"链接,点击购买,就会加入"洗衣机"这个商品.然后 点击"结账"就会看到你买的商品 WelcomeServlet: package cn.edu.session; imp

在JSP开发中模拟.NET WebForm

js|web     WebForm是事件驱动的,控件状态可以在http请求之间自动保持,并且使用后置代码很好地实现了页面外观与页面逻辑控制的分离,一改以往html,服务器段代码.javaScript混杂在一起的web开发方式.stucts提供了大量的定制标签,由tag.form.bean.action及配置文件构建了一个优秀的MVC模式的web开发方式.但相比较其WebForm来,窃以为stucts更为复杂,需要协同工作的元素较多,解决问题的效果不如WebForm显著(仅是个人看法). 在现实

为每个页面加上Session判断的小例子_实用技巧

首先新建一个类,继承自System.Web.UI.Page,然后重写OnInit,如下: 复制代码 代码如下: using System;using System.Data;using System.Configuration;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.We

【JSP开发】有关session的登录注销的一个小例子

下面是一个session的应用的小例子,是用来注销登录的 登陆界面的代码: login.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>login.html</title> <meta http-equiv="keywords" content="keywor

java jsp session-javaweb+jsp+session 实现购物车修改商品数量的问题

问题描述 javaweb+jsp+session 实现购物车修改商品数量的问题 如何把用户输入的数量值,传递到购物车数量中去?? 解决方案 可以把 传入的值用js取出来,再把js取出的值在该显示的地方调用就行 解决方案二: 用Js方法 firstChild.nodeValue 获取 输入框中的值 然后 还是js table.rows[i].cells[i].innerHTM L赋值给商品数量那一栏 ...不懂的就百度哈

netbeans6.5开发JSF+Hibernate的一个小例子(原创)

问题描述 只是一个简单的小例子,希望能对初学者有点帮助我也只是一个初学者,其中的错误还请大家指出http://www.cnblogs.com/halgogo/archive/2009/01/11/1373730.html 解决方案 解决方案二:加油解决方案三:我也是在初学,多多交流解决方案四:加油!

JSP开发工具的选择

js JSP引擎搭建起来后就可以着手使用开发工具进行JSP的编程了,现下流行的JSP开发工具主要有IBM VisualAge,JBuilder,NetBeans,JRun,Urledit,dreamweaver,editplus等,这里我们主要介绍IBM VisualAge,JBuilder, Jrun三种工具的一些基本情况,大家可以参照其各自的特点,结合自身开发环境进行开发工具的选择. IBM VisualAge for Java IBM的Web开发产品可谓同类之中的庞然大物:体积庞大,功能众

Servlets和JSP开发原则

js|servlet Servlet和JSP技术是用Java开发服务器端应用的主要技术,是开发商务应用表示端的标准.Java开发者喜欢使用它有多种原因,其一是对于已经熟悉Java语言的开发者来说这个技术容易学习:其二是Java把"一次编写,到处运行"的理念带入到Web应用中,实现了"一次编写,到处实现".而且更为重要的是,如果遵循一些良好的设计原则的话,就可以把表示和内容相分离,创造出高质量的.可以复用的.易于维护和修改的应用程序.比方说,在HTML文档中如果嵌入过

【JSP开发】利用cookie实现商品浏览记录

在主页中显示商品,点击商品可以查看商品的具体信息,带用户浏览完之后,回到主页,就会看到自己曾经浏览过什么商品. 商品主页Servlet CookieDemo3.java: package cn.edu.cookie; import java.io.IOException; import java.io.PrintWriter; import java.util.LinkedHashMap; import java.util.Map; import javax.servlet.ServletExc