jsp课程(7)---jsp+servlet+javabean 实现的简单网上购物车
来源:互联网 发布:百度联盟 域名推广 编辑:程序博客网 时间:2024/04/28 03:15
简单购物车案例(附源码)
下面具体流程,很多功能都还未完善,之后会实现更多功能,例如分页,付款等 敬请期待
使用jsp的MVC模型开发购物车(jsp+servlet+javabean)
必须有三层架构思想:web层负责与用户打交道 业务处理层(服务层 service)数据访问层(dao)
1.搭建开发环境
1)导入开发包:jdbc驱动(jstl的jar包)
2)创建程序所在的包,如下:
3)在MYSQL下创建库和表 字段有:book,name,author,price,description
2.编码
1)开发实体类bean:Book
2) 开发dao (创建工具类)
3) 开发service
4) web层
3.实现效果如下:
1)在浏览器输入:http://localhost:8080/bookstore/后如下图:
2)进入后显示图书列表
3)加入两种书进入购物车后
4)当点击 删除后
5)点击清空购物车后
6)结算功能还未实现
4.附源码:
//BookDao.javapackage com.hbsi.dao;import java.util.List;import com.hbsi.domain.Book;public interface BookDao {//获取所有的书public List<Book> getAll();//根据id获取书public Book find(String id);}
//BookDaoImpl.javapackage com.hbsi.dao;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import com.hbsi.domain.Book;import com.hbsi.utils.DBManager;public class BookDaoImpl implements BookDao{@Overridepublic Book find(String id) {Connection conn = null;PreparedStatement pt = null;ResultSet rs = null;try {conn = DBManager.getConnection();String sql = "select * from book where id=?";pt = conn.prepareStatement(sql);pt.setString(1, id);rs = pt.executeQuery();//Book b = null;if(rs.next()){Book b = new Book();b.setId(rs.getString("id"));b.setName(rs.getString("name"));b.setAuthor(rs.getString("author"));b.setPrice(rs.getDouble("price"));b.setDescription(rs.getString("description"));return b;}return null;} catch (Exception e) {throw new RuntimeException(e);} finally {DBManager.closeDB(conn, pt, rs);}}@Overridepublic List<Book> getAll() {Connection conn = null;PreparedStatement pt = null;ResultSet rs = null;try {conn = DBManager.getConnection();String sql = "select id,name,author,price,description from book";pt = conn.prepareStatement(sql);rs = pt.executeQuery();List<Book> list = new ArrayList<Book>();while (rs.next()) {Book b = new Book();b.setId(rs.getString("id"));b.setName(rs.getString("name"));b.setAuthor(rs.getString("author"));b.setPrice(rs.getDouble("price"));b.setDescription(rs.getString("description"));list.add(b);}return list;} catch (Exception e) {throw new RuntimeException(e);} finally {DBManager.closeDB(conn, pt, rs);}}}
//Book.javapackage com.hbsi.domain;public class Book {private String id;private String name;private String author;private double price;private String 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 double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}}//Cart.javapackage com.hbsi.domain;import java.util.LinkedHashMap;import java.util.Map;public class Cart {private Map<String,CartItem> map=new LinkedHashMap<String,CartItem>();private double price;//所有购物项的价格总计public void add(Book book){CartItem item=map.get(book.getId());if(item!=null){item.setQuantity(item.getQuantity()+1);}else{item=new CartItem();item.setBook(book);item.setQuantity(1);//把新的购物项添加到map集合中map.put(book.getId(),item);}}public Map<String, CartItem> getMap() {return map;}public void setMap(Map<String, CartItem> map) {this.map = map;}public double getPrice() {double totalprice=0;for(Map.Entry<String, CartItem> me:map.entrySet()){CartItem item=me.getValue();totalprice+=item.getPrice();}this.price=totalprice;return price;}public void setPrice(double price) {this.price = price;}}//CartItem.javapackage com.hbsi.domain;//用于代表购买的商品(书)。包括书的数量。(购物项,购物车的一行)public class CartItem {private Book book;private int quantity;private double price;//对此类书的价格计算(小计)public Book getBook() {return book;}public void setBook(Book book) {this.book = book;}public int getQuantity() {return quantity;}public void setQuantity(int quantity) {this.quantity = quantity;this.price=this.book.getPrice()*this.quantity;//书的单价乘以数量}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}}//BusinessService.javapackage com.hbsi.service;import java.util.List;import com.hbsi.domain.Book;import com.hbsi.domain.Cart;public interface BusinessService {public List<Book> getAllBook();//获取指定id的书public Book findBook(String id);//删除购物项public void deleteCartItem(String sid, Cart cart);//清空购物车public void clearCart(Cart cart);//改变数量public void changeQuantity(String sid, String quantity, Cart cart);}//BusinessServiceImpl.javapackage com.hbsi.service;import java.util.List;import com.hbsi.dao.BookDao;import com.hbsi.dao.BookDaoImpl;import com.hbsi.domain.Book;import com.hbsi.domain.Cart;import com.hbsi.domain.CartItem;public class BusinessServiceImpl implements BusinessService{BookDao dao=new BookDaoImpl();@Overridepublic List<Book> getAllBook() {return dao.getAll();}@Overridepublic void deleteCartItem(String sid, Cart cart) {cart.getMap().remove(sid);}@Overridepublic Book findBook(String id) {return dao.find(id);}@Overridepublic void clearCart(Cart cart) {cart.getMap().clear();}@Overridepublic void changeQuantity(String sid, String quantity, Cart cart) {CartItem item=cart.getMap().get(sid);item.setQuantity(Integer.parseInt(quantity));}}//db.propertiesdriver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/bookdbusername=rootpassword=root//BuyServlet.javapackage com.hbsi.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.hbsi.domain.Book;import com.hbsi.domain.Cart;import com.hbsi.service.BusinessServiceImpl;public class BuyServlet extends HttpServlet {BusinessServiceImpl service=new BusinessServiceImpl();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//1.获取要买的书String sid=request.getParameter("id");Book book =service.findBook(sid);//2.得到购物车Cart cart=(Cart)request.getSession().getAttribute("cart");if(cart==null){cart=new Cart();request.getSession().setAttribute("cart", cart);}//3.把数添加到购物车中cart.add(book);response.sendRedirect("./ListCartServlet");//request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}//ChangeQuantitySevlet.javapackage com.hbsi.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.hbsi.domain.Cart;import com.hbsi.service.BusinessService;import com.hbsi.service.BusinessServiceImpl;public class ChangeQuantitySevlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String sid = request.getParameter("id");String quantity = request.getParameter("quantity");Cart cart = (Cart) request.getSession().getAttribute("cart");BusinessService service = new BusinessServiceImpl();service.changeQuantity(sid,quantity,cart);request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}//ClearCartServlet.java package com.hbsi.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.hbsi.domain.Cart;import com.hbsi.service.BusinessService;import com.hbsi.service.BusinessServiceImpl;public class ClearCartServlet extends HttpServlet {BusinessService service=new BusinessServiceImpl();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {Cart cart=(Cart) request.getSession().getAttribute("cart");service.clearCart(cart);request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}//DeleteItemServlet.javapackage com.hbsi.web.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.hbsi.domain.Cart;import com.hbsi.service.BusinessService;import com.hbsi.service.BusinessServiceImpl;public class DeleteItemServlet extends HttpServlet {//调服务类里边的方法从购物项里删除想要删除的书BusinessService service=new BusinessServiceImpl();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//获取到购物项String sid=request.getParameter("id");Cart cart=(Cart)request.getSession().getAttribute("cart");service.deleteCartItem(sid,cart);request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}//ListBookServlet.javapackage com.hbsi.web.controller;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.hbsi.domain.Book;import com.hbsi.service.BusinessService;import com.hbsi.service.BusinessServiceImpl;public class ListBookServlet extends HttpServlet {BusinessService service=new BusinessServiceImpl();public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {List<Book> list=service.getAllBook();request.setAttribute("books", list);request.getRequestDispatcher("../WEB-INF/jsp/listbook.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}//ListCartServlet.javapackage com.hbsi.web.ui;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ListCartServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.getRequestDispatcher("/WEB-INF/jsp/listcart.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}//listbook.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'listbook.jsp' starting page</title> </head> <body style="text-align:center"> <h2>渊博书店</h2> <table border="1" width="80%"> <tr> <td>编号</td> <td>书名</td> <td>作者</td> <td>价格</td> <td>描述</td> <td>操作</td> </tr> <c:forEach var="book" items="${books}"> <tr> <td>${book.id}</td> <td>${book.name}</td> <td>${book.author}</td> <td>${book.price}</td> <td>${book.description}</td> <td> <a href="${pageContext.request.contextPath}/servlet/BuyServlet?id=${book.id}">加入购物车</a> </td> </tr> </c:forEach> </table> </body></html>//listcart.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <title>My JSP 'listbook.jsp' starting page购物显示页面</title> <script type="text/javascript"> function deleteItem(id){ var b = window.confirm("确定要删除吗?"); if(b){window.location.href="${pageContext.request.contextPath}/servlet/DeleteItemServlet?id="+id; } } function clearcart(){ var b = window.confirm("确定要清空您当前所选的商品吗?"); if(b){window.location.href="${pageContext.request.contextPath}/servlet/ClearCartServlet"; } } function changequantity(input,id,oldvalue){ //得到修改的数量 var quantity = input.value; //判断是否是正整数 if(quantity<0 || quantity!=parseInt(quantity)){ alert("请输入正整数!!"); input.value=oldvalue; return; } var b = window.confirm("确定要将数量修改为:"+quantity); if(b){window.location.href="${pageContext.request.contextPath}/servlet/ChangeQuantitySevlet?id="+id+"&quantity="+quantity; } } </script> </head> <body style="text-align:center"> <h1> 您的购物车</h1> <h2>您购买了如下商品</h2> <c:if test="${empty cart.map}"> <font color="red">您的购物车还是空的哦!!</font><br/> <img src="../images/gouwuche.jpg" width="350" height="350"/> 您可以 <a href="${pageContext.request.contextPath}/servlet/ListBookServlet">点击此处进入购买页面</a> </c:if> <c:if test="${!empty cart.map}"> <table border="1" width="80%" bordercolor="blue"> <tr> <td>编号</td> <td>书名</td> <td>单价</td> <td>数量</td> <td>小计</td> <td>操作</td> </tr> <c:forEach var="me" items="${cart.map}"> <tr> <td>${me.key}</td> <td>${me.value.book.name}</td> <td>${me.value.book.price}¥</td> <td> <input type="text" name="quantity" value="${me.value.quantity}" onchange="changequantity(this,${me.key},${me.value.quantity})"/> 在此修改数量 </td> <td>${me.value.price}¥</td> <td> <a href="javascript:deleteItem(${me.key })" >删除</a> <!--<a href="javascript:void(0)" onclick="deleteItem(${me.key })">删除</a>--> <!--<a href="${pageContext.request.contextPath}/servlet/DeleteItemServlet?id=${me.key}">删除</a>--> </td> </tr> </c:forEach> <tr> <td colspan="3">总价(totalprice)</td> <td colspan="1">${cart.price }¥</td> <td> <!--<a href="${pageContext.request.contextPath}/servlet/ClearCartServlet">清空购物车</a>--> <a href="javascript:clearcart()">清空购物车</a> </td> <td> <a href="javascript:pay()">去结算</a></td> </tr> </table> <a href="${pageContext.request.contextPath}/servlet/ListBookServlet">返回继续购物</a> </c:if> </body></html>//index.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>网上购物首页</title> </head> <body> <font color="red" size="15px"> 想要你的书架上再多几本书吗?</font><br/>点击图片进入 <a href="${pageContext.request.contextPath}/servlet/ListBookServlet"> <img src="./images/book.jpg" width="350" height="350"/> </a> </body></html>
//DBConn.java
package com.hbsi.utils;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;public class DBConn {private static Connection conn=null;public static Connection getConn(){if(conn==null){try {Class.forName("com.mysql.jdbc.Driver");try {conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/bookdb?user=root&password=root&useUnicode=true&characterEncoding=UTF-8");} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}return conn;}public static void realse(ResultSet rs, PreparedStatement pstmt) {if(rs!=null){try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(pstmt!=null){try {pstmt.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
//DBManager.java
package com.hbsi.utils;import java.io.IOException;import java.io.InputStream;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;public class DBManager {/** * @param args */static String driver;static String url;static String username;static String password;static{InputStream in=DBManager.class.getClassLoader().getResourceAsStream("db.properties");Properties pro=new Properties();try {pro.load(in);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}driver = pro.getProperty("driver");url = pro.getProperty("url");username = pro.getProperty("username");password = pro.getProperty("password");try {Class.forName(driver);} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static Connection getConnection(){Connection con=null;try {con=DriverManager.getConnection(url,username,password);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return con;}public static void closeDB(Connection con,Statement st,ResultSet rs){if(rs!=null){try {rs.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(st!=null){try {st.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if(con!=null){try {con.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public static void main(String[] args) {getConnection();}}
声明:此博客内容和百度文库中的内容一样都是我自己的点击打开链接,百度文库中没有DBConn.java和DBManager.java
- jsp课程(7)---jsp+servlet+javabean 实现的简单网上购物车
- jsp+servlet+javabean 实现的简单网上购物车
- 简单的JSP购物程序(综合运用JavaBean、JDBC、JSP隐含对象,开发一个小型网上购物系统)
- jsp+javaBean购物车的实现
- jsp+javaBean购物车的实现
- Servlet+jsp实现简单购物车
- 基于Servlet+JSP+JavaBean开发模式的购物车
- 购物车的实现(jsp+servlet)
- Servlet/Jsp实现购物车
- 网上购物系统.......jsp+++++javabean (一)
- JSP+javabean实现购物车功能
- 用JSP+Servlet+JavaBean模式实现简单的登录
- 浅谈实现基于Javabean与JSP的购物车功能
- [JSP&JDBC]购物车实例(MVC模型+JSP+javascript+Servlet+JavaBean)
- 一个简单的jsp+servlet+javabean
- 一个简单的javaBean+JSP+Servlet案例
- JSP(6)简单购物车实现
- 服务器搭建:servlet+dao+javabean+jsp实现简单的用户登录(一)
- hdu 4460 Friend Chains
- Regex
- ASP.NET四种页面导航方式分析
- 进制之间的转换
- [struts2][问题集合]
- jsp课程(7)---jsp+servlet+javabean 实现的简单网上购物车
- 布隆过滤器,数据处理的神来之笔!BloomFilter
- uva 442 Matrix Chain Multiplication
- 无刷新多文件上传(iframe)
- JQuery
- 【木头Cocos2d-x 013】游戏实例-《跑跑跑》制作教程(第五篇)——主角上下移动
- 详谈CSS网页布局中容易发生的错误编码http://www.52css.com/article.asp?id=1190
- 为Eclipse创建Ant的build.xml文件编辑自动提示
- 只用一次+ 求三个整数之和