使用DAO模式、servlet显示商品(书籍)的信息,并将其添加到购物车2

在这里插入图片描述
在这里插入图片描述

Product.java

package cn.dao.vo;

import java.io.Serializable;

public class Product implements Serializable {
		private int id; //编号
		private String name ;//商品名称
		private double price; //单价
		private String category; //种类
		private int pnum; //库存数量
		private String imgurl; //图片路径
		private String description; //详细描述
		
		public Product() {
			super();
		}

		public Product(int id, String name, double price, String category, int pnum, String imgurl,
				String description) {
			super();
			this.id = id;
			this.name = name;
			this.price = price;
			this.category = category;
			this.pnum = pnum;
			this.imgurl = imgurl;
			this.description = description;
		}

		public int getId() {
			return id;
		}

		public void setId(int id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public double getPrice() {
			return price;
		}

		public void setPrice(double price) {
			this.price = price;
		}

		public String getCategory() {
			return category;
		}

		public void setCategory(String category) {
			this.category = category;
		}

		public int getPnum() {
			return pnum;
		}

		public void setPunm(int pnum) {
			this.pnum = pnum;
		}

		public String getImgurl() {
			return imgurl;
		}

		public void setImgurl(String imgurl) {
			this.imgurl = imgurl;
		}

		public String getDescription() {
			return description;
		}

		public void setDescription(String description) {
			this.description = description;
		}
		
		
}

ProductDao.java

package cn.dao.dao;

import java.util.List;

import cn.dao.vo.Product;

public interface ProductDao {
		public boolean add(Product product);
		public List<Product> list();
		public boolean update (Product product);
		public Product findbyId(int id);
}

ProductDaoImplete.java

package cn.dao.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 cn.dao.vo.Product;
import cn.jdbc.tools.JDBCUtil;

public class ProductDaoImplete implements ProductDao {

