網上書城項目,javaweb網上書城項目
實習就要結束了,最終要上交的是網上書城項目和一份文檔。接下來簡要介紹一下項目。
項目是根據三層架構來寫,數據訪問層(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>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>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 }
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

![]()
1 <%@ page language="java" import="java.util.*,com.mm.bean.*,com.mm.Dao.*,com.mm.Dao.impl.*" pageEncoding="UTF-8"%>
2 <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%>
3 <%
4 String path = request.getContextPath();
5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
6
7 Map<String,Integer> bookMap =(Map<String,Integer>)request.getSession().getAttribute("bookMap");
8 BookDao dao = new BookDaoImpl();
9 Iterator keys = bookMap.keySet().iterator();
10 double hj = 0;
11 List<BookShopping> list = new ArrayList();
12 while(keys.hasNext()){
13 String key = (String)keys.next();//book的id
14 Book book = dao.findbookById(Integer.parseInt(key));
15 int count = bookMap.get(key);
16 BookShopping bs = new BookShopping(book,count);//bookshopping裡的構造函數,把價格算出來了。
17 hj+=bs.getTotalprice();//算總的合計,累計疊加
18 list.add(bs);
19 }
20
21 request.getSession().setAttribute("bookshoppinglist",list);
22
23
24 String username = (String)request.getSession().getAttribute("username");
25
26 %>
27
28 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
29 <html>
30 <head>
31 <base href="<%=basePath%>">
32
33 <title>購物車界面</title>
34 <link type="text/css" rel="stylesheet" href="css/style.css" />
35 <script type="text/javascript" src = "jquery.js"></script>
36 <script type="text/javascript">
37 </script>
38
39 </head>
40
41 <body> 42 <div id="header" class="wrap">
43 <div id="logo">北大青鳥網上書城</div>
44 <div id="navbar">
45 <div class="userMenu">
46 <ul>
47 <li><a href="showbook.jsp">歡迎您:${username }</a></li>
48 <li><a href="orderlist.jsp">我的訂單</a></li>
49 <li class="current"><a href="shopping.jsp">購物車</a></li>
50 <li><a href="exit.jsp">注銷</a></li>
51 </ul>
52 </div>
53 <form method="get" name="search" action="">
54 搜索:<input class="input-text" type="text" name="keywords" /><input class="input-btn" type="submit" name="submit" value="" />
55 </form>
56 </div>
57 </div>
58 <div id="content" class="wrap">
59 <div class="list bookList">
60 <form method="post" name="shoping" action="OrderServlet?op=list">
61 <table>
62 <tr class="title">
63 <th class="view">圖片預覽</th>
64 <th>庫存</th>
65 <th>書名</th>
66 <th class="nums">數量</th>
67 <th class="nums">單價</th>
68 <th class="price">總價</th>
69
70 </tr>
71
72 <c:forEach var="obj" items = "${bookshoppinglist}">
73 <tr>
74 <td>${obj.book.bookimg}</td>
75 <td>${obj.book.booksave}</td>
76 <td>${obj.book.bookname}</td>
77 <td>${obj.count }</td>
78 <td>${obj.book.bookprice }</td>
79 <td>${obj.totalprice }</td>
80 </tr>
81 </c:forEach>
82
83 </table>
84
85
86 <div class="button">
87 <h4>總價:¥<span><%=hj %></span>元</h4>
88 <a href="BookServlet?op=list">返回繼續購物</a>
89 <input id = "buy" class="input-chart" type="submit" name="submit" value="" />
90 </div>
91
92 </form>
93 </div>
94 </div>
95 <div id="footer" class="wrap">
96 北大青鳥網上書城 © 版權所有
97
98 </div>
99 </body>
100 </html>
加入購物車的jsp顯示與處理
主要用到EL,JSTL簡化編程
生成訂單功能

![]()
1 package com.mm.Dao.impl;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 import java.sql.SQLException;
7
8 import com.mm.Dao.OrderDao;
9 import com.mm.Utils.JDBCUtils;
10 import com.mm.bean.Orders;
11
12 public class OrderDaoImpl implements OrderDao {
13 //向數據庫order表中插入一行數據,oid自增,可以自動生成oid
14 public int addNewOrder(Orders order) {
15 Connection con = null ;
16 PreparedStatement ps = null;
17 ResultSet rs = null;
18 int oid = 0;
19 String sql = "insert into orders(date,user_name,state,totalmoney) values(?,?,?,?)";
20 try {
21 con = JDBCUtils.getconnection();
22 ps = con.prepareStatement(sql);
23 ps.setString(1, order.getDate());
24 ps.setString(2, order.getUser_name());
25 ps.setInt(3, order.getState());
26 ps.setDouble(4, order.getTotalmoney());
27 int count = ps.executeUpdate();
28 System.out.println("受影響的行數是:"+count);
29 if(count == 1){
30 String s = "select oid from orders where date = ? and user_name = ? and state = ? and totalmoney = ?";
31 ps = con.prepareStatement(s);
32 ps.setString(1,order.getDate());
33 ps.setString(2, order.getUser_name());
34 ps.setInt(3,order.getState());
35 ps.setDouble(4, order.getTotalmoney());
36 rs = ps.executeQuery();
37 while(rs.next()){
38 oid = rs.getInt(1);//返回第一條記錄
39 }
40 }
41
42 return oid;
43 } catch (SQLException e) {
44 // TODO Auto-generated catch block
45 e.printStackTrace();
46 }finally{
47 JDBCUtils.release(rs, ps, con);
48 }
49 return oid;
50 }
51
52
53 public static void main(String args[]){
54 OrderDao d = new OrderDaoImpl();
55 Orders o = new Orders();
56 o.setDate("2016-09-09");
57 o.setState(1);
58 o.setUser_name("mxn");
59 o.setTotalmoney(23);
60
61 int a = d.addNewOrder(o);
62 System.out.println(a);
63 }
64
65 }
生成訂單的DAO層

![]()
1 package com.mm.servlet;
2
3 import java.io.IOException;
4 import java.text.SimpleDateFormat;
5 import java.util.ArrayList;
6 import java.util.Date;
7 import java.util.Iterator;
8 import java.util.List;
9 import java.util.Map;
10 import java.util.Set;
11
12 import javax.servlet.ServletException;
13 import javax.servlet.http.HttpServlet;
14 import javax.servlet.http.HttpServletRequest;
15 import javax.servlet.http.HttpServletResponse;
16
17 import com.mm.Dao.OrderDao;
18 import com.mm.Dao.impl.ItemDAOImp;
19 import com.mm.Dao.impl.OrderDaoImpl;
20 import com.mm.bean.Book;
21 import com.mm.bean.BookShopping;
22 import com.mm.bean.ItemsIn;
23 import com.mm.bean.Orders;
24
25 public class OrderServlet extends HttpServlet {
26
27
28 public void doGet(HttpServletRequest request, HttpServletResponse response)
29 throws ServletException, IOException {
30 doPost(request,response);
31
32 }
33
34
35 public void doPost(HttpServletRequest request, HttpServletResponse response)
36 throws ServletException, IOException {
37
38 String op = request.getParameter("op");
39
40 if(op==null) op="list";
41 if("list".equals(op)){
42
43 String username = (String)request.getSession().getAttribute("username");
44 int state = 1;
45 String date = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date());
46 System.out.println("時間是"+date);
47 Orders order = new Orders();
48 order.setDate(date);
49 order.setState(state);
50 order.setUser_name(username);
51 //order.setTotalmoney(totalmoney);
52 OrderDao dao = new OrderDaoImpl();//根據一行數據就可以得到訂單的oid;
53 int oid = dao.addNewOrder(order);//從Order表中根據order的其他信息得到order的oid ;
54 System.out.println("生成的訂單編號是"+oid);
55
56
57 List<ItemsIn> li = new ArrayList();
58 //得到bookshopping 集合
59 List<BookShopping> list = (List<BookShopping>) request.getSession().getAttribute("bookshoppinglist");
60 if(list!=null){
61 Iterator<BookShopping> it = list.iterator();
62 while(it.hasNext()){
63 BookShopping bs = it.next();
64 bs.getBook();//得到圖書實體
65 bs.getCount();//得到圖書對應的本書
66
67 System.out.println("圖書對應的本數:"+bs.getCount());
68
69
70 ItemsIn in = new ItemsIn();
71 in.setBook_id(bs.getBook().getBookid());
72 in.setNumber(bs.getCount());
73 in.setO_id(oid);
74 in.setSinglePrice(bs.getBook().getBookprice());
75 in.setSumMoney(bs.getTotalprice());
76
77 li.add(in);
78
79 }
80
81 ItemDAOImp d = new ItemDAOImp();
82 int c = d.insertItem(li);
83 System.out.println(" :"+c);
84 }else{
85 System.out.println("list為null");
86 }
87
88
89
90 request.getSession().setAttribute("oid",oid );
91 response.sendRedirect("shopping-success.html");
92
93
94 }
95
96
97
98 }
99
100 }
生成訂單的servlet
訂單顯示功能 & 查看歷史訂單

![]()
1 package com.mm.Dao.impl;
2
3 import java.sql.Array;
4 import java.sql.Connection;
5 import java.sql.Date;
6 import java.sql.PreparedStatement;
7 import java.sql.ResultSet;
8 import java.sql.SQLException;
9 import java.text.SimpleDateFormat;
10 import java.util.ArrayList;
11 import java.util.List;
12
13 import com.mm.Dao.IItemDAO;
14 import com.mm.Utils.JDBCUtils;
15 import com.mm.bean.ItemsIn;
16 import com.mm.bean.ItemsOut;
17
18 public class ItemDAOImp implements IItemDAO {
19 Integer oid = 1;
20 public Integer getOid() {
21 return oid;
22 }
23 public void setOid(Integer oid) {
24 this.oid = oid;
25 }
26
27
28 // 找到某頁的訂單詳情數據
29 public List<ItemsOut> getPageList(int currentPage, int count) {
30
31
32 Connection con = null;
33 PreparedStatement ps = null;
34 ResultSet rs = null;
35 List<ItemsOut> list = new ArrayList();
36 try {
37 String sql = "SELECT bookname,state,oid,DATE,user_name,summoney,bookimg,singleprice,number FROM book,orders,items WHERE items.o_id = orders.oid AND items.book_id=book.bookid AND orders.oid="+oid+" limit ?,?";
38 con = JDBCUtils.getconnection();
39 ps = con.prepareStatement(sql);
40 //ps.setInt(1, oid);
41 ps.setInt(1, (currentPage - 1) * count);// 某頁的起始數據
42 ps.setInt(2, count);// 每頁顯示的數據數
43 rs = ps.executeQuery();
44 while (rs.next()) {
45 list.add(toitem(rs));
46 }
47 return list;
48 } catch (SQLException e) {
49 // TODO Auto-generated catch block
50 e.printStackTrace();
51 } finally {
52 JDBCUtils.release(rs, ps, con);
53 }
54 return null;
55 }
56
57
58 String username = "mxn";
59 // 根據姓名,獲取到此姓名訂單的所有數據,並分頁顯示。
60 public List<ItemsOut> getPageList1(int currentPage, int count) {
61
62 Connection con = null;
63 PreparedStatement ps = null;
64 ResultSet rs = null;
65 List<Integer> list = new ArrayList();
66 List<ItemsOut> l = new ArrayList();
67 // 根據姓名,從order表中先獲取到此用戶所有的訂單號!
68 String sql1 = "select oid from orders where user_name = ?";
69 try {
70 con = JDBCUtils.getconnection();
71 ps = con.prepareStatement(sql1);
72 ps.setString(1, username);
73 rs = ps.executeQuery();
74 int i=0;
75 while (rs.next()) {
76 list.add((Integer)rs.getInt("oid"));
77 //System.out.println("list[新加的值是]"+list.get(i));
78 i++;
79 }
80 String in="";
81 for (int j = 0; j < list.size()-1; j++) {
82 in=in+list.get(j)+",";
83 }
84 in+=list.get(list.size()-1);
85 // System.out.println("in---------------"+in);
86 //根據訂單號從多張表中查找到需要顯示的訂單數據
87 String sql = "SELECT bookname,state,oid,DATE,user_name,summoney,bookimg,singleprice,number FROM book,orders,items WHERE items.o_id = orders.oid AND items.book_id=book.bookid AND orders.oid in("+in+") limit ?,?";
88 ps = con.prepareStatement(sql);
89 ps.setInt(1, (currentPage - 1) * count);// 某頁的起始數據
90 ps.setInt(2, count);// 每頁顯示的數據數
91 rs = ps.executeQuery();
92 while (rs.next()) {
93 l.add(toitem(rs));
94 }
95 return l;
96 } catch (SQLException e) {
97 // TODO Auto-generated catch block
98 e.printStackTrace();
99 }finally{
100 JDBCUtils.release(rs, ps, con);
101 }
102
103 return null;
104 }
105
106
107 private ItemsOut toitem(ResultSet rs) {
108 ItemsOut io = new ItemsOut();
109 try {
110 io.setBookimg(rs.getString("bookimg"));
111 io.setBookname(rs.getString("bookname"));
112 io.setDate(rs.getString("date"));
113 io.setNumber(rs.getInt("number"));
114 io.setSinglePrice(rs.getDouble("singleprice"));
115 io.setSumMoney(rs.getDouble("summoney"));
116 io.setUsername(rs.getString("user_name"));
117 io.setState(rs.getInt("state"));
118 io.setO_id(rs.getInt("oid"));
119 return io;
120 } catch (SQLException e) {
121 // TODO Auto-generated catch block
122 e.printStackTrace();
123 }
124
125 return null;
126 }
127
128 public int getTotalcount() {
129 Connection con = null;
130 PreparedStatement ps = null;
131 ResultSet rs = null;
132 try {
133 con = JDBCUtils.getconnection();
134 ps = con.prepareStatement("select count(*) from items where items.o_id=3");
135 rs = ps.executeQuery();
136 if (rs.next()) {
137 return rs.getInt(1);// 返回第一條記錄
138 }
139 } catch (Exception e) {
140 e.printStackTrace();
141 } finally {
142 JDBCUtils.release(rs, ps, con);
143 }
144 return 0;
145 }
146
147 public int getTotalcount1() {
148 // TODO Auto-generated method stub
149 int reCount=0;
150 Connection con = null;
151 PreparedStatement ps = null;
152 ResultSet rs = null;
153 String sql = "select oid from orders where user_name = ?";
154 List<Integer> list = new ArrayList();
155 try {
156 con = JDBCUtils.getconnection();
157 ps = con.prepareStatement(sql);
158 ps.setString(1, username);
159 rs = ps.executeQuery();
160 int i=0;
161 while (rs.next()) {
162 list.add((Integer)rs.getInt("oid"));
163 System.out.println("list[新加的值是]"+list.get(i));
164 i++;
165 }
166 String in="";
167 for (int j = 0; j < list.size()-1; j++) {
168 in=in+list.get(j)+",";
169 }
170 in+=list.get(list.size()-1);
171 String sqlcont="select count(itemid) from items where items.o_id in("+in+")";
172 ps = con.prepareStatement(sqlcont);
173 rs = ps.executeQuery();
174 if (rs.next()) {
175 reCount=rs.getInt(1);
176 }
177 } catch (Exception e) {
178 e.printStackTrace();
179 } finally {
180 JDBCUtils.release(rs, ps, con);
181 }
182 return reCount;
183 }
184
185 public String getUsername() {
186 return username;
187 }
188
189 public void setUsername(String username) {
190 this.username = username;
191 }
192
193
194 //向訂單表中插入數據
195 public int insertItem(List<ItemsIn> list){
196 Connection con = null;
197 PreparedStatement ps = null;
198 ResultSet rs = null ;
199 int c = 0 ;
200 for(ItemsIn in:list){
201 String sql = "insert into items (o_id,summoney,singleprice,number,book_id) values(?,?,?,?,?);";
202 try {
203 con = JDBCUtils.getconnection();
204 ps = con.prepareStatement(sql);
205 ps.setInt(1, in.getO_id());
206 ps.setDouble(2, in.getSumMoney());
207 ps.setDouble(3, in.getSinglePrice());
208 ps.setInt(4, in.getNumber());
209 ps.setInt(5, in.getBook_id());
210
211 System.out.println("eeeeeeeeeeeeeeeeeeeeeeee");
212 c = ps.executeUpdate();
213 System.out.println("所影響的行數是:"+c);
214
215 if(c == 1){
216 continue; //
217 }else{
218 break;
219 }
220 } catch (SQLException e) {
221 // TODO Auto-generated catch block
222 e.printStackTrace();
223 }finally{
224 JDBCUtils.release(rs, ps, con);
225 }
226 return c;
227 }
228 return c;
229
230
231
232 }
233
234
235
236 public static void main(String[] args) {
237 // List<Integer> list = new ArrayList();
238 ItemDAOImp id = new ItemDAOImp();
239 // id.setUsername("ss");
240 // List<ItemsOut> list1 = id.getPageList1(1, 2);
241 // int s = id.getTotalcount1();
242 // System.out.println("總計路數666666666666666666666666666666----------"+s);
243 // for (ItemsOut i : list1) {
244 // System.out.println(i.getSumMoney());
245 // }
246 //
247 // System.exit(0);
248 // }
249 ItemsIn in = new ItemsIn();
250 in.setBook_id(1);
251 in.setNumber(2);
252 in.setO_id(2);
253 in.setSinglePrice(22);
254 in.setSumMoney(23);
255 List<ItemsIn> list = new ArrayList();
256 list.add(in);
257 id.insertItem(list);
258 }
259 }
訂單顯示 和查看歷史訂單的dao層

![]()
1 package com.mm.servlet;
2
3 import java.io.IOException;
4 import java.io.PrintWriter;
5 import java.util.List;
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.impl.ItemDAOImp;
14 import com.mm.bean.Book;
15 import com.mm.bean.ItemsOut;
16 import com.mm.bean.User;
17
18 public class MyItemsServlet extends HttpServlet {
19
20
21 public void doGet(HttpServletRequest request, HttpServletResponse response)
22 throws ServletException, IOException {
23 doPost(request,response);
24 }
25
26
27 public void doPost(HttpServletRequest request, HttpServletResponse response)
28 throws ServletException, IOException {
29 String op = request.getParameter("op");
30 ItemDAOImp id = new ItemDAOImp();
31 //從session中拿到oid
32 id.setOid((Integer)request.getSession().getAttribute("oid"));
33
34
35 //從session中拿到useranme
36 id.setUsername((String)request.getSession().getAttribute("username"));
37
38
39 if(op == null) op = "list";
40 //查看訂單詳情
41 if("list".equals(op)){
42 //接收 顯示所有的請求信息
43
44
45 //從頁面超鏈傳來的 每頁顯示的數量count
46 String count = request.getParameter("count");
47 if(count == null) count = "10";//默認每頁10條
48 String curpageIndex = request.getParameter("curpage");//得到當前頁的索引
49 if(curpageIndex == null) curpageIndex = "1";//默認是首頁
50 //根據傳來的參數 找到 當前頁的數據集list
51 List<ItemsOut> list= id.getPageList(Integer.parseInt(curpageIndex), Integer.parseInt(count));
52
53 //得到總的數據量
54 int z = id.getTotalcount();
55
56 //根據傳來的參數得到總頁數
57 int pagenum = (z+Integer.parseInt(count)-1)/Integer.parseInt(count);
58
59 //將得到的當前頁的數據集、總頁數、和當前頁返回給頁面,頁面進行顯示
60 request.setAttribute("list", list);
61
62 request.setAttribute("pagecount", pagenum);
63
64 request.setAttribute("currentPageIndex",curpageIndex);
65
66 request.getRequestDispatcher("orderlist.jsp").forward(request, response);
67 return ;
68
69
70 }else if("find".equals(op)){//查看歷史訂單
71
72 String username = (String)request.getSession().getAttribute("username");
73 if(username==null){
74 response.sendRedirect("login.jsp");
75 }else{
76 //從頁面超鏈傳來的 每頁顯示的數量count
77 String count = request.getParameter("count");
78 if(count == null) count = "10";//默認每頁10條
79 String curpageIndex = request.getParameter("curpage");//得到當前頁的索引
80 if(curpageIndex == null) curpageIndex = "1";//默認是首頁
81 //根據傳來的參數 找到 當前頁的數據集list
82 List<ItemsOut> list1= id.getPageList1(Integer.parseInt(curpageIndex), Integer.parseInt(count));
83 //得到總的數據量
84 int z1 = id.getTotalcount1();
85 //根據傳來的參數得到總頁數
86 int pagenum1 = (z1+Integer.parseInt(count)-1)/Integer.parseInt(count);
87 //將得到的當前頁的數據集、總頁數、和當前頁返回給頁面,頁面進行顯示
88 request.setAttribute("list", list1);
89 request.setAttribute("pagecount", pagenum1);
90 request.setAttribute("currentPageIndex",curpageIndex);
91 request.getRequestDispatcher("orderhistory.jsp").forward(request, response);
92 return ;
93 }
94 }
95
96 }
97
98 }
分頁顯示訂單和查看歷史訂單的servlet

![]()
1 <%@ page language="java"
2 import="java.util.*,com.mm.bean.*,com.mm.Dao.impl.*"
3 pageEncoding="UTF-8"%>
4 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
5 <%
6 String path = request.getContextPath();
7 String basePath = request.getScheme() + "://"
8 + request.getServerName() + ":" + request.getServerPort()
9 + path + "/";
10
11 List<ItemsOut> list = (ArrayList<ItemsOut>) request.getAttribute("list");
12
13 //總頁數
14 Integer pagenum = (Integer) request.getAttribute("pagecount");
15
16
17 //當前頁
18 String curpageStr = (String) request.getAttribute("currentPageIndex");
19 Integer curpage = Integer.parseInt(curpageStr);
20
21
22 String username = (String)request.getSession().getAttribute("username");
23 %>
24
25 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
26 <html>
27 <head>
28 <base href="<%=basePath%>">
29 <link type="text/css" rel="stylesheet" href="css/style.css" />
30 <title>我的訂單</title>
31
32 </head>
33
34 <body>
35 <div id="header" class="wrap">
36 <div id="logo">北大青鳥網上書城</div>
37 <div id="navbar">
38 <div class="userMenu">
39 <ul>
40 <li><a href="BookServlet?op=list">歡迎您:${username }</a>
41 </li>
42 <li class="current"><a href="orderlist.jsp">我的訂單</a>
43 </li>
44 <li><a href="shopping.jsp">購物車</a>
45 </li>
46 <li><a href="#">注銷</a>
47 </li>
48 </ul>
49 </div>
50 <form method="get" name="search" action="">
51 搜索:<input class="input-text" type="text" name="keywords" /><input
52 class="input-btn" type="submit" name="submit" value="" />
53 </form>
54 </div>
55 </div>
56 <div id="content" class="wrap">
57 <div class="list orderList">
58 <table>
59 <tr class="title">
60 <th class="orderId">訂單編號</th>
61 <th>訂單商品</th>
62 <th calss="price">訂單名稱</th>
63 <th class="userName">收貨人</th>
64 <th class="price">訂單單價</th>
65 <th class="price">購買量</th>
66 <th class="price">訂單金額</th>
67 <th class="createTime">下單時間</th>
68 <th class="status">訂單狀態</th>
69 </tr>
70
71 <c:forEach var="item" items="${list}">
72 <tr>
73 <td>${item.o_id }</td>
74 <td><img src="${item.bookimg}" /></td>
75 <td>${item.bookname}</td>
76 <td>${item.username }</td>
77 <td>${item.singlePrice}</td>
78 <td>${item.number }</td>
79 <td>${item.sumMoney }</td>
80 <td>${item.date}</td>
81 <td>${item.state}</td>
82 </tr>
83 </c:forEach>
84
85
86
87 </table>
88 <div class="page-spliter">
89
90 <a href="MyItemsServlet?op=list&count=5&curpage=1">首頁</a>
91
92 <c:choose>
93 <c:when test="curpage = 1">
94 <a href="#">上一頁</a>
95 </c:when>
96 <c:otherwise>
97 <%if(curpage>1){ %>
98 <a href="MyItemsServlet?op=list&count=2&curpage=<%=curpage - 1%>">上一頁</a>
99
100 <%} else{%>
101 <a href="MyItemsServlet?op=list&count=2&curpage=<%=curpage%>">上一頁</a>
102
103 <%} %>
104 </c:otherwise>
105 </c:choose>
106
107 <c:choose>
108 <c:when test="curpage = pagenum">
109 <a href="#">下一頁</a>
110 </c:when>
111 <c:otherwise>
112
113 <%if(curpage>=pagenum){ %>
114 <a href="MyItemsServlet?op=list&count=2&curpage=<%=curpage%>">下一頁</a>
115
116 <%} else {%>
117 <a href="MyItemsServlet?op=list&count=2&curpage=<%=curpage+1%>">下一頁</a>
118
119 <%} %>
120 </c:otherwise>
121 </c:choose>
122 <a href="MyItemsServlet?op=list&count=2&curpage=<%=pagenum%>">尾頁</a>
123
124
125 </div>
126 <div class="button">
127
128 <a href = "MyItemsServlet?op=find">查看歷史訂單</a>
129
130
131 </div>
132 </div>
133 </div>
134 <div id="footer" class="wrap">北大青鳥網上書城 © 版權所有</div>
135
136
137
138 </body>
139 </html>
分頁顯示訂單JSP

![]()
1 <%@ page language="java"
2 import="java.util.*,com.mm.bean.*,com.mm.Dao.impl.*"
3 pageEncoding="UTF-8"%>
4 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
5 <%
6 String path = request.getContextPath();
7 String basePath = request.getScheme() + "://"
8 + request.getServerName() + ":" + request.getServerPort()
9 + path + "/";
10
11 List<ItemsOut> list = (ArrayList<ItemsOut>) request.getAttribute("list");
12
13 //總頁數
14 Integer pagenum = (Integer) request.getAttribute("pagecount");
15
16
17 //當前頁
18 String curpageStr = (String) request.getAttribute("currentPageIndex");
19 Integer curpage = Integer.parseInt(curpageStr);
20
21 String username = (String)request.getSession().getAttribute("username");
22 %>
23
24 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
25 <html>
26 <head>
27 <base href="<%=basePath%>">
28 <link type="text/css" rel="stylesheet" href="css/style.css" />
29 <title>我的訂單</title>
30
31 </head>
32
33 <body>
34 <div id="header" class="wrap">
35 <div id="logo">北大青鳥網上書城</div>
36 <div id="navbar">
37 <div class="userMenu">
38 <ul>
39 <li><a href="BookServlet?op=list">歡迎您:${username }</a>
40 </li>
41 <li class="current"><a href="orderlist.jsp">我的訂單</a>
42 </li>
43 <li><a href="shopping.html">購物車</a>
44 </li>
45 <li><a href="#">注銷</a>
46 </li>
47 </ul>
48 </div>
49 <form method="get" name="search" action="">
50 搜索:<input class="input-text" type="text" name="keywords" /><input
51 class="input-btn" type="submit" name="submit" value="" />
52 </form>
53 </div>
54 </div>
55 <div id="content" class="wrap">
56 <div class="list orderList">
57 <table>
58 <tr class="title">
59 <th class="orderId">訂單編號</th>
60 <th>訂單商品</th>
61 <th calss="price">訂單名稱</th>
62 <th class="userName">收貨人</th>
63 <th class="price">訂單單價</th>
64 <th class="price">購買量</th>
65 <th class="price">訂單金額</th>
66 <th class="createTime">下單時間</th>
67 <th class="status">訂單狀態</th>
68 </tr>
69
70 <c:forEach var="item" items="${list}">
71 <tr>
72 <td>${item.o_id }</td>
73 <td><img src="${item.bookimg}" /></td>
74 <td>${item.bookname}</td>
75 <td>${item.username }</td>
76 <td>${item.singlePrice}</td>
77 <td>${item.number }</td>
78 <td>${item.sumMoney }</td>
79 <td>${item.date}</td>
80 <td>${item.state}</td>
81 </tr>
82 </c:forEach>
83
84
85
86 </table>
87 <div class="page-spliter">
88
89 <a href="MyItemsServlet?op=find&count=5&curpage=1">首頁</a>
90
91 <c:choose>
92 <c:when test="curpage = 1">
93 <a href="#">上一頁</a>
94 </c:when>
95 <c:otherwise>
96 <%if(curpage>1){ %>
97 <a href="MyItemsServlet?op=find&count=5&curpage=<%=curpage - 1%>">上一頁</a>
98
99 <%} else{%>
100 <a href="MyItemsServlet?op=find&count=5&curpage=<%=curpage%>">上一頁</a>
101
102 <%} %>
103 </c:otherwise>
104 </c:choose>
105
106 <c:choose>
107 <c:when test="curpage = pagenum">
108 <a href="#">下一頁</a>
109 </c:when>
110 <c:otherwise>
111
112 <%if(curpage>=pagenum){ %>
113 <a href="MyItemsServlet?op=find&count=5&curpage=<%=curpage%>">下一頁</a>
114
115 <%} else {%>
116 <a href="MyItemsServlet?op=find&count=5&curpage=<%=curpage+1%>">下一頁</a>
117
118 <%} %>
119 </c:otherwise>
120 </c:choose>
121 <a href="MyItemsServlet?op=find&count=5&curpage=<%=pagenum%>">尾頁</a>
122
123
124 </div>
125 <div class="button">
126 <input class="input-gray" type="submit" name="submit"
127 value="查看一個月前的訂單" />
128 <input class="input-gray" type="submit"
129 name="submit" value="查看一個月前的訂單" />
130 <a href="MyItemsServlet?op=find">查看歷史訂單</a>
131
132
133 </div>
134 </div>
135 </div>
136 <div id="footer" class="wrap">北大青鳥網上書城 © 版權所有</div>
137
138
139
140 </body>
141 </html>
查看歷史訂單JSP
分頁顯示圖書信息功能

