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> 密 码:<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;
}
}