	Connection conn;
	PreparedStatement pstmt;
	ResultSet rs = null;
	
	
	@Override
	public boolean add(Product product) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public List<Product> list() {
		String sql = "select id,name,category,price,pnum from products";
		ArrayList<Product> list = new ArrayList<Product>();
		try {
			conn = JDBCUtil.getConnection();
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				Product p = new Product();
				p.setId(rs.getInt("id"));
				p.setName(rs.getString("name"));
				p.setCategory(rs.getString("category"));
				p.setPrice(rs.getDouble("price"));
				p.setPunm(rs.getInt("pnum"));
				list.add(p);
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return list;
	}

	@Override
	public boolean update(Product product) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Product findbyId(int id) {
		String sql = "select * from products where id="+id;
		Product product = null;
		try {
			conn = JDBCUtil.getConnection();
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				product = new Product(id,rs.getString("name"),rs.getDouble("price"),rs.getString("category"),rs.getInt("pnum"),rs.getString("imgurl"),rs.getString("description"));
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return product;
	}

}

a1_denglu.jsp

	<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<style>
		h3{
		text-align: center;
		}
		.user{
		color: #999;
		}
		form{
		text-align: center;
		}
		form .rem{
		margin-left: 30px;
		}
</style>

<body>

<%@ include file="a1_denglu_top.jsp"%><!-- 静态包含 -->
<%-- <jsp:include page="a1_denglu_top.jsp"></jsp:include> --%> <!-- 这是动态包含,运行时的包含 -->
	<h3>欢迎进入新东方用户登陆页面</h3>
	
<form type="text" action="LoginServlet" method="post">

	<p> 用户名:<input type="text" name="username" value="请输入用户名" class="user"
	onfocus="if(this.value=='请输入用户名'){this.value='';this.style.color='#424242'} " 
    onblur="if(this.value==''){this.value='请输入用户名' ; this.style.color='#999'}"> 
    </p>
    
	<p>&nbsp;&nbsp;&nbsp;&nbsp;:<input type="password" name="password"> </p>
	
	<input type="submit" value="登陆" class="rem">
	<input type="reset"  value="重置" class="rem"> 
	
</form>

<%@ include file="a1_denglu_bottom.jsp"%>

</body>

<script type="text/javascript">
		 
</script>

</html>

在这里插入图片描述
User

package cn.dao.vo;

import java.io.Serializable;

public class User implements Serializable {

		private int id;
		private String username;
		private String password;
		private String gender;//性别
		private String hobby;//爱好
		private String email;
		
	
		public User() {
			super();
		}


		public User(int id, String username, String password, String gender, String hobby, String email) {
			super();
			this.id = id;
			this.username = username;
			this.password = password;
			this.gender = gender;
			this.hobby = hobby;
			this.email = email;
		}
		
		
		public int getId() {
			return id;
		}
		public void setId(int id) {
			this.id = id;
		}
		public String getUsername() {
			return username;
		}
		public void setUsername(String username) {
			this.username = username;
		}
		public String getPassword() {
			return password;
		}
		public void setPassword(String password) {
			this.password = password;
		}
		public String getGender() {
			return gender;
		}
		public void setGender(String gender) {
			this.gender = gender;
		}
		public String getHobby() {
			return hobby;
		}
		public void setHobby(String hobby) {
			this.hobby = hobby;
		}
		public String getEmail() {
			return email;
		}
		public void setEmail(String email) {
			this.email = email;
		}
	
		
}

UserDao

package cn.dao.dao;

import java.util.*;

import cn.dao.vo.*;

public interface UserDao {

		public ArrayList<User> list();
		public boolean add(User user);
		public boolean update(User user);
		public int verify(String username,String password);	//查询所有用户信息
		public ArrayList<User> queryFenYe(int cPage);//分页
		public int getPageCount();//计算分页的总页数
		public User findbyId(int id);
		public User findByName(String name); 
}

UserDaoImplete

package cn.dao.dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import cn.dao.vo.User;
import cn.jdbc.tools.JDBCUtil;

public class UserDaoImplete implements UserDao {
	
	Connection conn;
	PreparedStatement pstmt;
	ResultSet rs = null;
	int pageSize = 2 ;//一页显示多少条记录的数

	@Override
	public ArrayList<User> list() {
		// TODO 返回用户表中的所有行
		String sql = "select * from user";
		ArrayList<User> list = new ArrayList<User>();
		try {
			conn = JDBCUtil.getConnection();
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				String name = rs.getString("username");
				String pwd = rs.getString("password");
				String gender = rs.getString("gender");
				String hobby = rs.getString("hobby");
				String email = rs.getString("email");
				User u = new User(0,name,pwd,gender,hobby,email);
				list.add(u);
				
				//下面这样写和上面写法相同
				//User u = new User();
				//u.setId(rs.getString("id"));
				//u.setUsername(rs.getString("username"));
				//list.add(u);
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCUtil.release(rs, pstmt, conn);
		}
		return list;
	}

	@Override
	public boolean add(User user) {
		// TODO Auto-generated method stub
		int row = 0 ;
		String sql = "insert into user(username,password,gender,hobby,email) values(?,?,?,?,?)";
		try {
			conn = JDBCUtil.getConnection();//建立连接
			pstmt = conn.prepareStatement(sql);//处理语句
			pstmt.setString(1, user.getUsername());
			pstmt.setString(2, user.getPassword());
			pstmt.setString(3, user.getGender());
			pstmt.setString(4, user.getHobby());
			pstmt.setString(5, user.getEmail());
			row = pstmt.executeUpdate();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCUtil.release(pstmt, conn);
		}
		return row>0 ? true : false;
	}

	@Override
	public boolean update(User user) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public int verify(String username, String password) {
		// TODO 用户的登录验证,用户名和密码都正确返回值是1,用户名正确密码错误返回值是2,其他的返回-1
		int flag = -1;
		String sql = "select password from user where username=?";
		try {
			conn = JDBCUtil.getConnection();//建立连接
			pstmt = conn.prepareStatement(sql);//处理语句
			pstmt.setString(1, username);
			rs = pstmt.executeQuery();
			if(rs.next()) {//用户名存在
				if(password.equals(rs.getString("password"))){//用户输入的密码和查找到的用户名对于的密码进行比较
					flag = 1;
				}else {
					flag = 2;	//密码错误	
			}
		}else {			//用户名不存在
			flag = -1;
		}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			JDBCUtil.release(rs, pstmt, conn);
		}
		return flag;
	}

	@Override
	public ArrayList<User> queryFenYe(int cPage) {
		// TODO 分页查询,得到当前页的用户集合
		String sql = "select * from user limit ?,?";
		ArrayList<User> list = new ArrayList<User>();
		try {
			conn = JDBCUtil.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, (cPage-1)*pageSize);
			pstmt.setInt(2, pageSize);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				int id = rs.getInt("id");
				String name = rs.getString("username");
				String pwd = rs.getString("password");
				String gender = rs.getString("gender");
				String hobby = rs.getString("hobby");
				String email = rs.getString("email");
				User u = new User(id,name,pwd,gender,hobby,email);
				list.add(u);
				}
		} catch (SQLException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.release(pstmt, conn);
		}
		return list;
	}

