跳转到购物车的页面,显示你要购买的东西
跳转到相应的servlt进行处理并把ID号带进去
listbook.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>显示所有商品</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.desscription}</td>
<td>
<a href="${pageContext.request.contextPath}/buy.do?id=${book.id}">购买</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
编写BuyServlet.java
1.获得要买的书
BuyServlet.java
package www.hbsi.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import www.hbsi.domain.Book;
import www.hbsi.service.BookService;
import www.hbsi.service.BookServiceImpl;
public class BuyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.获得所要购买的书
//点击购物车,呆着ID跳转到servley,获取ID号
String id = request.getParameter("id");
//找到这本书,servlet调用相应的服务类寻找
BookService service = new BookServiceImpl();
Book book = service.findById(id);
// 2.得到购物车
// 3.把书放进去
// 4.显示界面
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
编写findById的方法
- BookService .java
- BookServlceImpl.java
- BookDao.java
package www.hbsi.dao;
import java.util.List;
import www.hbsi.domain.Book;
public interface BookDao {
//查询所有书籍
public List<Book> getAll();
//根据ID查找书籍
public Book findById(String id);
}
- BookDaoImpl.java
package www.hbsi.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import www.hbsi.util.DBConn;
import www.hbsi.domain.Book;
public class BookDaoImpl implements BookDao {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
Book book;
public Book findById(String id) {
try {
conn = DBConn.getConnection();
String sql = "select id,name,author,price,desscription from book where id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
//Book b = null;
if(rs.next()){
book = new Book();
book.setId(rs.getString("id"));
book.setName(rs.getString("name"));
book.setAuthor(rs.getString("author"));
book.setPrice(rs.getDouble("price"));
book.setDesscription(rs.getString("desscription"));
return book;
}
return null;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
DBConn.close(rs, pstmt, conn);
}
}
public List<Book> getAll() {
try {
conn = DBConn.getConnection();
String sql = "select id,name,author,price,desscription from book";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
List<Book> list = new ArrayList<Book>();
while(rs.next()){
book = new Book();
book.setId(rs.getString("id"));
book.setName(rs.getString("name"));
book.setAuthor(rs.getString("author"));
book.setPrice(rs.getDouble("price"));
book.setDesscription(rs.getString("desscription"));
list.add(book);
}
return list;
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
DBConn.close(rs, pstmt, conn);
}
}
}
- 测试
2. 得到购物车
用集合来做
一个实例,生成一个类,通过session得到购物车
3. 向购物车添加
创建购物车,domain包下
购物车相当于一个容器
取Map集合好,如果对集合进行查询,用map
不用查询用list
Cart.java
package www.hbsi.domain;
import java.util.LinkedHashMap;
import java.util.Map;
public class Cart {
//有序的用LinkedHashMap
//同一本书买多次,会出现重复的书,String是ID,Book是实体,会出现重复的书
//private Map<String,Book> map = new LinkedHashMap<String,Book>();
//为了避免出现重复的书,不用Book用CartItem
private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>();
}
新建一个购物项CartItem.java类
package www.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;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
}
Cart.java
package www.hbsi.domain;
import java.util.LinkedHashMap;
import java.util.Map;
public class Cart {
//有序的用LinkedHashMap
//同一本书买多次,会出现重复的书,String是ID,Book是实体,会出现重复的书
//private Map<String,Book> map = new LinkedHashMap<String,Book>();
//为了避免出现重复的书,不用Book用CartItem
private Map<String,CartItem> map = new LinkedHashMap<String,CartItem>();
//所有价格总计
private double price;
public Map<String, CartItem> getMap() {
return map;
}
public void setMap(Map<String, CartItem> map) {
this.map = map;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
//提供一个add方法
public void add(Book book){
// 放到购物车中是放入某一个购物项里,如果存在+1,不存在新建购物项
//找到购物项
CartItem item = map.get(book.getId());
if(item != null){
//购物项里的数量+1
item.setQuantity(item.getQuantity()+1);
}else{
//创建item
item = new CartItem();
//添加书
item.setBook(book);
//设计数量
item.setQuantity(1);
//产生新的购物项放到map集合
map.put(book.getId(),item);
}
}
}
计算价格
1.CartItem里小计
2.Cart总计
4. 向购物车中添加购物项
package www.hbsi.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import www.hbsi.domain.Book;
import www.hbsi.domain.Cart;
import www.hbsi.service.BookService;
import www.hbsi.service.BookServiceImpl;
public class BuyServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1.获得所要购买的书
//点击购物车,呆着ID跳转到servley,获取ID号
String id = request.getParameter("id");
//找到这本书,servlet调用相应的服务类寻找
BookService service = new BookServiceImpl();
Book book = service.findById(id);
// 2.得到购物车
//有了购物车把他放到一个session里,返回一个购物车类型的对象
Cart cart = (Cart) request.getSession().getAttribute("cart");
//还没有购物车
if(cart == null){
cart = new Cart();
request.getSession().setAttribute("cart", cart);
}
// 3.把书放进去
//有了购物车类,增加一个add方法,用于往购物车里添加
cart.add(book);
// 4.显示界面
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
转发转到现实页面:
新建listcart.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>购物车显示页面</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="me" items="${cart.map}">
<tr>
<td>${me.key}</td>
<td>${me.value.book.name}</td>
<td>${me.value.book.price}</td>
<td>${me.value.quantity}</td>
<td>${me.value.price}</td>
<td>
<a href="">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
测试:
在下面页面基础上
点击刷新
自动增加
所以不能用转发,要用重定向
新建一个过度器用于重定向
新建
LsitCartServlet.java
LsitCartServlet.java
package www.hbsi.web.ui;
import java.io.IOException;
import java.io.PrintWriter;
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);
}
}
分享到:
相关推荐
单片机Proteus实例 LCD_Key2%28Inquire%29(电路图 仿真程序 电路)单片机Proteus实例 LCD_Key2%28Inquire%29(电路图 仿真程序 电路)单片机Proteus实例 LCD_Key2%28Inquire%29(电路图 仿真程序 电路)单片机...
典型网站建设实例精讲_超实用典型网站建设实例精讲_超实用典型网站建设实例精讲_超实用典型网站建设实例精讲_超实用典型网站建设实例精讲_超实用典型网站建设实例精讲_超实用典型网站建设实例精讲_超实用典型网站...
这是我学习jsp时运用servlet实现的Web购物车小实例,有兴趣的同学可以看看!
单片机Proteus实例 16_16(12)(电路图 仿真程序 电路)单片机Proteus实例 16_16(12)(电路图 仿真程序 电路)单片机Proteus实例 16_16(12)(电路图 仿真程序 电路)单片机Proteus实例 16_16(12)(电路图 仿真程序 ...
单片机Proteus实例 2104_RTC(电路图 仿真程序 电路)单片机Proteus实例 2104_RTC(电路图 仿真程序 电路)单片机Proteus实例 2104_RTC(电路图 仿真程序 电路)单片机Proteus实例 2104_RTC(电路图 仿真程序 电路)...
单片机Proteus实例 2104_LCD(电路图 仿真程序 电路)单片机Proteus实例 2104_LCD(电路图 仿真程序 电路)单片机Proteus实例 2104_LCD(电路图 仿真程序 电路)单片机Proteus实例 2104_LCD(电路图 仿真程序 电路)...
C#实例.net_经典例子400个,实例源码,参考学习!!!!
单片机Proteus实例 DynamicLED_Key(电路图 仿真程序 电路)单片机Proteus实例 DynamicLED_Key(电路图 仿真程序 电路)单片机Proteus实例 DynamicLED_Key(电路图 仿真程序 电路)单片机Proteus实例 DynamicLED_Key...
CATIA V5运动和力学分析实例教程
单片机Proteus实例 LCD_Key%28Interrupt%29(电路图 仿真程序 电路)单片机Proteus实例 LCD_Key%28Interrupt%29(电路图 仿真程序 电路)单片机Proteus实例 LCD_Key%28Interrupt%29(电路图 仿真程序 电路)单片机...
c# 实现购物车功能 实例代码(非常入门)
一个简单的 jsp购物车源代码,适合初学者学习用, 初学者不要错过哦。
实例2_文本框_文本输入
网站开发实例0426_2 网站开发实例0426_2 网站开发实例0426_2
AVR实例教程_LED2, 编译语言:C语言, 编译环境:ICC
软件开发实例__纯文本监视器软件开发实例__纯文本监视器软件开发实例__纯文本监视器
PHP邮件发送类PHPMailer用法实例详解__2.docx
实例2_文本框_文本输入 实例3_窗体_切换控制 实例5_框架_控件组合 实例6_列表框_自由选择 实例7_时钟控件_系统时钟 实例8_复选框_多重选择 8实例92-100 实例15_弹出式菜单_快捷菜单 实例16_界面特效_透明窗体 ...
php生成百度sitemap站点地图类函数实例__2.docx
3ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max全面攻克_全面实例精解_CD43ds Max...