需求:用户管理( 注册 登入,退出,修改),查看产品展示(用分页形式),查看产品详细,加入购物车和查询,提交订单及查询
页面:已提供静态页面(用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>
浏览器页面展示: