网上书城项目

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     北大青鸟网上书城 &copy; 版权所有
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">
    北大青鸟网上书城 &copy; 版权所有

</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 }
BookShopping实体类

 

 

 

 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 }
加入购物车的servlet