![]()
1 package com.mm.Dao.impl;
2
3 import java.sql.Connection;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 import java.sql.SQLException;
7 import java.util.ArrayList;
8 import java.util.List;
9
10 import com.mm.Dao.BookDao;
11 import com.mm.Utils.JDBCUtils;
12 import com.mm.bean.Book;
13
14 public class BookDaoImpl implements BookDao {
15 //根據當前頁的索引返回當前頁的數據集合
16 public List<Book> getPageList(int currentPageIndex, int count) {
17 // TODO Auto-generated method stub
18
19 Connection con = null;
20 PreparedStatement ps = null;
21 ResultSet rs = null;
22 List<Book> list = new ArrayList();
23 try {
24 con = JDBCUtils.getconnection();
25 ps = con.prepareStatement("select * from book limit ?,?");
26 ps.setInt(1, (currentPageIndex-1)*count);
27 ps.setInt(2, count);
28 rs = ps.executeQuery();
29 while(rs.next()){
30 list.add(tobook(rs));
31 }
32 return list;
33 } catch (SQLException e) {
34 // TODO Auto-generated catch block
35 e.printStackTrace();
36 }finally{
37 JDBCUtils.release(rs, ps, con);
38 }
39 return null;
40 }
41
42 private Book tobook(ResultSet rs) {
43 // TODO Auto-generated method stub
44 Book b = new Book();
45 try {
46 b.setBookid(rs.getInt("bookid"));
47 b.setBookname(rs.getString("bookname"));
48 b.setBookpublish(rs.getString("bookpublish"));
49 b.setBookprice(rs.getDouble("bookprice"));
50 b.setBookauthor(rs.getString("bookauthor"));
51 b.setBookcontent(rs.getString("bookcontent"));
52 b.setBookimg(rs.getString("bookimg"));
53 b.setBooksave(rs.getString("booksave"));
54 } catch (SQLException e) {
55 // TODO Auto-generated catch block
56 e.printStackTrace();
57 }
58 return b;
59 }
60
61 //返回數據庫中圖書總數,在Servlet可以算出總的頁數
62 public int getTotalcount() {
63 // TODO Auto-generated method stub
64
65 Connection con = null;
66 PreparedStatement ps = null;
67 ResultSet rs = null;
68 try {
69 con = JDBCUtils.getconnection();
70 ps = con.prepareStatement("select count(*) from book");
71 rs = ps.executeQuery();
72 if(rs.next()){
73 return rs.getInt(1);//返回第一條記錄
74 }
75 }catch(Exception e){
76 e.printStackTrace();
77 }finally{
78 JDBCUtils.release(rs, ps, con);
79 }
80
81
82 return 0;
83 }
84 //模糊查詢,根據書名返回符合的圖書集合
85 public List<Book> findbookByName(String bookname) {
86 // TODO Auto-generated method stub
87 Connection con = null;
88 PreparedStatement ps = null;
89 ResultSet rs = null;
90 Book b = new Book();
91 List<Book> li = new ArrayList();
92 try {
93 con = JDBCUtils.getconnection();
94 String qbk="%"+bookname+"%";
95 //System.out.println(qbk);
96 String sql="select * from book where bookname like ?";
97 ps = con.prepareStatement(sql);
98 ps.setString(1,qbk);
99 rs = ps.executeQuery();
100 while(rs.next()){
101 li.add(tobook(rs));
102
103 }
104 return li;
105 } catch (SQLException e) {
106 // TODO Auto-generated catch block
107 e.printStackTrace();
108 }finally{
109 JDBCUtils.release(rs, ps, con);
110 }
111 return null;
112 }
113 //根據ID號找到書的詳細信息
114 public Book findbookById(int bid) {
115 // TODO Auto-generated method stub
116 Connection con = null;
117 PreparedStatement ps = null;
118 ResultSet rs = null;
119 Book book = new Book();
120 try {
121 con = JDBCUtils.getconnection();
122 String sql = "select * from book where bookid =?";
123 ps = con.prepareStatement(sql);
124 ps.setInt(1, bid);
125 rs = ps.executeQuery();
126 while(rs.next()){
127 return tobook(rs);
128 }
129
130 } catch (SQLException e) {
131 // TODO Auto-generated catch block
132 e.printStackTrace();
133 }finally{
134 JDBCUtils.release(rs, ps, con);
135 }
136 return null;
137 }
138
139 }show
分頁顯示圖書servlet層的處理

