`
阿尔萨斯
  • 浏览: 4180163 次
社区版块
存档分类
最新评论

【实例】赵雅智_购物车(2)点击购买

 
阅读更多

跳转到购物车的页面,显示你要购买的东西

跳转到相应的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的方法

  1. BookService .java
  2. BookServlceImpl.java
  3. 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);
    }

  4. 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);
    		}
    
    	}
    }

  5. 测试

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);
	}

}




分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics