网上书城项目
Posted 蒙小米
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网上书城项目相关的知识,希望对你有一定的参考价值。
实习就要结束了,最终要上交的是网上书城项目和一份文档。接下来简要介绍一下项目。
项目是根据三层架构来写,数据访问层(DAO层)、系统业务逻辑控制处理层(servlet层)、和界面层(jsp)。
首先在DAO层构造好SQL语句,对数据库进行操作,在servlet层调用Dao层相关方法进行相应的逻辑处理,JSP负责构造界面以及显示数据。
下面贴出代码,仅供参考,一些功能的具体实现在功能说明时有所介绍,只贴一些比较重要的部分的代码,大家主要重在理解。
此次项目,我感觉比较困难的部分是 加入购物车 部分和订单处理这部分。
加入购物车部分,一定要对集合操作非常熟悉才可以比较好的处理,另外还有合理的采用session,另外比较好的是构造一个BookShopping实体来帮助我们处理购物车部分的计算价格问题;
订单处理部分,生成订单,就是根据购物车里的有关书的一些信息,将这些信息插入order表中,会自动生成一个订单编号,因为当前购物车订单号相同;
生成订单,由book表、order表拼凑成items表;
生成历史订单,是根据当前登录用户在Order表中查找到此用户所有的订单号,再根据订单号在items表中查到所有的订单详情。
注册功能
package com.mm.Dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.mm.Dao.UserDao; import com.mm.Utils.JDBCUtils; import com.mm.bean.User; //Dao层 数据库接口层 public class UserDaoImpl implements UserDao { public boolean addUser(User user) { // TODO Auto-generated method stub Connection con = null; PreparedStatement ps = null; ResultSet rs = null; try { String sql = "insert into user values(?,?,?,?)"; con = JDBCUtils.getconnection(); ps = con.prepareStatement(sql); ps.setString(1, user.getUsername()); ps.setString(2, user.getPassword()); ps.setString(3, user.getEmail()); ps.setString(4, user.getAddress()); int count = ps.executeUpdate(); System.out.print("受影响的行数是:"+count); return true; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JDBCUtils.release(rs, ps, con); } return false; } public User findUser(String name, String password) { // TODO Auto-generated method stub Connection con = null; PreparedStatement ps = null; ResultSet rs = null; User user = new User(); String sql = "select * from user where username = ? and password = ?"; try { con = JDBCUtils.getconnection(); ps = con.prepareStatement(sql); ps.setString(1, name); ps.setString(2, password); rs = ps.executeQuery(); while(rs.next()){ try { user.setUsername(rs.getString("username")); user.setPassword(rs.getString("password")); user.setEmail(rs.getString("email")); user.setAddress(rs.getString("address")); return user; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JDBCUtils.release(rs, ps, con); } } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ JDBCUtils.release(rs, ps, con); } return null; } }
1
//这层可以不要,将它归并到servlet里。
package com.mm.service.impl; 2 3 import com.mm.Dao.UserDao; 4 import com.mm.Dao.impl.UserDaoImpl; 5 import com.mm.bean.User; 6 import com.mm.service.UserService; 7 8 public class UserServiceImpl implements UserService { 9 10 public User login(String username, String password) { 11 // TODO Auto-generated method stub 12 UserDao dao = new UserDaoImpl(); 13 User user = dao.findUser(username, password); 14 return user; 15 } 16 17 public boolean register(User user) { 18 // TODO Auto-generated method stub 19 UserDao dao = new UserDaoImpl(); 20 if(dao.addUser(user)){ 21 return true; 22 } 23 return false; 24 25 } 26 27 }
1 package com.mm.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.util.HashMap; 6 import java.util.Map; 7 8 import javax.servlet.ServletException; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 13 import com.mm.Dao.UserDao; 14 import com.mm.Dao.impl.UserDaoImpl; 15 import com.mm.bean.User; 16 import com.mm.service.UserService; 17 import com.mm.service.impl.UserServiceImpl; 18 19 20 21 public class RegisterServlet extends HttpServlet { 22 23 public void doGet(HttpServletRequest request, HttpServletResponse response) 24 throws ServletException, IOException { 25 doPost(request,response); 26 27 } 28 29 30 Map<String, String> errors = new HashMap<String, String>(); 31 public void doPost(HttpServletRequest request, HttpServletResponse response) 32 throws ServletException, IOException { 33 //获取参数值 34 String username = request.getParameter("username"); 35 String password = request.getParameter("password"); 36 String repassword = request.getParameter("repassword"); 37 String email = request.getParameter("email"); 38 String address = request.getParameter("address"); 39 40 //组装成一个user对象 41 User user = new User(); 42 user.setUsername(username); 43 user.setPassword(password); 44 user.setEmail(email); 45 user.setAddress(address); 46 //调用dao 来注册 47 UserService dao = new UserServiceImpl(); 48 boolean re = dao.register(user); 49 50 //根据注册结果来跳转 51 if(re){ 52 request.getRequestDispatcher("register_success.jsp").forward(request, response); 53 } 54 55 }else{ 56 request.setAttribute("errors", errors); 57 request.getRequestDispatcher("register.jsp").forward(request, response); 58 } 59 60 } 65 } 66 67 68
1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; 5 Map<String,String> errors = (HashMap<String,String>)request.getAttribute("errors"); 6 %> 7 8 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 9 <html> 10 <head> 11 <base href="<%=basePath%>"> 12 13 <title>注册页面</title> 14 15 <link type="text/css" rel="stylesheet" href="css/style.css" /> 16 <script type="text/javascript" src="jquery.js"></script> 17 18 <script type="text/javascript"> 19 function validate(){ 20 var username = document.getElementById("user1").value; 21 var password = document.getElementById("pwd1").value; 22 var repassword = document.getElementById("rpwd1").value; 23 var email = document.getElementById("email1").value; 24 var address = document.getElementById("address1").value; 25 var reg1 = /[a-zA-Z]\\w*/; 26 var reg2 = /\\w+([-+.\']\\w+)*@\\w+([-.]\\w+)*.\\w+([-.]\\w+)*/; 27 if(username.length<=0) alert("用户名不能为空!"); 28 else if(!reg1.test(username)) alert("用户名格式不正确!"); 29 else if(password.length<6) alert("密码长度必须大于等于6"); 30 else if(password!=repassword) alert("两次密码不一致!"); 31 else if(!reg2.test(email)) alert("邮箱格式不正确!!"); 32 else document.form[1].submit(); 33 } 34 </script> 35 36 </head> 37 38 <body style="text-align:center"> 39 <div id="header" class="wrap"> 40 <div id="logo">北大青鸟网上书城</div> 41 <div id="navbar"> 42 <form method="get" name="search" action=""> 43 搜索:<input class="input-text" type="text" name="keywords" /><input class="input-btn" type="submit" name="submit" value="" /> 44 </form> 45 </div> 46 </div> 47 <div id="register"> 48 <div class="title"> 49 <h2>欢迎注册北大青鸟网上书城</h2> 50 </div> 51 <div class="steps"> 52 <ul class="clearfix"> 53 <li class="current">1.填写注册信息</li> 54 <li class="unpass">2.注册成功</li> 55 </ul> 56 </div> 57 <form method="post" action="RegisterServlet" id="registerForm"> 58 <dl> 59 <dt>用 户 名:</dt> 60 <dd><input id = "user1" class="input-text" type="text" name="username" /><span>${errors.username }</span></dd> 61 <dt>密 码:</dt> 62 <dd><input id = "pwd1" class="input-text" type="password" name="password" /><span>${errors.password}</span></dd> 63 <dt>确认密码:</dt> 64 <dd><input id = "rpwd1" class="input-text" type="password" name="repassword" /><span>${errors.repassword }</span></dd> 65 <dt>Email地址:</dt> 66 <dd><input id = "email1" class="input-text" type="text" name="email" /><span>${errors.email }</span></dd> 67 <dt>通信地址:</dt> 68 <dd><input id = "address1" class="input-text" type="text" name="address" /></dd> 69 <dt></dt> 70 <dd class="button"><input class="input-reg" type="submit" name="register" onClick="validate()"/></dd> 71 </dl> 72 </form> 73 </div> 74 <div id="footer" class="wrap"> 75 北大青鸟网上书城 © 版权所有 76 77 </div> 78 </body> 79 </html>
登录功能
登录功能用到cookie会话技术,可以回显用户名密码;前提是复选框要选中
1 package com.mm.servlet; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 6 import javax.mail.Session; 7 import javax.servlet.ServletException; 8 import javax.servlet.http.Cookie; 9 import javax.servlet.http.HttpServlet; 10 import javax.servlet.http.HttpServletRequest; 11 import javax.servlet.http.HttpServletResponse; 12 import javax.servlet.http.HttpSession; 13 14 import com.mm.bean.User; 15 import com.mm.service.UserService; 16 import com.mm.service.impl.UserServiceImpl; 17 18 public class LoginServlet extends HttpServlet { 19 20 21 public void doGet(HttpServletRequest request, HttpServletResponse response) 22 throws ServletException, IOException { 23 //得到页面输入的用户名和密码 24 String username = request.getParameter("username"); 25 String password = request.getParameter("password"); 26 String remember = request.getParameter("remember"); 27 //从数据库中查找是否存在 28 UserService us = new UserServiceImpl(); 29 User user = us.login(username, password); 30 //找到 显示登陆成功,跳转到 User主页,跳转不成功,在login.jsp 31 //user不为空说明此用户真实存在 32 if(user != null){ 33 //如果用户找到了,那就说明是合法用户 34 //把用户放入cookies中 35 Cookie cookie = new Cookie("username",username); 36 Cookie cookie1 = new Cookie("password",password); 37 if("on".equals(remember)){ 38 cookie.setMaxAge(300); 39 cookie1.setMaxAge(300); 40 }else{ 41 cookie.setMaxAge(0); 42 cookie1.setMaxAge(0); 43 } 44 45 response.addCookie(cookie); 46 response.addCookie(cookie1); 47 48 //此用户存到session中 49 request.getSession().setAttribute("username", username); 50 51 52 response.setHeader("refresh", "3;url=BookServlet?op=list"); 53 54 }else{//非法用户 55 request.setAttribute("error", "用户名或密码错误"); 56 57 request.getRequestDispatcher("login.jsp").forward(request, response); 58 59 60 } 61 62 63 } 64 65 66 public void doPost(HttpServletRequest request, HttpServletResponse response) 67 throws ServletException, IOException { 68 doGet(request,response); 69 70 } 71 72 }
<%@ 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%>"> <title>登录界面</title> <link type="text/css" rel="stylesheet" href="css/style.css" /> </head> <body style="text-align:center"> <div id="header" class="wrap"> <div id="logo">北大青鸟网上书城</div> <div id="navbar"> <form method="get" name="search" action=""> 搜索:<input class="input-text" type="text" name="keywords" /> <input class="input-btn" type="submit" name="submit" value="" /> </form> </div> </div> <div id="login"> <% //拿到错误信息 String name = (String) request.getAttribute("error") ; if(name != null) out.write("<font color = red>" + name + "</font>") ; String username = "" ; String password = "" ; //拿到客户端携带的所有的Cookie Cookie[] cs = request.getCookies() ; //循环判断,如果拿到cookies for (int i = 0; cs !=null && i < cs.length; i++) { Cookie c = cs[i] ; if(c.getName().equals("username")){ //说明找到了存储用户名的cookie username = c.getValue() ; } if(c.getName().equals("password")){ //说明找到了存储密码的Cookie password = c.getValue() ; } } %> <h2>用户登陆</h2> <form method="post" action="LoginServlet"> <dl> <dt>用户名: </dt> <dd><input class="input-text" type="text" name="username" value = "<%=username %>"/><span>${error}</span></dd> <dt>密 码: </dt> <dd><input class="input-text" type="password" name="password" value = "<%=password%>"/></dd> <dt><input class = "input-text" type= "checkbox" name = "remember" value = "on"/></dt> <dd>是否记住此用户</dd> <dt></dt> <dd class="button"><input class="input-btn" type="submit" name="submit" value="" /> <input class="input-reg" type="button" name="register" value="" onclick="window.location=\'register.jsp\';" /></dd> </dl> </form> </div> <div id="footer" class="wrap"> 北大青鸟网上书城 © 版权所有 </div> </body> </html>
注销功能
登录时将此用户存入session中,方便后边的使用;注销时将此用户从session中删除即可。
1 HttpSession se = request.getSession(false); 2 if(se==null) { 3 response.sendRedirect("login.jsp"); 4 return ; 5 } 6 7 se.removeAttribute("username"); 8 response.sendRedirect("login.jsp");
加入购物车功能
方便对购物车进行管理,创建了一个购物车的实体,计算出了每种书花费的价格
1 package com.mm.bean; 2 3 public class BookShopping { 4 private Book book; 5 private int count;//购买的数量 6 private double totalprice;//总价格 7 public BookShopping(Book book , int count) { 8 this.book = book; 9 this.count = count; 10 this.totalprice = this.book.getBookprice()*this.count; 11 } 12 public Book getBook() { 13 return book; 14 } 15 public void setBook(Book book) { 16 this.book = book; 17 } 18 19 public int getCount() { 20 return count; 21 } 22 public void setCount(int count) { 23 this.count = count; 24 } 25 public double getTotalprice() { 26 return totalprice; 27 } 28 public void setTotalprice(double totalprice) { 29 this.totalprice = totalprice; 30 } 31 32 33 }
1 package com.mm.servlet; 2 3 import java.io.IOException; 4 import java.util.HashMap; 5 import java.util.List; 6 import java.util.Map; 7 import java.util.Set; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 import javax.servlet.http.HttpSession; 14 15 import com.mm.Dao.impl.BookDaoImpl; 16 import com.mm.bean.Book; 17 18 public class AddCartServlet extends HttpServlet { 19 20 21 public void doGet(HttpServletRequest request, HttpServletResponse response) 22 throws ServletException, IOException { 23 doPost(request,response); 24 } 25 26 //将从User首页选中的加入购物车,还要根据书的本数还要计算价格 27 public void doPost(HttpServletRequest request, HttpServletResponse response) 28 throws ServletException, IOException { 29 //从界面拿到选中的即需要加入购物车的所有图书的Id号 30 String[] bookIds =(String[])request.getParameterValues("bookid"); 31 Map<String,Integer> bookMap = (Map<String, Integer>) request.getSession().getAttribute("bookMap"); 32 if(bookMap==null) bookMap = new HashMap(); 33 //遍历选择的商品 34 if(bookIds!=null&&bookIds.length>0){ 35 for(String bookId: bookIds){ 36 //添加到购物车 37 Integer count = bookMap.get(bookId);//得到bookid对应的数量 38 if(count==null) bookMap.put(bookId, 1); 39 else{ 40 bookMap.put(bookId, count+1); 41 } 42 } 43 } 44 45 //将购物车里书的id及选购的本数放入sesssion中, request.getSession().setAttribute("bookMap",bookMap); 46 47 request.getRequestDispatcher("goon.jsp").forward(request, response); 48 } 49 50 }