	@Override
	public int getPageCount() {
		// TODO 求分页的总页数
		String sql = "select count(*) from user";
		int recordCount = 0 ;	//表中数据记录总数(多少个用户信息)
		int pageCount = 0 ;  //分页的总页数
		try {
			conn = JDBCUtil.getConnection();
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				recordCount = rs.getInt(1);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtil.release(pstmt, conn);
		}
		//pageCount = (recordCount+pageSize-1)/pageSize;
		pageCount = recordCount%pageSize==0 ? recordCount/pageSize : recordCount/pageSize+1;
		return pageCount;
	}

	@Override
	public User findbyId(int id) {
		// TODO 
		return null;
	}
	
	public User findByName(String name) {
		User u = new User();
		String sql = "select * from user where username=?"; 
		try {
			conn = JDBCUtil.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, name);
			rs =pstmt.executeQuery();
			if(rs.next()) {
				u.setId(rs.getInt("id"));
				u.setUsername(rs.getString("username"));
				u.setPassword(rs.getString("password"));
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return u;
	}

}

LoginServlet.java

package cn.mvc.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.dao.dao.UserDaoImplete;
import cn.dao.vo.User;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/mvc/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public LoginServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1、获取表单输入的数据
		HttpSession session = request.getSession();//获取Session
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String name = request.getParameter("username");
		String pwd = request.getParameter("password");
		//2、调用实现类里的方法
		UserDaoImplete udi = new UserDaoImplete();
		int flag = udi.verify(name, pwd);
		PrintWriter out = response.getWriter();
		if(flag==1){
			//response.sendRedirect("a1_form_zhuce_.jsp");
			//out.print("<h1>登陆成功!2秒后自动跳转到商城主页面页面,如果没有跳转,请点击<a href='a1_denglu.jsp'>主页面</a></h1>");
			//response.setHeader("refresh", "2,URL=UserServlet?action=list");
			User user = udi.findByName(name);
			session.setAttribute("user", user);
			response.sendRedirect("ProductServlet?action=list");
		}else if(flag==2){
			//response.sendRedirect("a1_denglu.jsp");
			out.print("<h1>密码错误!2秒后自动跳转到登陆页面,如果没有跳转,请点击<a href=\"a1_denglu.jsp\">再次尝试登陆</a></h1>");
			response.setHeader("refresh", "2,URL=a1_denglu.jsp");	
		}else{
			//response.sendRedirect("a1_denglu.jsp");
			out.print("<<h1>用户名不正确!2秒后自动跳转到登陆页面,如果没有跳转,请点击<a href=\"a1_denglu.jsp\">再次尝试登陆</a></h1>");
			response.setHeader("refresh", "2,URL=a1_denglu.jsp");	
		}
	}
	

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

ProductServlet.java

package cn.mvc.servlet;

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

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

import cn.dao.dao.ProductDaoImplete;
import cn.dao.vo.Product;

/**
 * Servlet implementation class ProductServlet
 */
@WebServlet("/mvc/ProductServlet")
public class ProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ProductServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			String action = request.getParameter("action");
			if(action.equals("list")) {
				list(request,response);
			}
			if(action.equals("view")) {
				view(request,response);
			}
	}
	

	protected void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		ProductDaoImplete pdi = new ProductDaoImplete();
		ArrayList<Product> plist = (ArrayList<Product>)pdi.list();
		request.setAttribute("plist", plist);
		request.getRequestDispatcher("productList.jsp").forward(request, response);
	}
	
	protected void view(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		// TODO Auto-generated method stub
		int id = Integer.parseInt(request.getParameter("id"));
		ProductDaoImplete pdi = new ProductDaoImplete();
		Product product = pdi.findbyId(id);
		request.setAttribute("product", product);
		request.getRequestDispatcher("productDetail.jsp").forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}


productList.jsp

<%@page import="java.util.*"%>
<%@page import="cn.dao.dao.UserDaoImplete"%>
<%@page import="cn.dao.vo.*"%>
<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

	<table width="800px" border="1px" align="center">
		<tr>
			<td>商品ID</td>
			<td>商品名</td>
			<td>类别</td>
			<td>单价</td>
			<td>库存数量</td>
			<td>查看商品详情</td>
		</tr>
		
		<%
			ArrayList<Product> list = (ArrayList<Product>)request.getAttribute("plist");
			for(Product p : list){
		%>

		<tr>
			<td><%=p.getId()%></td>
			<td><%=p.getName()%></td>
			<td><%=p.getCategory()%></td>
			<td><%=p.getPrice()%></td>
			<td><%=p.getPnum()%></td>
			<td><a href="ProductServlet?action=view&id=<%=p.getId() %>">查看商品详情</a></td>
		</tr>
	<%
	}
	%>

	</table>
	
</body>
</html>

在这里插入图片描述

productDetail.jsp

<%@page import="cn.dao.vo.Product"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%
	Product p =(Product)request.getAttribute("product");
%>

	<div align="center">
		<h2>商品详细信息</h2>
		<form action="CartServlet?action=buy&id=<%=p.getId()%>" method="post">
		商品名称<input type="text" value="<%=p.getName()%>"><br>
		商品型号<input type="text" value="<%=p.getCategory()%>"><br>
		商品价格<input type="text" value="<%=p.getPrice()%>"><br>
		商品数量<input type="text" value="<%=p.getPnum()%>"><br>
		商品描述<textarea rows="10" cols="50"><%=p.getDescription() %></textarea>
		<input type="submit" value="添加到购物车"> 
		<input type="button" value="返回">
		</form>
	</div>

</body>
</html>

在这里插入图片描述

Cart.java

package cn.dao.vo;

import java.io.Serializable;

public class Cart implements Serializable {
		private int id; //商品的ID
		private String name; //商品名称
		private double price;
		private int pnum;  //商品库存数量
		private int num; //商品的购买数量
		
		public Cart() {
			super();
		}

		public Cart(int id, String name, double price, int pnum, int num) {
			super();
			this.id = id;
			this.name = name;
			this.price = price;
			this.pnum = pnum;
			this.num = num;
		}

		public int getId() {
			return id;
		}

