购物网站实践一

需求:用户管理( 注册 登入,退出,修改),查看产品展示(用分页形式),查看产品详细,加入购物车和查询,提交订单及查询

页面:已提供静态页面(用EL,JSTL,struts标签混合来取值)

工具:   MyEclipse8.6 ;apache-tomcat-6.0.20(服务器);struts-2.3.16;jdk1.6;oracle;plsqldev(用来与oracle连接操作的客户端)

数据库表:共四张表

用户表:t_user

产品表:product

订单表:orders


订单详细表:orderdetail


一、首先要用jdbc来连接数据库,且确保可以连通。

package buaa.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class DButil {
	private static String driver = "oracle.jdbc.driver.OracleDriver";
	private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";
	private static String user = "chen";
	private static String password = "123";
	private static Connection conn = null;
	private static PreparedStatement ps = null;
	private static ResultSet rs = null;

	public static Connection openConnection() {
		try {
			Class.forName(driver);
			conn = DriverManager.getConnection(url, user, password);
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return conn;
	}

	public static ResultSet query(String sql, List<Object> param)
			throws SQLException {
		ps = conn.prepareStatement(sql);
		if (param != null && param.size() > 0) {
			for (int i = 0; i < param.size(); i++) {
				ps.setObject(i + 1, param.get(i));
			}
		}
		rs = ps.executeQuery();
		return rs;
	}

	public static int update(String sql, List<Object> param)
			throws SQLException {
		ps = conn.prepareStatement(sql);
		if (param != null && param.size() > 0) {
			for (int i = 0; i < param.size(); i++) {
				ps.setObject(i + 1, param.get(i));
			}
		}
		int i = ps.executeUpdate();
		return i;
	}

	public static void close() {
		try {
			if (rs != null) {
				rs.close();
			}
			if (ps != null) {
				ps.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

二、把项目分包结构为 dao->service->action  (这里面dao,service都是接口类),而实现 类在包为daoimpl->serviceImpl->action里

当然还需要实体类放在vo包里,还有一个工具包名为util.


二,实现思路为先实现一个模块,确保这个模块能够跑通在实现另外一个模块,有利于错误在最小范里查找。所以思路是这样的,先写dao负责增删查改,service数据库的开启关闭,负责事务,所需要的信息都用方法的参数来传递和返回值的方式返回,尽量action只负责跳转,这样类功能尽量单一,好利于后期的维护。

用户模块

这是dao层代码:


package buaa.product.dao;

import java.sql.SQLException;

import buaa.product.vo.User;

public interface UserDao {
	// 添加用户
	public abstract void addUser(User user) throws SQLException;

	// 根据ID查找用户
	public abstract User queryUserById(String userid) throws SQLException;

	// 根据用户更新用户
	public void updateUser(User user) throws SQLException;

	// 根据用户名和密码查看数据库中是否有该用户
	public User Login(String username, String password) throws SQLException;
}

package buaa.product.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import buaa.product.dao.UserDao;
import buaa.product.vo.User;
import buaa.util.DButil;

public class UserDaoImpl implements UserDao {
	private String sql;
	private ResultSet rs;

	// 增加用户
	public void addUser(User user) throws SQLException {
		sql = "insert into t_user values(?,?,?,?,?,?,?,?,?,?,?,?)";
		List<Object> param = new ArrayList<Object>();

		param.add(user.getUserid());
		param.add(user.getUsername());
		param.add(user.getPassword());

		param.add(user.getStreet1());
		param.add(user.getStreet2());
		param.add(user.getCity());
		param.add(user.getZip());

		param.add(user.getEmail());
		param.add(user.getHomephone());
		param.add(user.getCellphone());
		param.add(user.getOfficephone());
		param.add(user.getTruename());

		// 执行更新结果
		DButil.update(sql, param);

	}

	// 查找根据id查找用户
	public User queryUserById(String userid) throws SQLException {

		sql = "select * from t_user where userid=?";
		List<Object> param = new ArrayList<Object>();
		param.add(userid);
		rs = DButil.query(sql, param);
		User user = new User();
		while (rs.next()) {
			user.setUserid(userid);
			user.setUsername(rs.getString("username"));
			user.setCellphone(rs.getString("cellphone"));
			user.setCity(rs.getString("city"));
			user.setEmail(rs.getString("email"));
			user.setHomephone(rs.getString("homephone"));
			user.setOfficephone(rs.getString("officephone"));
			user.setPassword(rs.getString("password"));
			user.setStreet1(rs.getString("street1"));
			user.setStreet2(rs.getString("street2"));
			user.setTruename(rs.getString("truename"));
			user.setZip(rs.getString("zip"));
		}
		return user;
	}

	// 根据用户更新用户
	public void updateUser(User user) throws SQLException {
		sql = "update t_user set username=?,password=?,street1=?,street2=?,city=?,zip=?,email=?,homephone=?,cellphone=?,officephone=?,truename=? where userid=?";
		List<Object> param = new ArrayList<Object>();
		param.add(user.getUsername());
		param.add(user.getPassword());
		param.add(user.getStreet1());
		param.add(user.getStreet2());
		param.add(user.getCity());
		param.add(user.getZip());
		param.add(user.getEmail());
		param.add(user.getHomephone());
		param.add(user.getCellphone());
		param.add(user.getOfficephone());
		param.add(user.getTruename());
		param.add(user.getUserid());
		DButil.update(sql, param);
	}

	// 根据用户名和密码查看数据库中是否有该用户
	public User Login(String username, String password) throws SQLException {
		sql = "select * from t_user where username=? and password=?";
		List<Object> param = new ArrayList<Object>();
		param.add(username);
		param.add(password);
		rs = DButil.query(sql, param);
		User user = null;
		while (rs.next()) {
			user = new User();
			user.setUserid(rs.getString("userid"));
			user.setUsername(rs.getString("username"));
			user.setCellphone(rs.getString("cellphone"));
			user.setCity(rs.getString("city"));
			user.setEmail(rs.getString("email"));
			user.setHomephone(rs.getString("homephone"));
			user.setOfficephone(rs.getString("officephone"));
			user.setPassword(rs.getString("password"));
			user.setStreet1(rs.getString("street1"));
			user.setStreet2(rs.getString("street2"));
			user.setTruename(rs.getString("truename"));
			user.setZip(rs.getString("zip"));
		}
		return user;

	}
}

这是service代码:

package buaa.product.service;

import buaa.product.vo.User;

public interface UserService {
	// 增加用户
	public abstract void addUser(User user);

	// 查找用户
	public User queryUserById(String userid);

	// 根据用户更新用户
	public void updateUser(User user);

	// 根据用户名和密码查看数据库中是否有该用户
	public User Login(String username, String password);
}

package buaa.product.service.impl;

import java.sql.Connection;
import java.sql.SQLException;

import buaa.product.dao.UserDao;
import buaa.product.dao.impl.UserDaoImpl;
import buaa.product.service.UserService;
import buaa.product.vo.User;
import buaa.util.DButil;

public class UserServiceImpl implements UserService {
	private UserDao userDao = new UserDaoImpl();
	private Connection con;
	private User user;

	// 增加用户
	public void addUser(User user) {
		try {
			// 打开数据库连接
			con = DButil.openConnection();
			// 不主动提交事务
			con.setAutoCommit(false);
			// 调用dao层增加用户
			userDao.addUser(user);
			// 事务提交
			con.commit();
		} catch (SQLException e) {
			e.printStackTrace();
			try {
				// 事务rollback
				con.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
		} finally {
			try {
				// 连接关闭
				con.close();
			} catch (SQLException e) {

				e.printStackTrace();
			}
		}

	}

	// 根据用户id查找用户
	public User queryUserById(String userid) {
		// 打开数据库连接
		con = DButil.openConnection();
		// 根据id查找用户
		try {
			user = userDao.queryUserById(userid);
			// 关闭连接
			DButil.close();
		} catch (SQLException e) {

			e.printStackTrace();
		}
		return user;
	}

	// 根据用户名和密码查看数据库中是否有该用户
	public User Login(String username, String password) {
		// 打开数据库连接
		con = DButil.openConnection();
		// 根据id查找用户
		try {
			user = userDao.Login(username, password);
			// 关闭连接
			DButil.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return user;
	}

	// 根据用户更新用户
	public void updateUser(User user) {
		try {
			// 打开数据库连接
			con = DButil.openConnection();
			// 不主动提交事务
			con.setAutoCommit(false);
			// 更新用户
			userDao.updateUser(user);
			// 事务提交
			con.commit();
		} catch (SQLException e) {
			e.printStackTrace();
			try {
				// 事务rollback
				con.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
		} finally {
			try {
				// 连接关闭
				con.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

}

这是action代码:

package buaa.product.action;

import java.util.UUID;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import buaa.product.service.UserService;
import buaa.product.service.impl.UserServiceImpl;
import buaa.product.vo.User;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport {
	private User user;
	private UserService userService = new UserServiceImpl();
	private String checkpassword;// 确认密码
	private String userid;
	private String username;
	private String password;
	private String message;// 信息

	// 用户登入
	public String login() throws Exception {
		HttpSession session = getSession();
		User user_Session = (User) session.getAttribute("user");
		User user = userService.Login(username, password);
		if (user_Session != null) {
			message = "用户名已经登入,不需要再登入";
			return SUCCESS;
		} else if (user != null) {
			session.setAttribute("user", user);
			return SUCCESS;
		} else {
			message = "用户名或密码错误";
			return "login";
		}
	}

	// 用户添加
	public String register() throws Exception {
		System.out.println("现在的user为" + user);
		user.setUserid(UUID.randomUUID().toString());
		userService.addUser(user);
		// 请登入
		return "register";
	}

	public HttpSession getSession() {
		return (HttpSession) ServletActionContext.getRequest().getSession();
	}

	// @Override
	// public void validate() {
	//
	// if (user.getUsername() == null || "".equals(user.getUsername())) {
	// this.addFieldError("user.username", "用户名不能为空");
	// }
	// if (user.getPassword() == null || "".equals(user.getPassword())) {
	// this.addFieldError("user.password", "密码不能为空");
	// }
	// if (!checkpassword.equals(user.getPassword().trim())) {
	// this.addFieldError("check", "密码输入不一致");
	// }
	//
	// }

	// 用户查找
	public String queryUserById() {
		// 如果用户已经登入
		if (getSession().getAttribute("user") != null) {
			// setUser(userService.queryUserById(userid));
			return "update";
		} else {
			message = "请先登入";
			return "login";
		}

	}

	// 更新用户
	public String updateUserById() {
		if (getSession().getAttribute("user") != null) {
			System.out.println(user);
			// 更新用户
			userService.updateUser(user);
			getSession().setAttribute("user", user);
			return "success";
		} else {
			message = "请先登入";
			return "login";
		}

	}

	// 用户退出
	public String exitUser() {
		if (getSession().getAttribute("user") != null) {
			HttpSession session = getSession();
			session.removeAttribute("user");
		} else {
			message = "请先登入";
			return "login";
		}
		return "exit";
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public String getCheckpassword() {
		return checkpassword;
	}

	public void setCheckpassword(String checkpassword) {
		this.checkpassword = checkpassword;
	}

	public String getUserid() {
		return userid;
	}

	public void setUserid(String userid) {
		this.userid = userid;
	}

	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 getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

}

这是vo

package buaa.product.vo;

public class User {
	private String userid;// 用户id
	private String username;// 用户名
	private String password;// 密码
	private String street1;// 街道1
	private String street2;// 街道2
	private String city;// 城市
	private String zip;// 邮编号
	private String email;// 邮箱
	private String homephone;// 家里电话
	private String cellphone;// 手机电话
	private String officephone;// 办公室电话
	private String truename;// 真名

	public String getUserid() {
		return userid;
	}

	public void setUserid(String userid) {
		this.userid = userid;
	}

	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 getStreet1() {
		return street1;
	}

	public void setStreet1(String street1) {
		this.street1 = street1;
	}

	public String getStreet2() {
		return street2;
	}

	public void setStreet2(String street2) {
		this.street2 = street2;
	}

	public String getCity() {
		return city;
	}

	public void setCity(String city) {
		this.city = city;
	}

	public String getZip() {
		return zip;
	}

	public void setZip(String zip) {
		this.zip = zip;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getHomephone() {
		return homephone;
	}

	public void setHomephone(String homephone) {
		this.homephone = homephone;
	}

	public String getCellphone() {
		return cellphone;
	}

	public void setCellphone(String cellphone) {
		this.cellphone = cellphone;
	}

	public String getOfficephone() {
		return officephone;
	}

	public void setOfficephone(String officephone) {
		this.officephone = officephone;
	}

	public String getTruename() {
		return truename;
	}

	public void setTruename(String truename) {
		this.truename = truename;
	}

	@Override
	public String toString() {
		return "User [cellphone=" + cellphone + ", city=" + city + ", email="
				+ email + ", homephone=" + homephone + ", officephone="
				+ officephone + ", password=" + password + ", street1="
				+ street1 + ", street2=" + street2 + ", truename=" + truename
				+ ", userid=" + userid + ", username=" + username + ", zip="
				+ zip + "]";
	}

}

register.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">
<%@ include file="head.jsp"%>
<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle>
            <img src="images/Forum_nav.gif" align="absmiddle">
               <a href="PageQueryProductServlet">电子商务门户</a> →
				用户注册
        </td>
   </tr>
</table>
<br/>
<form method="post"  action="UserAction_register">
	<table cellpadding="3" cellspacing="1" align="center" class="tableborder1" id="table1">
		<tr>
			<td valign="middle" colspan="2" align="center" height="25" background="images/bg2.gif">
			<font color="white"><b>新用户注册</b></font></td>
		</tr>
		<tr>
			<td width="40%" class="tablebody1"><b>用户名</b>:<br>
			注册用户名长度限制为0-16字节</td>
			<td width="60%" class="tablebody1">
			<input maxLength="8" size="32" name="user.username" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			<font color="#FF0000">*</font></td>
		</tr>
		<tr>
			<td width="40%" class="tablebody1"><b>密码(至少6位,至多8位)</b>:<br>
			请输入密码,区分大小写。<br>
			请不要使用任何类似 \'*\'、\' \' 或 HTML 字符'
			</td>
			<td width="60%" class="tablebody1">
			<input type="password" maxLength="8" size="32" name="user.password" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			<font color="#FF0000">*</font></td>
		</tr>
		<tr>
			<td width="40%" class="tablebody1"><b>密码(至少6位,至多8位)</b>:<br>
			请再输一遍确认</td>
			<td class="tablebody1">
			<input type="password" maxLength="8" size="32" name="password2" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			<font color="#FF0000">*</font></td>
		</tr>
		<tr>
			<td class="tablebody1"><b>真实姓名</b>:</td>
			<td class="tablebody1">
				<input type="text" size="64" maxlength="32" name="user.truename" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>所在地区</b>:</td>
			<td class="tablebody1">
				<input type="text" size="64" maxlength="32" name="user.city" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>联系地址1</b>:</td>
			<td class="tablebody1">
			<input type="text" size="64" maxlength="32" name="user.street1" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>联系地址2</b>:</td>
			<td class="tablebody1">
			<input type="text" size="64" maxlength="32" name="user.street2" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>邮编</b>:</td>
			<td class="tablebody1">
			<input type="text" size="32" maxlength="8" name="user.zip" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>家庭电话</b>:</td>
			<td class="tablebody1">
			<input type="text" size="32" maxlength="16" name="user.homephone" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>办公室电话</b>:</td>
			<td class="tablebody1">
			<input type="text" size="32" maxlength="16" name="user.officephone" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>手机</b>:</td>
			<td class="tablebody1">
			<input type="text" size="32" maxlength="16" name="user.cellphone" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>Email地址</b>:<br>
			请输入有效的邮件地址</td>
			<td class="tablebody1">
			<input maxLength="50" size="32" maxlength="32" name="user.email" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000"></td>
		</tr>
		<tr>
			<td class="tablebody2" valign="middle" colspan="2" align="center">
				<input type="submit" value="注 册" >   
				<input type="reset" name="reset" value="清 除">
			</td>
		</tr>
	</table>
</form>
<%@ include file="foot.jsp"%>


login.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">
<%@ include file="head.jsp"%>
<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle>
            <img src="images/Forum_nav.gif" align="absmiddle">
               <a href="PageQueryProductServlet">电子商务门户</a> →
				用户登录
        </td>
   </tr>
</table>
<br/>
<form action="UserAction_login" method=post name="login">
		<table cellpadding=3 cellspacing=1 align=center class=tableborder1>
		<tr>
			<td valign=middle colspan=2 align=center height=25 background="images/bg2.gif" ><font color="white"><b>输入您的用户名、密码登录</b></font></td>
		</tr>
		<tr>
		<td valign=middle class=tablebody1>请输入您的用户名</td>
			<td valign=middle class=tablebody1>
				<INPUT name="username" type=text>  
				<a href="register.jsp">没有注册?</a>
				<font color="red">${message}</font>
			</td>
		</tr>
		<tr>
			<td valign=middle class=tablebody1>请输入您的密码</td>
			<td valign=middle class=tablebody1><INPUT name=password type=password>   </td>
		</tr>
		<tr>
			<td class=tablebody2 valign=middle colspan=2 align=center>
				<input type="submit" value="登 录" >
			</td>
		</tr>
		</table>
	</form>
<%@ include file="foot.jsp"%>

updateUser.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 %>">
</head><body>
<%@ include file="../head.jsp"%>
<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle>
            <img src="images/Forum_nav.gif" align="absmiddle">
               <a href="PageQueryProductServlet">电子商务门户</a> →
				用户管理
        </td>
   </tr>
</table>
<br/>
<form method="post"  action="UserAction_updateUserById">
	<input type="hidden" name="user.userid" value="${user.userid}"/>
	<table cellpadding="3" cellspacing="1" align="center" class="tableborder1" id="table1">
		<tr>
			<td valign="middle" colspan="2" align="center" height="25" background="images/bg2.gif">
			<font color="white"><b>用户管理</b></font></td>
		</tr>
		<tr>
			<td width="40%" class="tablebody1"><b>用户名</b>:<br>
			注册用户名长度限制为0-16字节</td>
			<td width="60%" class="tablebody1">
			<input maxLength="8" size="32" name="user.username" value="${user.username}" readonly="readonly" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			<font color="#FF0000">*</font></td>
		</tr>
		<tr>
			<td width="40%" class="tablebody1"><b>密码(至少6位,至多8位)</b>:<br>
			请输入密码,区分大小写。<br>
			请不要使用任何类似 \'*\'、\' \' 或 HTML 字符'
			</td>
			<td width="60%" class="tablebody1">
			<input type="password" maxLength="8" size="32" name="user.password" value="${user.password}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			<font color="#FF0000">*</font></td>
		</tr>
		<tr>
			<td width="40%" class="tablebody1"><b>密码(至少6位,至多8位)</b>:<br>
			请再输一遍确认</td>
			<td class="tablebody1">
			<input type="password" maxLength="8" size="32" name="password2" value="${user.password}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			<font color="#FF0000">*</font></td>
		</tr>
		<tr>
			<td class="tablebody1"><b>真实姓名</b>:</td>
			<td class="tablebody1">
				<input type="text" size="64" maxlength="32" name="user.truename" value="${user.truename}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>所在地区</b>:</td>
			<td class="tablebody1">
				<input type="text" size="64" maxlength="32" name="user.city" value="${user.city}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>联系地址1</b>:</td>
			<td class="tablebody1">
			<input type="text" size="64" maxlength="32" name="user.street1" value="${user.street1}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>联系地址2</b>:</td>
			<td class="tablebody1">
			<input type="text" size="64" maxlength="32" name="user.street2" value="${user.street2}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>邮编</b>:</td>
			<td class="tablebody1">
			<input type="text" size="32" maxlength="8" name="user.zip" value="${user.zip}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>家庭电话</b>:</td>
			<td class="tablebody1">
			<input type="text" size="32" maxlength="16" name="user.homephone" value="${user.homephone}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>办公室电话</b>:</td>
			<td class="tablebody1">
			<input type="text" size="32" maxlength="16" name="user.officephone" value="${user.officephone}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>手机</b>:</td>
			<td class="tablebody1">
			<input type="text" size="32" maxlength="16" name="user.cellphone" value="${user.cellphone}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000">
			</td>
		</tr>
		<tr>
			<td class="tablebody1"><b>Email地址</b>:<br>
			请输入有效的邮件地址</td>
			<td class="tablebody1">
			<input maxLength="50" size="32" maxlength="32" name="user.email" value="${user.email}" style="font-family: Tahoma,Verdana,宋体; font-size: 12px; line-height: 15px; color: #000000"></td>
		</tr>
		<tr>
			<td class="tablebody2" valign="middle" colspan="2" align="center">
				<input type="submit" value="修改" >
			</td>
		</tr>
	</table>
</form>
<%@ include file="../foot.jsp"%>
</body></html>


head.jsp页面头部:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!--文件头开始-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta name="description" content="清软电子商务门户">
		<title>电子商务门户</title>
		<LINK href="css/sinojava.css" rel=stylesheet>
		<script language="JavaScript" src="js/sinojava.js">
</script>
	</head>
	<body
		onLoad="MM_preloadImages('images/index_on.gif','images/reg_on.gif','images/order_on.gif','../images/top/topxmas/jp_on.gif','../images/top/topxmas/download_on.gif','../images/top/topxmas/bbs_on.gif','../images/top/topxmas/designwz_on.gif')"
		topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0">
		<table width="100%" border="0" cellspacing="0" cellpadding="0"
			id="table2">
			<tr>
				<td align="left" width="7%" background="images/top_bg.gif">
					<img src="images/logo.gif" width="286" height="58">
				</td>
				<td width="62%" background="images/top_bg.gif"></td>
				<td width="31%" background="images/top_r.gif" align="right">
					<c:if test="${empty user}">
						<a href="login.jsp">[登录]</a> 
		    	<a href="register.jsp">[注册]</a>     
		    </c:if>
				</td>
			</tr>
		</table>
		<table width="100%" border="0" cellspacing="0" cellpadding="0">
			<tr>
				<td background="images/dh_bg.gif" align="left" height="12">
					<table width="100" border="0" cellspacing="0" cellpadding="0"
						align="center">
						<tr>
							<td width="5%">
							</td>
							<td width="10%">
								<a href="productAction_queryPage"
									onMouseOut="MM_swapImgRestore()"
									onMouseOver="MM_swapImage('Image1','','images/index_on.gif',1)">
									<img name="Image1" border="0" src="images/index.gif" width="90"
										height="36">
								</a>
							</td>
							<td width="10%">
								<a href="UserAction_queryUserById" onMouseOut="MM_swapImgRestore()"
									onMouseOver="MM_swapImage('Image2','','images/reg_on.gif',1)">
									<img name="Image2" border="0" src="images/reg.gif" width="92"
										height="36">
								</a>
							</td>
							<td width="10%">
								<a href="CartAction_query" onMouseOut="MM_swapImgRestore()"
									onMouseOver="MM_swapImage('Image4','','images/carts_on.gif',1)">
									<img name="Image4" border="0" src="images/cart.gif" width="92"
										height="36">
								</a>
							</td>
							<td width="10%">
								<a href="OrderAction_query" onMouseOut="MM_swapImgRestore()"
									onMouseOver="MM_swapImage('Image5','','images/order_on.gif',1)">
									<img name="Image5" border="0" src="images/order.gif" width="92"
										height="36">
								</a>
							</td>
							<td width="10%">
								<a href="UserAction_exitUser" onMouseOut="MM_swapImgRestore()"
									onMouseOver="MM_swapImage('Image6','','images/exit_on.gif',1)">
									<img name="Image6" border="0" src="images/exit.gif" width="92"
										height="36">
								</a>
							</td>
						</tr>
					</table>
				</td>
			</tr>
		</table>
		<table cellspacing="1" cellpadding="3" align="center" border="0"
			width="98%">
			<tr>
				<td width="65%">
					<BR>
					>> 欢迎访问 <font color="red">${user.username}</font>
				</td>

			</tr>
		</table>


页面尾部:foot.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!--文件尾开始-->
		<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center" height="28">
		  <tr>
		    <td height="17" background="images/bot_bg.gif">
		       </td>
		  </tr>
		</table>
		<table width="100%" border="0" cellspacing="0" cellpadding="0" align="center">
		  <tr>
		    <td bgcolor="#f1f1f6" height="53" valign="center">
			<p align="center">Copyright ©2004 - 2005 <a href="http://www.bluedo.com.cn"><b><font face="Verdana,">bluedot</font></b><b><font color=#CC0000>.com.cn</font></b></a><br>
			</td>
		  </tr>
		</table>

struts.xml配置文件里配置:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	<constant name="struts.devMode" value="true" />
	<package name="example" extends="struts-default">
		<action name="HelloWorld" class="buaa.product.action.HelloWorld">
			<result>/register.jsp</result>
		</action>
		<!--查询所有产品-->
		<action name="productAction_*" class="buaa.product.action.ProductAction"
			method="{1}">
			<result name="success">/product/{1}_product.jsp</result>
		</action>
		<!--购物车-->
		<action name="CartAction_*" class="buaa.product.action.CartAction"
			method="{1}">
			<result name="success">/cart/cart.jsp</result>
			<result name="login">/login.jsp</result>
			<result name="preOrderSubmit">/order/preOrderSubmit.jsp</result>
		</action>
		<!--e用户-->
		<action name="UserAction_*" class="buaa.product.action.UserAction"
			method="{1}">	
			<result name="register">/register.jsp</result>
			<result name="login">/login.jsp</result>
			<result name="exit" type="redirect">productAction_queryPage</result>
			<result name="update">/user/updateUser.jsp</result>
			<result name="success" type="chain">productAction_queryPage</result>
		</action>

		<action name="OrderAction_*" class="buaa.product.action.OrderAction"
			method="{1}">
			<result name="delete" type="chain">OrderAction_query</result>
			<result name="success" type="redirect">OrderAction_query</result>
			<result name="view">/order/viewOrder.jsp</result>
		</action>
		<!--提交详细-->
		<action name="OrderDetailAction_*" class="buaa.product.action.OrderDetailAction"
			method="{1}">
			<result name="success">/cart/cart.jsp</result>
			<result name="query">/order/detailList.jsp</result>
		</action>
	</package>
</struts>


产品模块


vo层:

package buaa.product.vo;

public class Product {
	private String productid;
	private String name;
	private String description;
	private double baseprice;
	private String writer;
	private String publish;
	private int pages;
	private String images;

	public String getProductid() {
		return productid;
	}

	public void setProductid(String productid) {
		this.productid = productid;
	}

	public String getName() {
		return name;
	}

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

	public String getDescription() {
		return description;
	}

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

	public double getBaseprice() {
		return baseprice;
	}

	public void setBaseprice(double baseprice) {
		this.baseprice = baseprice;
	}

	public String getWriter() {
		return writer;
	}

	public void setWriter(String writer) {
		this.writer = writer;
	}

	public String getPublish() {
		return publish;
	}

	public void setPublish(String publish) {
		this.publish = publish;
	}

	public int getPages() {
		return pages;
	}

	public void setPages(int pages) {
		this.pages = pages;
	}

	public String getImages() {
		return images;
	}

	public void setImages(String images) {
		this.images = images;
	}

	@Override
	public String toString() {
		return "Product [baseprice=" + baseprice + ", description="
				+ description + ", images=" + images + ", name=" + name
				+ ", pages=" + pages + ", productid=" + productid
				+ ", publish=" + publish + ", writer=" + writer + "]";
	}

}


util工具类,用来帮助分页信息

package buaa.util;

public class Page {
	private int start = 1;// 从第几行显示
	private int end = 6; // 到第几行
	private int pagenum = 1;// 第几页
	private int pagecount = 5;// 总共第几页
	private int eachpagecount = 5;// 每页显示数目
	private int recordcount = 10;// 总共有条数据

	public Page() {
		// 总共几页
		this.pagecount = recordcount % eachpagecount == 0 ? recordcount
				/ eachpagecount : recordcount / eachpagecount + 1;
	}

	public Page(int eachpagecount, int recordcount) {
		this.eachpagecount = eachpagecount;
		this.recordcount = recordcount;
		// 总共几页
		this.pagecount = recordcount % eachpagecount == 0 ? recordcount
				/ eachpagecount : recordcount / eachpagecount + 1;

	}

	public int getStart() {
		this.start = getPagenum() * getEachpagecount() - getEachpagecount();
		return start;
	}

	public void setStart(int start) {
		this.start = start;
	}

	public int getEnd() {
		this.end = getPagenum() * getEachpagecount();
		return end;
	}

	public void setEnd(int end) {
		this.end = end;
	}

	// 第几页
	public int getPagenum() {
		return pagenum;
	}

	public void setPagenum(int pagenum) {
		this.pagenum = pagenum;
	}

	// 总共有几页
	public int getPagecout() {
		this.pagecount = getRecordcount() % getEachpagecount() == 0 ? (getRecordcount() / getEachpagecount())
				: (getRecordcount() / getEachpagecount() + 1);
		return this.pagecount;
	}

	public void setPagecout(int pagecount) {
		this.pagecount = pagecount;
	}

	public int getEachpagecount() {
		return eachpagecount;
	}

	public void setEachpagecount(int eachpagecount) {
		this.eachpagecount = eachpagecount;
	}

	public int getPagecount() {
		return pagecount=getRecordcount() % getEachpagecount() == 0 ? (getRecordcount() / getEachpagecount())
				: (getRecordcount() / getEachpagecount() + 1);
	}

	public void setPagecount(int pagecount) {
		this.pagecount = getRecordcount() % getEachpagecount() == 0 ? (getRecordcount() / getEachpagecount())
				: (getRecordcount() / getEachpagecount() + 1);

	}

	public int getRecordcount() {
		return recordcount;
	}

	public void setRecordcount(int recordcount) {
		this.recordcount = recordcount;
	}

}

dao层:

package buaa.product.dao;

import java.sql.SQLException;
import java.util.List;

import buaa.product.vo.Product;

public interface ProductDao {

	// 根据名字查找总共有多少个记录
	public int getRecordCount(String name) throws SQLException;

	// 这个主要用于分页,start为从第几个开始,end为到第几个,name为根据这个名称查出来的
	public List<Product> pageQueryProduct(int start, int end, String name)
			throws SQLException;

	// 根据产品id查找产品信息
	public Product queryProductById(String productid) throws SQLException;

	// 增加产品
	public void addProduct(Product product) throws SQLException;

	// 根据产品id删除产品
	public void deleteProductById(String productid) throws SQLException;
}


package buaa.product.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import buaa.product.dao.ProductDao;
import buaa.product.vo.Product;
import buaa.util.DButil;

public class ProductDaoImpl implements ProductDao {
	private ResultSet rs = null;
	private String sql = null;

	// 根据名字查找总共有多少个记录
	public int getRecordCount(String name) throws SQLException {
		sql = "select count(*) c from product";
		if (name != null && !name.equals("")) {
			sql = "select count(*) c from product where name like ?";
			List<Object> param = new ArrayList<Object>();
			param.add("%" + name + "%");
			rs = DButil.query(sql, param);
		} else {
			rs = DButil.query(sql, null);
		}

		int recordcount = 0;
		while (rs.next()) {
			recordcount = rs.getInt("c");
		}
		return recordcount;
	}

	// 这个主要用于分页,start为从第几个开始,end为到第几个,name为根据这个名称查出来的
	public List<Product> pageQueryProduct(int start, int end, String name)
			throws SQLException {
		sql = "select * from (select p.*, rownum rn from (select * from product order by productid) p where rownum<=?) where rn>?";
		List<Object> param = new ArrayList<Object>();
		if (name != null && !name.equals("")) {
			sql = "select * from (select p.*, rownum rn from (select * from product where name like ? order by productid) p where rownum<=?) where rn>?";
			param.add("%" + name + "%");
		}
		param.add(end);
		param.add(start);
		rs = DButil.query(sql, param);
		List<Product> pList = new ArrayList<Product>();
		while (rs.next()) {
			Product p = new Product();
			p.setProductid(rs.getString("productid"));
			p.setName(rs.getString("name"));
			p.setDescription(rs.getString("description"));
			p.setBaseprice(rs.getDouble("baseprice"));
			p.setWriter(rs.getString("writer"));
			p.setPublish(rs.getString("publish"));
			p.setPages(rs.getInt("pages"));
			p.setImages(rs.getString("images"));
			pList.add(p);
		}
		return pList;
	}

	// 根据产品id查找产品信息
	public Product queryProductById(String productid) throws SQLException {

		sql = "select * from product where productid=?";
		List<Object> param = new ArrayList<Object>();
		param.add(productid);
		// 得到resultset
		rs = DButil.query(sql, param);
		Product p = new Product();
		while (rs.next()) {
			p.setProductid(rs.getString("productid"));
			p.setName(rs.getString("name"));
			p.setDescription(rs.getString("description"));
			p.setBaseprice(rs.getDouble("baseprice"));
			p.setWriter(rs.getString("writer"));
			p.setPublish(rs.getString("publish"));
			p.setPages(rs.getInt("pages"));
			p.setImages(rs.getString("images"));
		}

		return p;
	}

	// 根据产品id删除产品
	public void deleteProductById(String productid) throws SQLException {
		sql = "delete product where productid=?";
		List<Object> param = new ArrayList<Object>();
		param.add(productid);
		DButil.update(sql, param);

	}
	//增加产品
	public void addProduct(Product product) throws SQLException {
		sql = "insert into product values(?,?,?,?,?,?,?,?)";
		List<Object> param = new ArrayList<Object>();
		param.add(product.getProductid());
		param.add(product.getName());
		param.add(product.getDescription());
		param.add(product.getBaseprice());
		param.add(product.getWriter());
		param.add(product.getPublish());
		param.add(product.getPages());
		param.add(product.getImages());
		DButil.update(sql, param);

	}
}

service层:

package buaa.product.service;

import java.util.List;

import buaa.product.vo.Product;

public interface ProductService {

	// 把一个产品详细查询出来
	public abstract Product queryProduct(String productid);
	// 根据产品ID来删除
	public void deleteProduct(String productid) ;
	// 根据名字来看有多少个产品
	public int getRecordCount(String name);
	// 这个主要用于分页,start为从第几个开始,end为到第几个,name为根据这个名称查出来的
	public List<Product> pageQueryProduct(int start, int end, String name);
}

package buaa.product.service.impl;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import buaa.product.dao.ProductDao;
import buaa.product.dao.impl.ProductDaoImpl;
import buaa.product.service.ProductService;
import buaa.product.vo.Product;
import buaa.util.DButil;

public class ProductServiceImpl implements ProductService {
	private ProductDao productDao = new ProductDaoImpl();
	private Product product = null;
	private Connection conn = null;
	private int record = 0;
	private List<Product> list = null;

	// 查询单个产品的详细
	public Product queryProduct(String productid) {
		// 打开连接
		DButil.openConnection();
		try {
			product = productDao.queryProductById(productid);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		// 关闭连接
		DButil.close();
		return product;
	}

	// 根据产品ID来删除
	public void deleteProduct(String productid) {
		// 打开连接
		conn = DButil.openConnection();
		try {
			conn.setAutoCommit(false);
			// 现在购物车还没有实现 如果实现 了要先删除购物车的东西,然后再删除产品
			// 删除产品
			productDao.deleteProductById(productid);
			conn.commit();
		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}
	}

	// 根据名字来看有多少个产品
	public int getRecordCount(String name) {
		// 打开连接
		conn = DButil.openConnection();
		try {
			record = productDao.getRecordCount(name);
		} catch (SQLException e) {

			e.printStackTrace();
		}
		DButil.close();
		return record;
	}

	// 这个主要用于分页,start为从第几个开始,end为到第几个,name为根据这个名称查出来的
	public List<Product> pageQueryProduct(int start, int end, String name) {
		// 打开连接
		DButil.openConnection();
		try {
			list = productDao.pageQueryProduct(start, end, name);
		} catch (SQLException e) {

			e.printStackTrace();
		}
		DButil.close();
		return list;
	}

	// 增加产品
	public void addProduct(Product product) {
		// 打开连接
		conn = DButil.openConnection();
		try {
			conn.setAutoCommit(false);
			productDao.addProduct(product);
			conn.commit();
		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		}
		DButil.close();
	}
}

action层:

package buaa.product.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import buaa.product.service.ProductService;
import buaa.product.service.impl.ProductServiceImpl;
import buaa.product.vo.Cart;
import buaa.product.vo.OrderDetail;
import buaa.product.vo.Orders;
import buaa.product.vo.Product;
import buaa.util.Page;

import com.opensymphony.xwork2.ActionSupport;

public class ProductAction extends ActionSupport {
	List<OrderDetail> orderList = new ArrayList<OrderDetail>();// 购物车里全部东西
	private int eachpagecount;// 每页多少个
	private int pagenum;// 第页面
	private Orders orders = new Orders();
	private String productid;// 产品ID
	private String name = null;// 搜索名称
	private Product product;
	private ProductService productService = new ProductServiceImpl();
	// private ProductDao productDao = new ProductDaoImpl();
	
	private Page page = new Page();// 页面信息

	private List<Product> pList = new ArrayList<Product>();

	public List<Product> getPList() {
		return pList;
	}

	public void setPList(List<Product> pList) {
		this.pList = pList;
	}

	// 查找产品分页显示
	public String queryPage() throws Exception {

		System.out.println("每页显示多少条" + page.getEachpagecount());
		page.setRecordcount(productService.getRecordCount(name));// 总共有多少个数目
		System.out.println("开始从那个数" + page.getStart());
		setPList(productService.pageQueryProduct(page.getStart(),
				page.getEnd(), name));
		System.out.println("总共有多少页" + page.getPagecount());
		return SUCCESS;
	}

	// 查看单个产品
	public String queryOne() throws Exception {
		setProduct(productService.queryProduct(productid));
		return SUCCESS;
	}

	// 删除产品
	public String deleteProduct() throws Exception {
		productService.deleteProduct(productid);
		return SUCCESS;
	}

	

	public String getName() {
		return name;
	}

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

	// 产品id
	public String getProductid() {
		return productid;
	}

	public void setProductid(String productid) {
		this.productid = productid;
	}

	public Page getPage() {
		return page;
	}

	public void setPage(Page page) {
		this.page = page;
	}

	// 产品

	public Product getProduct() {
		return product;
	}

	public void setProduct(Product product) {
		this.product = product;
	}

	public int getEachpagecount() {
		return eachpagecount;
	}

	// 每页多少个
	public void setEachpagecount(int eachpagecount) {
		page.setEachpagecount(eachpagecount);
		this.eachpagecount = eachpagecount;
	}

	public int getPagenum() {
		return pagenum;
	}

	// 第几页
	public void setPagenum(int pagenum) {
		page.setPagenum(pagenum);
		this.pagenum = pagenum;
	}

}

jsp页面层:

queryPage_product.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
	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>My JSP 'showAllProduct.jsp' starting page</title>
		<script type="text/javascript" language="javascript">
		function loadXMLDoc(productid){
				//alert("hello");
				var xmlhttp;
				if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
			 		//alert("支持window");
			 		xmlhttp=new XMLHttpRequest();
			 	}
				else{// code for IE6, IE5
			  		//alert("支持ActiveXObject");
			 		 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
			  	}
				xmlhttp.onreadystatechange=function(){
			  //alert("xmlhttp对象 为"+xmlhttp);
			  	if (xmlhttp.readyState==4 && xmlhttp.status==200){
			  		 document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
			 			  }
				 }
				xmlhttp.open("GET","<%=basePath%>productAction_queryOne?productid="+productid,true);
				xmlhttp.send();
		}
		//每页显示多少个数据 
		function forward1(){
			var eachpagecount=document.getElementById("eachpagecount").value;
			var pagenum=document.getElementById("pagenum").value;
			var name=document.getElementById("name").value;
			alert("eachpagecount:"+eachpagecount+"  pagenum"+pagenum+"  name"+name);
		location.href="productAction_queryPage?eachpagecount="+eachpagecount+"&pagenum="+pagenum+"&name="+name;
		}

		</script>
</head>
	<%@ include file="../head.jsp"%>
	<body>


	<s:form action="productAction_queryPage" method="post">
	<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle>
            <img src="images/Forum_nav.gif" align="absmiddle">
               <a href="PageQueryProductServlet">电子商务门户</a> →
			<img border="0" src="images/dog.gif" width="19" height="18">
			欢迎光临!<font color="red">${user.username}</font>
        </td>
   </tr>
</table>
<br/>
<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle align=right>
	                 商品名称:<input type="text" id="name" value="${name}"/>     
	      <input type="button" value="搜索" οnclick="forward1()"/>
	    </td>
    </tr>
</table>
<br/>
	
	<br/>
		<s:property value="" />
	
			<table cellpadding="3" cellspacing="1" class="tableborder1"
				align="center">
				<tr>
					<td background="images/bg2.gif" align="center" valign="middle">
						<font color="white"><b>序号</b> </font>
					</td>
					<td background="images/bg2.gif" align="center" valign="middle">
						<font color="white"><b>商品名称</b> </font>
					</td>
					<td background="images/bg2.gif" align="center" valign="middle">
						<font color="white"><b>价格</b> </font>
					</td>
					<td background="images/bg2.gif" align="center" valign="middle">
						<font color="white"><b>操作</b> </font>
					</td>
				</tr>

				<s:iterator var="p" value="pList" status="vs">

					<tr>
						<td class="tablebody2" align="center" valign="middle">
							<s:property value='#vs.count' />
						</td>
						<td class="tablebody1" align="center" valign="middle">
							<a href="productAction_queryOne?productid=${p.productid}">${p.name }</a>
						</td>
						<td class="tablebody2" align="center" valign="middle">
							<s:property value="baseprice" />
						</td>
						<td class="tablebody1" align="center" valign="middle">
							<a href="CartAction_buyProduct?productid=${p.productid}"><img src="images/car_new.gif" border="0" /> </a>
						</td>
					</tr>
					</s:iterator>
			</table>
		<br/>
		<table cellpadding="3" cellspacing="1" class="tableBorder2" align="center">
	<tr>
		<td align="center">
			共有${page.recordcount }条记录 
			共显示${page.pagecount }页 
			每页显示<input type="text" size="2" name="page.eachpagecount"  value="${page.eachpagecount }" id="eachpagecount" οnblur="forward1()"/>条记录 
			<c:choose>
				<c:when test="${page.pagenum==1}">
					首页
					上一页
				</c:when>
				<c:otherwise>
					<a href="productAction_queryPage?pagenum=1&eachpagecount=${page.eachpagecount }&name=${name}">首页</a>
					<a href="productAction_queryPage?pagenum=${page.pagenum-1 }&eachpagecount=${page.eachpagecount}&name=${name}">上一页</a>
				</c:otherwise>
			</c:choose>
			<c:choose>
				<c:when test="${page.pagenum==page.pagecount}">
					下一页
					尾页
				</c:when>
				<c:otherwise>
					<a href="productAction_queryPage?pagenum=${page.pagenum+1 }&eachpagecount=${page.eachpagecount}&name=${name}">下一页</a>
					<a href="productAction_queryPage?pagenum=${page.pagecount }&eachpagecount=${page.eachpagecount }&name=${name}">尾页</a>
				</c:otherwise>
			</c:choose>
			跳转到第<input type="text" size="2" value="${page.pagenum }" id="pagenum" οnblur="forward1()"/>页
		</td>
	</tr>
</table>
<br/>

			<button type="button" οnclick="forward1()">请求数据</button>
			<div id="myDiv"></div>
		</s:form>
		<%@ include file="../foot.jsp"%>

	</body>
</html>

queryOne_product.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">
<%@ include file="../head.jsp"%>
<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle>
            <img src="images/Forum_nav.gif" align="absmiddle">
               <a href="PageQueryProductServlet">电子商务门户</a> →
				商品明细
        </td>
   </tr>
</table>
<br/>
<form action="loginAction.do" method=post name="login">
	<table cellpadding=3 cellspacing=1 align=center class=tableborder1>
		<tr>
			<td valign=middle align=center height=25 background="images/bg2.gif" colspan="2"><p><font color="white"><b>${product.name }</b></font></td>
		</tr>
		<tr>
			<td class=tablebody1 valign=middle align=center width="20%">【作  者 】</td>
			<td class=tablebody1 valign=middle width="80%">${product.writer }</td>
		</tr>
		<tr>
			<td class=tablebody1 valign=middle align=center width="20%">【价  格 】</td>
			<td class=tablebody1 valign=middle width="80%">${product.baseprice }</td>
		</tr>
		<tr>
			<td class=tablebody1 valign=middle align=center width="">【出 版 社】</td>
			<td class=tablebody1 valign=middle width="">${product.publish }</td>
		</tr>
		<tr>
			<td class=tablebody1 valign=middle align=center width="">【 页  数】</td>
			<td class=tablebody1 valign=middle width="">${product.pages }</td>
		</tr>
		<tr>
			<td class=tablebody1 align=center width="" valign="middle">【 简  介】</td>
			<td class=tablebody1 valign=middle width="">${product.description }</td>
		</tr>
		<tr>
			<td class=tablebody1 valign=middle align=center width="">【 封  面】</td>
			<td class=tablebody1 valign=middle width=""><img border="0" src="${product.images }" width="127" height="180"></td>
		</tr>
		<tr>
			<td class=tablebody2 valign=middle align=center colspan="2">
				<a href="#">
					<img border="0" src="images/buycar.gif" width="92" height="21">
				</a> 
			</td>
		</tr>
	</table>
</form>
<%@ include file="../foot.jsp"%>


购物车模块

vo层:

package buaa.product.vo;

public class Cart {
	private String productid;// id
	private String productname;// 名称
	private Double baseprice;// 价格
	private Integer count;// 个数据
	private Double amount;// 钱的数额

	public String getProductid() {
		return productid;
	}

	public void setProductid(String productid) {
		this.productid = productid;
	}

	public String getProductname() {
		return productname;
	}

	public void setProductname(String productname) {
		this.productname = productname;
	}

	public Double getBaseprice() {
		return baseprice;
	}

	public void setBaseprice(Double baseprice) {
		this.baseprice = baseprice;
	}

	public Integer getCount() {
		return count;
	}

	public void setCount(Integer count) {
		this.count = count;
	}

	public Double getAmount() {
		return amount;
	}

	public void setAmount(Double amount) {
		this.amount = amount;
	}

}

action层:

package buaa.product.action;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import buaa.product.service.ProductService;
import buaa.product.service.impl.ProductServiceImpl;
import buaa.product.vo.Cart;
import buaa.product.vo.Product;

import com.opensymphony.xwork2.ActionSupport;

public class CartAction extends ActionSupport {
	private ProductService productService = new ProductServiceImpl();
	private String productid;// 产品id
	private Integer count;// 第几个数
	private List<Cart> cartList = null;// 购物车所有东西
	private Integer place;

	public String query() throws Exception {
		setCartList((List<Cart>) createRequest().getSession().getAttribute(
				"cartList"));
		return SUCCESS;
	}

	// 把产品加入购物车
	public String buyProduct() throws Exception {
		// 用记是否登入
		if (!isLogin()) {
			createRequest().setAttribute("message", "请登入");
			return "login";// 进入登入页面
		} else {
			List<Cart> cartList = (List<Cart>) isSessionHasCart(createRequest()
					.getSession());// 得到购物车
			// 点击购买,用带过来 的productid查询对应的产品
			Cart cart = newCart(productid);
			addCart(cart, cartList);// 加入购物车
		}
		// 把总价钱放入session
		createRequest().getSession().setAttribute("sum", cartSum(cartList));
		// 把购物车放在session里
		createRequest().getSession().setAttribute("cartList", cartList);
		return SUCCESS;
	}

	// 删除订单中的产品
	public String changeCountProduct() throws Exception {
		cartList = isSessionHasCart(createRequest().getSession());
		if (count != null && place != null) {// 把数据修改
			System.out.println("1");
			// 得到那个产品
			Cart cart = cartList.get(place - 1);
			cart.setCount(count);
			cart.setAmount(cart.getCount() * cart.getBaseprice());
			cartList.set(place - 1, cart);

		} else if (count != null && place == null) {// 如果删除第几个数不为空
			System.out.println("2");
			cartList.remove(count - 1);
		} else {
			System.out.println("3");
			cartList.clear();
			System.out.println("cartList是什么" + cartList);
		}

		// 当购物车大小 为0时
		if (cartList.size() == 0) {
			System.out.println("4");
			createRequest().getSession().removeAttribute("cartList");
			createRequest().getSession().removeAttribute("sum");
		}

		// 当购物车大小 大于0时
		if (cartList.size() > 0) {
			System.out.println("5");
			// 当购物车不 为0时
			createRequest().getSession().setAttribute("cartList", cartList);
			// 重新计算 sum cartSum(List<Cart> listCart)
			createRequest().getSession().setAttribute("sum", cartSum(cartList));
		}
		return SUCCESS;
	}

	// preOrderSubmit
	public String preOrderSubmit() throws Exception {
		return "preOrderSubmit";
	}

	// 根据点击购买时带过来的id查找product并创建Cart
	public Cart newCart(String productid) {
		Product p = productService.queryProduct(productid);
		Cart cart = new Cart();
		cart.setBaseprice(p.getBaseprice());
		cart.setProductid(productid);
		cart.setProductname(p.getName());
		cart.setCount(1);
		cart.setAmount(cart.getBaseprice() * cart.getCount());
		return cart;
	}

	// 产生request
	public HttpServletRequest createRequest() {
		HttpServletRequest request = ServletActionContext.getRequest();
		return request;
	}

	// 用户是否登入
	public boolean isLogin() {
		if (createRequest().getSession().getAttribute("user") != null) {
			return true;// 登入了
		}
		return false;// 没有登入
	}

	// 在session中是否可以取得购物车
	public List<Cart> isSessionHasCart(HttpSession session) {
		// 如果用户没有购物车
		if (createRequest().getSession().getAttribute("cartList") == null) {
			cartList = new ArrayList<Cart>();
		} else {
			cartList = (List<Cart>) createRequest().getSession().getAttribute(
					"cartList");
		}
		return cartList;
	}

	// 购物车是否有相同的产品
	public boolean isSameCart(Cart c, List<Cart> cartList) {
		for (int i = 0; i < cartList.size(); i++) {
			if (cartList.get(i).getProductid().equals(c.getProductid())) {
				return true;
			}
		}
		return false;
	}

	// 加入购物车
	public List<Cart> addCart(Cart c, List<Cart> cartList) {

		// 是否含有相同产品 ,若true为有
		if (cartList != null && cartList.size() > 0 && isSameCart(c, cartList)) {
			for (int i = 0; i < cartList.size(); i++) {
				if (c.getProductid().equals(cartList.get(i).getProductid())) {
					cartList.get(i).setCount(cartList.get(i).getCount() + 1);// 把个数加1
					cartList.get(i).setAmount(
							cartList.get(i).getBaseprice()
									* cartList.get(i).getCount());// 把这个产品的总价算好
				}
			}
		} else {
			cartList.add(c);
		}
		return cartList;
	}

	// 算总额
	public double cartSum(List<Cart> listCart) {
		double sum = 0;
		for (int i = 0; i < listCart.size(); i++) {
			sum = sum + listCart.get(i).getAmount();
		}
		return sum;
	}

	public String getProductid() {
		return productid;
	}

	public void setProductid(String productid) {
		this.productid = productid;
	}

	public Integer getCount() {
		return count;
	}

	public void setCount(Integer count) {
		this.count = count;
	}

	public List<Cart> getCartList() {
		return cartList;
	}

	public void setCartList(List<Cart> cartList) {
		this.cartList = cartList;
	}

	public Integer getPlace() {
		return place;
	}

	public void setPlace(Integer place) {
		this.place = place;
	}

}

jsp层

cart.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath %>">
<script type="text/javascript">
	function goOn() {
		location.href = "productAction_queryPage";
	}
	
	function clearCart() {
		location.href = "CartAction_changeCountProduct";
	}
	
	function removeCart(count) {
		location.href = "CartAction_changeCountProduct?count=" + count;
	}
	
	function updateCart(v) {
		//v 在购物车的第几位
		var count = document.getElementById(v).value;//把这个产品的数量直接修改为这个数
		alert(count);
		if(count=="" || count<=0 || isNaN(count)) {
			alert("请输入正确的数值");
		}else {
			location.href = "CartAction_changeCountProduct?count=" + count + "&place=" + v;
		}
		
	}
	
	function preOrderSubmit() {
		location.href = "CartAction_preOrderSubmit";
	}
</script>
</head>
<body>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%@ include file="../head.jsp"%>
<input type="hidden" id="pagecount" value="${page.pagecount}"/>
<input type="hidden" id="recordcount" value="${page.recordcount}"/>
<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle>
            <img src="images/Forum_nav.gif" >
               <a href="PageQueryProductServlet">电子商务门户</a> →
			<img border="0" src="images/dog.gif" width="19" height="18">
			购物清单
        </td>
   </tr>
</table>
<br/>
<form method="post" action="updateAction.do" name="f1">
	<table cellpadding=3 cellspacing=1 align=center class=tableborder1>
			<tr>
				<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>序号</b></font></td>
				<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>产品名称</b></font></td>
				<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>价格</b></font></td>
				<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>数量</b></font></td>
				<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>合计</b></font></td>
				<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>操作</b></font></td>
			</tr>
	                <s:iterator value="cartList" id="c" status="vs">
				<tr>
					<td class=tablebody2 valign=middle align=center width="">${vs.count}</td>
					<td class=tablebody1 valign=middle width="">  <a href="ViewProductServlet?productid=${c.productid}">${c.productname}</a></td>
					<td class=tablebody2 valign=middle align=center width="">${c.baseprice}</td>
					<td class=tablebody1 valign=middle align=center width="">
						<input type="text" name="num" value="${c.count}" size="4" id="${vs.count}"/>
					</td>
					<td class=tablebody2 valign=middle align=left width="">¥${c.amount}</td>
					<td class=tablebody1 valign=middle align=center width="">
						<input type="button" value="取消" οnclick="removeCart('${vs.count}')"> 
						<input type="button" value="保存修改" οnclick="updateCart('${vs.count}')">
					</td>
			</tr>
			</s:iterator>
	        <c:if test="${!empty sum}">
	        	<tr>
					<td class=tablebody1 valign=middle align=center colspan="4"> </td>
					<td class=tablebody1 valign=middle align=left width=""><font color="red"><b>¥${sum}</b></font></td>
					<td class=tablebody1 valign=middle align=center width=""> </td>
				</tr>
				<tr>
					<td class=tablebody2 valign=middle align=center colspan="6">
						<input type="button" value="提交订单" οnclick="preOrderSubmit()"> 
						<input type="button" value="继续购物" οnclick="goOn()"> 
						<input type="button" value="清空购物车" οnclick="clearCart()">
					</td>
				</tr>
	        </c:if>
			
	</table>
</form>
<br>
<%@ include file="../foot.jsp"%>
</body>
</html>


订单提交查询模块

vo层:

package buaa.product.vo;

import java.sql.Date;
import java.sql.Timestamp;

//下订单
public class Orders {
	private String orderid;//
	private double cost;// 应付款
	private String paytype;// 付款类型
	private String userid;// 用户ID
	private Timestamp time;// 下单时间

	public String getOrderid() {
		return orderid;
	}

	public void setOrderid(String orderid) {
		this.orderid = orderid;
	}

	public double getCost() {
		return cost;
	}

	public void setCost(double cost) {
		this.cost = cost;
	}

	public String getPaytype() {
		return paytype;
	}

	public void setPaytype(String paytype) {
		this.paytype = paytype;
	}

	public String getUserid() {
		return userid;
	}

	public void setUserid(String userid) {
		this.userid = userid;
	}

	public Timestamp getTime() {
		return time;
	}

	public void setTime(Timestamp time) {
		this.time = time;
	}

}

package buaa.product.vo;
//订单详细
public class OrderDetail {
	private String detailid;//
	private String orderid;;// 订单号
	private String productid;// 产品ID
	private String productname;// 产品名称
	private double baseprice;// 价钱
	private int num;// 个数

	public String getDetailid() {
		return detailid;
	}

	public void setDetailid(String detailid) {
		this.detailid = detailid;
	}

	public String getOrderid() {
		return orderid;
	}

	public void setOrderid(String orderid) {
		this.orderid = orderid;
	}

	public String getProductid() {
		return productid;
	}

	public void setProductid(String productid) {
		this.productid = productid;
	}

	public String getProductname() {
		return productname;
	}

	public void setProductname(String productname) {
		this.productname = productname;
	}

	public double getBaseprice() {
		return baseprice;
	}

	public void setBaseprice(double baseprice) {
		this.baseprice = baseprice;
	}

	public int getNum() {
		return num;
	}

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

	@Override
	public String toString() {
		return "OrderDetail [baseprice=" + baseprice + ", detailid=" + detailid
				+ ", num=" + num + ", orderid=" + orderid + ", productid="
				+ productid + ", productname=" + productname + "]";
	}

}

dao层:

package buaa.product.dao;

import java.sql.SQLException;
import java.util.List;

import buaa.product.vo.OrderDetail;
import buaa.product.vo.Orders;

public interface OrdersDao {
	// 删除
	public void delOrders(String orderid) throws SQLException;

	// 增加
	public void insertOrders(Orders orders) throws SQLException;

	// 查找
	public List<Orders> queryOrdersByUserid(String userid) throws SQLException;

}

package buaa.product.dao;

import java.sql.SQLException;
import java.util.List;

import buaa.product.vo.OrderDetail;

public interface OrderDetailDao {
	// 删除
	public void deleteDetail(String orderid) throws SQLException;

	// 增加
	public void insertOrderDetail(OrderDetail orderDetail) throws SQLException;

	// 查询
	public List<OrderDetail> queryDetailByOrderid(String orderid)
			throws SQLException;
}

package buaa.product.dao.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import buaa.product.dao.OrdersDao;
import buaa.product.vo.Orders;
import buaa.util.DButil;

public class OrdersDaoImpl implements OrdersDao {
	private ResultSet rs = null;
	private String sql = null;

	// 删除
	public void delOrders(String orderid) throws SQLException {
		sql = "delete from orders where orderid=?";
		List<Object> param = new ArrayList<Object>();
		param.add(orderid);
		DButil.update(sql, param);
	}

	// 增加
	public void insertOrders(Orders orders) throws SQLException {
		sql = "insert into orders values(?,?,?,?,?)";
		List<Object> param = new ArrayList<Object>();
		param.add(orders.getOrderid());
		param.add(orders.getCost());
		param.add(orders.getPaytype());
		param.add(orders.getUserid());
		param.add(orders.getTime());
		DButil.update(sql, param);
	}

	// 查找
	public List<Orders> queryOrdersByUserid(String userid) throws SQLException {
		sql = "select * from orders where userid=?";
		List<Object> param = new ArrayList<Object>();
		param.add(userid);
		rs = DButil.query(sql, param);
		List<Orders> oList = new ArrayList<Orders>();
		while (rs.next()) {
			Orders o = new Orders();
			o.setOrderid(rs.getString("orderid"));
			o.setCost(rs.getDouble("cost"));
			o.setPaytype(rs.getString("paytype"));
			o.setUserid(rs.getString("userid"));
			o.setTime(rs.getTimestamp("time"));
			oList.add(o);
		}
		return oList;
	}
}

service层:

package buaa.product.service;

import java.util.List;

import buaa.product.vo.Cart;
import buaa.product.vo.Orders;

public interface OrdersService {
	// 增加
	public void insertOrdersAndDetail(String userid, double cost,
			String payType, List<Cart> cartList);

	// 查找
	public List<Orders> queryOrdersByUserid(String userid);

	// 删除
	public void delOrderAndDetail(String orderid);
}

package buaa.product.service;

import java.util.List;

import buaa.product.vo.OrderDetail;

public interface OrderDetailService {
	// 查询
	public List<OrderDetail> queryDetailByOrderid(String orderid);
}

package buaa.product.service.impl;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import buaa.product.dao.OrderDetailDao;
import buaa.product.dao.OrdersDao;
import buaa.product.dao.impl.OrderDetaiImpl;
import buaa.product.dao.impl.OrdersDaoImpl;
import buaa.product.service.OrdersService;
import buaa.product.vo.Cart;
import buaa.product.vo.OrderDetail;
import buaa.product.vo.Orders;
import buaa.util.DButil;

public class OrdersServiceImpl implements OrdersService {
	private Connection conn = null;
	private OrdersDao ordersDao = new OrdersDaoImpl();
	private OrderDetailDao orderDetailDao = new OrderDetaiImpl();

	public void insertOrdersAndDetail(String userid, double cost,
			String payType, List<Cart> cartList) {
		// 打开连接
		conn = DButil.openConnection();
		// 不自动提交
		try {
			conn.setAutoCommit(false);

			Orders o = new Orders();
			o.setOrderid(getPrimaryKey());
			o.setCost(cost);
			o.setPaytype(payType);
			o.setUserid(userid);
			o.setTime(new Timestamp(new Date().getTime()));
			ordersDao.insertOrders(o);

			for (int i = 0; i < cartList.size(); i++) {
				OrderDetail detail = new OrderDetail();
				detail.setDetailid(getPrimaryKey());
				detail.setOrderid(o.getOrderid());
				detail.setProductid(cartList.get(i).getProductid());
				detail.setProductname(cartList.get(i).getProductname());
				detail.setBaseprice(cartList.get(i).getBaseprice());
				detail.setNum(cartList.get(i).getCount());
				orderDetailDao.insertOrderDetail(detail);
			}
			conn.commit();
		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {

				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			DButil.close();
		}

	}

	// 查找
	public List<Orders> queryOrdersByUserid(String userid) {
		DButil.openConnection();
		List<Orders> orderList = new ArrayList<Orders>();
		try {
			orderList = ordersDao.queryOrdersByUserid(userid);
		} catch (SQLException e) {

			e.printStackTrace();
		} finally {
			DButil.close();
		}
		return orderList;
	}

	// 删除
	public void delOrderAndDetail(String orderid) {
		conn = DButil.openConnection();
		try {
			conn.setAutoCommit(false);
			orderDetailDao.deleteDetail(orderid);
			ordersDao.delOrders(orderid);
			conn.commit();
		} catch (SQLException e) {
			try {
				conn.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
		} finally {
			DButil.close();
		}

	}

	public static String getPrimaryKey() {
		UUID uuid = UUID.randomUUID();
		return uuid.toString();
	}
}

package buaa.product.service.impl;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import buaa.product.dao.OrderDetailDao;
import buaa.product.dao.impl.OrderDetaiImpl;
import buaa.product.service.OrderDetailService;
import buaa.product.vo.OrderDetail;
import buaa.util.DButil;

public class OrderDetailServiceImpl implements OrderDetailService {
	private OrderDetailDao OrderDetailDao = new OrderDetaiImpl();

	// 查询
	public List<OrderDetail> queryDetailByOrderid(String orderid) {
		List<OrderDetail> detailList = new ArrayList<OrderDetail>();
		DButil.openConnection();
		try {
			detailList = OrderDetailDao.queryDetailByOrderid(orderid);
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			DButil.close();
		}
		return detailList;
	}
}



action 层:

package buaa.product.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import buaa.product.service.OrdersService;
import buaa.product.service.impl.OrdersServiceImpl;
import buaa.product.vo.Cart;
import buaa.product.vo.Orders;
import buaa.product.vo.User;

import com.opensymphony.xwork2.ActionSupport;

public class OrderAction extends ActionSupport {
	private String orderid;//订单id
	private OrdersService ordersService = new OrdersServiceImpl();
	private List<Cart> cartList = null;
	private String payType;
	private User user;
	private Double sum;
	private List<Orders> orderList = null;

	@Override
	public String execute() throws Exception {

		return super.execute();
	}
	// 删除订单
	public String delete() throws Exception {
		user = (User) getSession().getAttribute("user");
		 ordersService.delOrderAndDetail(orderid);//删除 
		return "delete";
	}

	// 查询订单
	public String query() throws Exception {
		user = (User) getSession().getAttribute("user");
		orderList = ordersService.queryOrdersByUserid(user.getUserid());
		setOrderList(orderList);
		return "view";
	}

	// 提交订单
	public String inser() throws Exception {
		sum = (Double) getSession().getAttribute("sum");
		user = (User) getSession().getAttribute("user");
		cartList = (List<Cart>) getSession().getAttribute("cartList");
		ordersService.insertOrdersAndDetail(user.getUserid(), sum, payType,
				cartList);
		// 删除
		getSession().removeAttribute("sum");
		getSession().removeAttribute("cartList");
		return SUCCESS;
	}

	public HttpSession getSession() {
		HttpServletRequest request = ServletActionContext.getRequest();
		return request.getSession();
	}

	public List<Cart> getCartList() {
		return cartList;
	}

	public void setCartList(List<Cart> cartList) {
		this.cartList = cartList;
	}

	public String getPayType() {
		return payType;
	}

	public void setPayType(String payType) {
		this.payType = payType;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public Double getSum() {
		return sum;
	}

	public void setSum(Double sum) {
		this.sum = sum;
	}

	public List<Orders> getOrderList() {
		return orderList;
	}

	public void setOrderList(List<Orders> orderList) {
		this.orderList = orderList;
	}
	public String getOrderid() {
		return orderid;
	}
	public void setOrderid(String orderid) {
		this.orderid = orderid;
	}
	

}

package buaa.product.action;

import java.util.List;

import buaa.product.service.OrderDetailService;
import buaa.product.service.impl.OrderDetailServiceImpl;
import buaa.product.vo.OrderDetail;

import com.opensymphony.xwork2.ActionSupport;

public class OrderDetailAction extends ActionSupport {
	private String orderid;
	private List<OrderDetail> detailList=null;
	private OrderDetailService orderDetailService = new OrderDetailServiceImpl();

	@Override
	public String execute() throws Exception {

		return super.execute();
	}

	public String query() throws Exception {
		System.out.println("orderid为" + orderid);
		setDetailList(orderDetailService.queryDetailByOrderid(orderid));
		setDetailList(detailList);
		System.out.println(detailList);
		return "query";
	}

	public String getOrderid() {
		return orderid;
	}

	public void setOrderid(String orderid) {
		this.orderid = orderid;
	}

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

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

}
jsp层:
preOrderSubmit.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<%@ include file="../head.jsp"%>
<script type="text/javascript">
	function modifyUser() {
		location.href = "PreUpdateUserServlet";
	}
	
	function modifyCart() {
		location.href = "ShowCartServlet";
	}
	
	function orderSubmit(){
		var order = document.getElementById("order");
		order.submit();
	}
</script>
</head>
<body>
<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle>
            <img src="images/Forum_nav.gif" align="absmiddle">
               <a href="PageQueryProductServlet">电子商务门户</a> →
			<img border="0" src="images/dog.gif" width="19" height="18">
			确认订单
        </td>
   </tr>
</table>
<br/>
<form id="order" method="post" action="OrderAction_inser"/>
	<table cellpadding="3" cellspacing="1" align="center" class="tableborder1" id="table1">
		<tr>
			<td valign="middle" colspan="2" align="center" height="25" background="images/bg2.gif">
				<font color="white"><b>用户信息</b></font>
				<input type="button" value="修改" οnclick="modifyUser()">
				</td>
		</tr>
		<tr>
			<td width="40%" class="tablebody2" align="right"><b>用户名</b>:</td>
			<td width="60%" class="tablebody1">${user.username}</td>
		</tr>
		<tr>
			<td class="tablebody2" align="right"><b>联系地址</b>:</td>
			<td class="tablebody1">${user.street1}</td>
		</tr>
		<tr>
			<td class="tablebody2" align="right"><b>邮编</b>:</td>
			<td class="tablebody1">${user.zip}</td>
		</tr>
		<tr>
			<td class="tablebody2" align="right"><b>家庭电话</b>:</td>
			<td class="tablebody1">${user.homephone}</td>
		</tr>
		<tr>
			<td class="tablebody2" align="right"><b>办公室电话</b>:</td>
			<td class="tablebody1">${user.officephone}</td>
		</tr>
		<tr>
			<td class="tablebody2" align="right"><b>手机</b>:</td>
			<td class="tablebody1">${user.cellphone}</td>
		</tr>
		<tr>
			<td class="tablebody2" align="right"><b>Email地址</b>:</td>
			<td class="tablebody1">${user.email}</td>
		</tr>
	</table>
<br>
	<table cellpadding="3" cellspacing="1" align="center" class="tableborder1" id="table2">
		<tr>
			<td valign="middle" colspan="2" align="center" height="25" background="images/bg2.gif">
			<font color="white"><b>付款方式</b></font></td>
		</tr>
		<tr>
			<td width="40%" class="tablebody2" align="right"> </td>
			<td width="60%" class="tablebody1">
               <select name="payType">
                 
                 	<option value="邮局汇款">邮局汇款 </option>
               	
                 	<option value="货到付款">货到付款</option>
               	
                 	<option value="银行转帐">银行转帐</option>
               	
               </select>
            </td>
		</tr>
	</table>
	<br/>
	<table cellpadding=3 cellspacing=1 align=center class=tableborder1 id="table3">
		<tr>
			<td valign=middle align=center height=25 background="images/bg2.gif" colspan="5">
				<font color="white"><b>商品购物清单</b>
				</font><input type="button" value="修改" οnclick="modifyCart()">
			</td>
		</tr>
        <c:forEach items="${cartList}" var="c" varStatus="vs">
        	<tr>
				<td class=tablebody2 valign=middle align=center width="">${vs.count}</td>
				<td class=tablebody1 valign=middle width="">
					<a href="ViewProductServlet?productid=${c.productid}" target="_blank">${c.productname}</a>
				</td>
				<td class=tablebody2 valign=middle align=center width="">价格:${c.baseprice}</td>
				<td class=tablebody1 valign=middle align=center width="">数量:${c.count}</td>
				<td class=tablebody2 valign=middle align=left width="">小计:¥${c.amount}</td>
			</tr>
        </c:forEach>
		<tr>
			<td class=tablebody1 valign=middle align=center colspan="4"> </td>
			<td class=tablebody1 valign=middle align=left width="">合计:<font color="red"><b>¥${sum}</b></font></td>
		</tr>
	</table>
		        <p align="center">请认真检查以上订单信息,确认无误后,点击 → <a href="javascript:orderSubmit();" style="cursor:hand"><img src="images/submit.gif"></a>
</form>
<%@ include file="../foot.jsp"%>
</body></html>

viewOrder.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html><head>
<script type="text/javascript">
	function delOrder(orderid) {
		location.href = "OrderAction_delete?orderid=" + orderid;
	}	
	
	function viewDetail(orderid) {
		location.href = "OrderDetailAction_query?orderid=" + orderid;
	}
</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
</head><body>
<%@ include file="../head.jsp"%>
<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle>
            <img src="images/Forum_nav.gif" align="absmiddle">
               <a href="PageQueryProductServlet">电子商务门户</a> →
			<img border="0" src="images/dog.gif" width="19" height="18">
			订单列表
        </td>
   </tr>
</table>
<br/>
		

<table cellpadding=3 cellspacing=1 align=center class=tableborder1>
	<tr>
		<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>序号</b></font></td>
		<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>订单编号</b></font></td>
		<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>订单金额</b></font></td>
		<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>付款方式</b></font></td>
		<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>操作</b></font></td>
	</tr>
	<c:forEach items="${orderList}" var="o" varStatus="vs">
		<tr>
			<td class=tablebody2 valign=middle align=center width="">${vs.count}</td>
			<td class=tablebody1 valign=middle width="">${o.orderid}</td>
			<td class=tablebody2 valign=middle align=left width="">¥${o.cost}</td>
			<td class=tablebody1 valign=middle align=left width="">${o.paytype} </td>
			<td class=tablebody2 valign=middle align=center width="">
				<input type="button" value="删除" οnclick="delOrder('${o.orderid}')">
				<input type="button" value="明细" οnclick="viewDetail('${o.orderid}')">
			</td>
		</tr>   
	</c:forEach>
	          
</table>
<br/>
 <%@ include file="../foot.jsp"%>
 </body></html>
detailList.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html><head></head><body>
<%@ include file="../head.jsp"%>
<table cellspacing=1 cellpadding=3 align=center class=tableBorder2>
	<tr>
		<td height=25 valign=middle>
            <img src="images/Forum_nav.gif" align="absmiddle">
               <a href="PageQueryProductServlet">电子商务门户</a> →
			<img border="0" src="images/dog.gif" width="19" height="18">
			订单明细
        </td>
   </tr>
</table>
<br/>
		

<table cellpadding=3 cellspacing=1 align=center class=tableborder1>
	<tr>
		<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>序号</b></font></td>
		<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>商品名称</b></font></td>
		<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>单价</b></font></td>
		<td valign=middle align=center height=25 background="images/bg2.gif" width=""><font color="white"><b>数量</b></font></td>
	</tr>
	<s:iterator value="detailList" var="d"  status="vs">
		<tr>
			<td class=tablebody2 valign=middle align=center width="">${vs.count}</td>
			<td class=tablebody1 valign=middle width="">${d.productname}</td>
			<td class=tablebody2 valign=middle align=left width="">¥${d.baseprice}</td>
			<td class=tablebody1 valign=middle align=left width="">${d.num} </td>
		</tr> 
	</s:iterator>
	<tr>
		<td colspan="4" align="center" class="tablebody1">
			<input type="button" value="返回" οnclick="javascript:history.go(-1)"/>
		</td>		
	</tr>
</table>
<br/>
 <%@ include file="../foot.jsp"%>
 </body></html>

浏览器页面展示:












  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值