![]()
1 package com.mm.servlet;
2
3 import java.io.IOException;
4 import java.util.List;
5
6 import javax.servlet.ServletException;
7 import javax.servlet.http.HttpServlet;
8 import javax.servlet.http.HttpServletRequest;
9 import javax.servlet.http.HttpServletResponse;
10
11
12 import com.mm.bean.Book;
13 import com.mm.service.BookService;
14 import com.mm.service.impl.BookServiceImpl;
15
16 public class BookServlet extends HttpServlet {
17
18 BookService bs = new BookServiceImpl();
19
20 public void doGet(HttpServletRequest request, HttpServletResponse response)
21 throws ServletException, IOException {
22 doPost(request,response);
23 }
24
25
26 public void doPost(HttpServletRequest request, HttpServletResponse response)
27 throws ServletException, IOException {
28
29 String op = request.getParameter("op");
30
31
32 if(op==null) op = "list";
33 //分頁顯示book表中的所有圖書
34 if("list".equals(op)){
35 //從頁面超鏈傳來的 每頁顯示的數量count
36 String count = request.getParameter("count");
37 if(count == null) count = "10";//默認每頁10條
38 String curpageIndex = request.getParameter("curpage");//得到當前頁的索引
39 if(curpageIndex == null) curpageIndex = "1";//默認是首頁
40 //根據傳來的參數 找到 當前頁的數據集list
41 List<Book> list= bs.getPageList(Integer.parseInt(curpageIndex), Integer.parseInt(count));
42
43 //根據傳來的參數得到總頁數
44 int pagenum = bs.Pagecount(Integer.parseInt(count));
45 //將得到的當前頁的數據集、總頁數、和當前頁返回給頁面,頁面進行顯示
46 request.setAttribute("list", list);
47 request.setAttribute("pagecount", pagenum);
48 request.setAttribute("currentPageIndex",curpageIndex );
49
50 request.getRequestDispatcher("showbook.jsp").forward(request, response);
51 return ;
52
53 }else if("find".equals(op)){
54 //模糊查詢
55 //從頁面超鏈得到每頁顯示的數目
56 String bookname = request.getParameter("bookname");
57 String count = request.getParameter("count");
58 if(count == null) count = "10";//默認每頁10條
59 List<Book> book = bs.findbookByName(bookname);//根據書名找到書的集合
60 request.setAttribute("list", book);
61 request.getRequestDispatcher("showbook.jsp").forward(request, response);
62 return ;
63 }
64
65 }
66
67
68 }
圖書顯示JSP