		public void setId(int id) {
			this.id = id;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public double getPrice() {
			return price;
		}

		public void setPrice(double price) {
			this.price = price;
		}

		public int getPnum() {
			return pnum;
		}

		public void setPnum(int pnum) {
			this.pnum = pnum;
		}

		public int getNum() {
			return num;
		}

		public void setNum(int num) {
			this.num = num;
		}
		
		
}

CartServlet.java

package cn.mvc.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.dao.dao.ProductDaoImplete;
import cn.dao.vo.Cart;
import cn.dao.vo.Product;

/**
 * Servlet implementation class CartServlet
 */
@WebServlet("/mvc/CartServlet")
public class CartServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CartServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String action=request.getParameter("action");
		if(action==null)
			action="";	
		if(action.equals("buy")){//购买商品
			buy(request, response);
		}else if(action.equals("remove")) {
			remove(request,response);
		}	
		else if(action.equals("append")) {
			append(request,response);
		}else if(action.equals("minus")) {
			minus(request,response);
		}else if(action.equals("clear")) {
			clear(request,response);
		}																
	}

	protected void buy(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		int id =Integer.parseInt(request.getParameter("id")) ;		
		ProductDaoImplete pdi = new ProductDaoImplete();
		Product product = pdi.findbyId(id);
		Cart cart = new Cart();
		cart.setId(product.getId());
		cart.setName(product.getName());
		cart.setPrice(product.getPrice());
		cart.setPnum(product.getPnum());
		cart.setNum(1);
		HttpSession session = request.getSession();
		ArrayList<Cart> cartlist = (ArrayList<Cart>)session.getAttribute("cartlist");
		if(cartlist==null){
			cartlist = new ArrayList<Cart>();
		}
		boolean hasCart = false;
		for(Cart c : cartlist){
			if(c.getId()==cart.getId()){
			c.setNum(c.getNum()+cart.getNum());
			hasCart = true;
			break;
			}
		}
		if(!hasCart)
			cartlist.add(cart);
		session.setAttribute("cartlist", cartlist);
		response.sendRedirect("showCar.jsp");		
	}
	
	protected void remove(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		ArrayList<Cart> cartlist = (ArrayList<Cart>)session.getAttribute("cartlist");
		int id=(Integer.parseInt(request.getParameter("id")));		//获取商品名称
		for(int i = 0 ; i < cartlist.size() ; i++){
			Cart c = cartlist.get(i);
			if(c.getId()==id){
				cartlist.remove(i);
				break;
			}
		}
		response.sendRedirect("showCar.jsp");		
	}
	
	protected void append(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		ArrayList<Cart> cartlist = (ArrayList<Cart>)session.getAttribute("cartlist");
		int id = Integer.parseInt(request.getParameter("id"));
		for(Cart c : cartlist){
			if(c.getId()==id){
			c.setNum(c.getNum()+1);
			break;
			}
		}
		response.sendRedirect("showCar.jsp");
	}
	
	protected void minus(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session= request.getSession();
		ArrayList<Cart> cartlist = (ArrayList<Cart>)session.getAttribute("cartlist");
		int id=Integer.parseInt(request.getParameter("id"));
		for(int i=0;i<cartlist.size();i++){
			Cart c=cartlist.get(i);
			if(c.getId()==id){
				if(c.getNum()>1){
					c.setNum(c.getNum()-1);
					break;
				}else if(c.getNum()==1){   //当商品数量为1的时候,点击减一,就是移除整个商品
					cartlist.remove(i);
				}
			}
		}
		response.sendRedirect("showCar.jsp");
	}
	
	protected void clear(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		ArrayList<Cart> cartlist = (ArrayList<Cart>)session.getAttribute("cartlist");
		cartlist.clear();
		response.sendRedirect("showCar.jsp");
	}
	
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

showCar.jsp

<%@ page contentType="text/html;charset=utf-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="cn.dao.vo.*" %>
<!-- 通过动作标识,获取ShopCar类实例 -->
<% 
    ArrayList<Cart> cartlist = (ArrayList<Cart>)session.getAttribute("cartlist"); 		//获取实例中用来存储购买的商品的集合
	double total=0;								//用来存储应付金额
%>

<table border="1" width="550" rules="none" cellspacing="0" cellpadding="0">
	<tr height="50"><td colspan="5" align="center">购买的商品如下</td></tr>
	<tr align="center" height="30" bgcolor="lightgrey">
		<td width="25%">名称</td>
		<td>价格</td>
		<td>库存</td>
		<td>数量</td>
		<td>总价()</td>
		<td>移除</td>
	</tr>
	<%	if(cartlist==null||cartlist.size()==0){ %>
	<tr height="100"><td colspan="5" align="center">您的购物车为空!</td></tr>
	<% 
		}
		else{
			for(int i=0;i<cartlist.size();i++){
				Cart cart=(Cart)cartlist.get(i);
				String name=cart.getName();							//获取商品名称
				double price=cart.getPrice();						//获取商品价格
				int pnum = cart.getPnum();
				int num=cart.getNum();								//获取购买数量				
				double money=((int)((price*num+0.05)*10))/10.0;		//计算当前商品总价
				total+=(int)(money*10)/10.0;										//计算应付金额
	%>
	<tr align="center" height="50">
		<td><%=name%></td>
		<td><%=price%></td>
		<td><%=pnum%></td>
		<td>
		<a href="CartServlet?action=append&id=<%=cart.getId()%>"><input type="button"style="width:14px"value="+"/></a>
		<%=num%>
		<a href="CartServlet?action=minus&id=<%=cart.getId()%>"><input type="button"style="width:14px"value="-"/></a>
		
		</td>
		<td><%=money%></td>
		<td>
<a href="CartServlet?action=remove&id=<%=cart.getId() %>">移除</a>
</td>
	</tr>
	<%							
			}
		}
	%>
	<tr height="50" align="center"><td colspan="5">应付金额:<%=total%></td></tr>
	<tr height="50" align="center">
		<td colspan="2"><a href="ProductServlet?action=list">继续购物</a></td>
		<td colspan="2"><a href="CartServlet?action=clear">清空购物车</a></td>
		<td colspan="2"><a href="OrderServlet?action=add">添加订单</a></td>
	</tr>				
</table>

在这里插入图片描述

OrderServlet

package cn.mvc.servlet;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import cn.dao.dao.OrderDaoImolete;
import cn.dao.vo.Cart;
import cn.dao.vo.Order;
import cn.dao.vo.OrderDetail;
import cn.dao.vo.User;

/**
 * Servlet implementation class OrderServlet
 */
@WebServlet("/mvc/OrderServlet")
public class OrderServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public OrderServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		HttpSession session = request.getSession();
		String action = request.getParameter("action");
		if(action.equals("add")) {
			User user = (User)session.getAttribute("user");
			ArrayList<Cart> buylist =(ArrayList<Cart> ) session.getAttribute("cartlist");//获取购物车集合
			Order order = new Order();
			Date date = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			order.setOrdertime(sdf.format(date));
			order.setStatus("已确认");
			order.setUid(user.getId());//user.getId()找到的是每一个用户特定的标识ID  添加到订单表中的用户编号
			ArrayList<OrderDetail> olist = new ArrayList<OrderDetail>();
			for(Cart c : buylist) {
				OrderDetail od = new OrderDetail();
				od.setPid(c.getId());  //c.getId()表示商品的id   存放到订单详情表的商品编号
				od.setNum(c.getNum()); //购买商品的数量
				od.setPname(c.getName());//商品名称
				od.setPrice(c.getPrice());//商品价格
				olist.add(od);//放到集合中
			}
			order.setDetailList(olist);
			OrderDaoImolete odi = new OrderDaoImolete();
			if(odi.add(order)) {
				response.getWriter().print("<h1>订单添加成功!</h1>");
			}else {
				response.getWriter().print("<h1>订单添加失败!</h1>");			
			}
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

Order.java

package cn.dao.vo;

import java.io.Serializable;
import java.util.ArrayList;

public class Order implements Serializable {
		private int id;//订单标识
		private int uid;//用户编号
		private String username;//用户姓名
		private String status;//订单状态
		private String ordertime;//下单时间
		private ArrayList<OrderDetail> detailList;
		
		public Order() {
			super();
		}


		public Order(int id, int uid, String username, String status, String ordertime,
				ArrayList<OrderDetail> detailList) {
			super();
			this.id = id;
			this.uid = uid;
			this.username = username;
			this.status = status;
			this.ordertime = ordertime;
			this.detailList = detailList;
		}



		public int getId() {
			return id;
		}

		public void setId(int id) {
			this.id = id;
		}

		public int getUid() {
			return uid;
		}

		public void setUid(int uid) {
			this.uid = uid;
		}

		public String getUsername() {
			return username;
		}

		public void setUsername(String username) {
			this.username = username;
		}

		public String getStatus() {
			return status;
		}

		public void setStatus(String status) {
			this.status = status;
		}

		public String getOrdertime() {
			return ordertime;
		}

		public void setOrdertime(String ordertime) {
			this.ordertime = ordertime;
		}

		public ArrayList<OrderDetail> getDetailList() {
			return detailList;
		}

		public void setDetailList(ArrayList<OrderDetail> detailList) {
			this.detailList = detailList;
		}

		
		
}

OrderDetail

package cn.dao.vo;

import java.io.Serializable;

public class OrderDetail implements Serializable {  //订单详情表
		private int oid;//订单编号
		private int pid;//商品编号
		private String pname;//商品名称
		private int pnum;//商品库存数量
		private double price;//商品价格
		private int num;//购买数量
		
		public OrderDetail() {
			super();
		}


		public OrderDetail(int oid, int pid, String pname, int pnum, double price, int num) {
			super();
			this.oid = oid;
			this.pid = pid;
			this.pname = pname;
			this.pnum = pnum;
			this.price = price;
			this.num = num;
		}



		public int getOid() {
			return oid;
		}

		public void setOid(int oid) {
			this.oid = oid;
		}

		public int getPid() {
			return pid;
		}

		public void setPid(int pid) {
			this.pid = pid;
		}

		public int getPnum() {
			return pnum;
		}

		public void setPnum(int pnum) {
			this.pnum = pnum;
		}

		public String getPname() {
			return pname;
		}

		public void setPname(String pname) {
			this.pname = pname;
		}

		public double getPrice() {
			return price;
		}

		public void setPrice(double price) {
			this.price = price;
		}

		public int getNum() {
			return num;
		}

		public void setNum(int num) {
			this.num = num;
		}
		
		
}

OrderDao.java

package cn.dao.dao;

import java.util.ArrayList;

import cn.dao.vo.Order;

public interface OrderDao {
		public boolean add(Order o); //添加订单
		public ArrayList<Order> getOrderByUser(int uid);//根据用户查找订单
		public ArrayList<Order> list();  //订单全部列表
		public Order getOrderById(int id);//订单明细
		public boolean send(int id);//订单发货(修改订单的状态)
		public boolean receive(int id);//订单收货
}

OrderDaoImolete.java

package cn.dao.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import cn.dao.vo.Order;
import cn.dao.vo.OrderDetail;
import cn.jdbc.tools.JDBCUtil;

public class OrderDaoImolete implements OrderDao {

	Connection conn;
	PreparedStatement pstmt;
	ResultSet rs = null;
	int row=0;
	String sql = null;
	
	@SuppressWarnings("finally")
	@Override
	public boolean add(Order o) {
		
		try {
			conn = JDBCUtil.getConnection();
			conn.setAutoCommit(false);//事务
			sql="insert into order_info(userid,status,ordertime) values(?,?,?)";
			pstmt=conn.prepareStatement(sql);
			pstmt.setInt(1, o.getUid());//用户编号,即用户的ID(不是用户名)
			pstmt.setString(2, o.getStatus());
			pstmt.setString(3, o.getOrdertime());
			row=pstmt.executeUpdate();
			if(row>0){
				//查询订单编号,就是每个订单的不同的订单标识
				sql = "select id from order_info order by id desc limit 1";//按照ID降序排列,limit 1表示分页,只显示第一行的记录
				PreparedStatement psmt1 = conn.prepareStatement(sql);
				rs = psmt1.executeQuery();
				if(rs.next()){//rs就是订单的编号
					o.setId(rs.getInt("id"));
				}
				//3.添加OrderDetail表	
				sql = "insert into order_detail(oid,pid,num) values(?,?,?)";
				PreparedStatement psmt2 = conn.prepareStatement(sql);
				psmt2.setInt(1, o.getId());		//订单标识
				for(OrderDetail od : o.getDetailList()){
					psmt2.setInt(2, od.getPid());  //商品编号
					psmt2.setInt(3, od.getNum());  //购买数量
					row = psmt2.executeUpdate();
					if(row<=0){//如果失败
						conn.rollback();//事务回滚,回到起始的状态
						break;
					}
				}
				//sql = "update products set pnum = pnum - ? where id = ?";
			}
			if(row>0) conn.commit();//提交事务
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			try {
				conn.rollback();
			} catch (SQLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}finally{
			try {
				conn.setAutoCommit(true);//默认状态复原
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			JDBCUtil.release(pstmt, conn);
		return row>0 ? true:false ;
	}
}


	@Override
	public ArrayList<Order> getOrderByUser(int uid) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ArrayList<Order> list() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Order getOrderById(int id) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean send(int id) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean receive(int id) {
		// TODO Auto-generated method stub
		return false;
	}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱睡觉的小馨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值