基于ServletJsp的网上书店设计(三)
六,本設計Servlet&Jsp代碼實現過程
用一句話概括,用戶在客戶端請求jsp頁面,jsp頁面將結果提交到Servlet,由Servlet負責處理結果,訪問數據庫等操作,并將參數結果放在request,session,application等元素中,然后通過請求轉發和重定向轉發到其他jsp頁面或者Servlet
6.1進入主頁和查看書籍詳細信息功能
客戶通過客戶端請求地址http://localhost:8080/ShoppingCart/frame.jsp,請求主頁面,主頁面采用框架標簽frameset,框架中頁面再轉發請求Http://localhost:8080/ShoppingCart/PageQueryServlet,? 返回的books.jsp頁面
frame.Jsp的代碼
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>喵喵網上書店</title> </head> <frameset cols="25%,75%" frameborder="NO" border="0" framespacing="0"><frame src="login.jsp" noresize scrolling="no" name="leftframe"> <frame src="Http://localhost:8080/ShoppingCart/PageQueryServlet" name="rightframe" noresize scrolling="yes"> </frameset> </html>
PageQueryServlet.java的Servlet是分頁顯示書籍的代碼
package com.servlets;import java.io.IOException; import java.io.PrintWriter; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.Dao.PageQueryDao; import com.beans.Book;public class PageQueryServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {int currpage=1;if(request.getParameter("page")!=null){currpage=Integer.parseInt(request.getParameter("page"));}PageQueryDao pagedao=new PageQueryDao();List<Book> list=pagedao.getPageList(currpage);//查詢當前頁記錄request.setAttribute("list", list); int pages; //計算查詢總頁數int count=pagedao.FindCounts();if(count%Book.PAGE_SIZE==0){pages=count/Book.PAGE_SIZE;}else{pages=count/Book.PAGE_SIZE+1;}StringBuffer sb=new StringBuffer();//構建分頁條for(int i=1;i<=pages;i++){if(i==currpage){sb.append("『" + i + "』");}else{sb.append("<a href='PageQueryServlet?page="+i+"'>"+i+"</a>");}sb.append(" ");}request.setAttribute("bar", sb.toString());request.getRequestDispatcher("books.jsp").forward(request, response); //請求轉發 }protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}}
Books.jsp是顯示書籍
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@page import="java.util.List"%> <%@page import="com.beans.Book"%><html> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>圖書信息列表</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--><style type="text/css">a:link{color:#FF4500;text-decoration:none}/*未訪問,紅色,無下劃線*/a:active{color:blue;}/*激活,紅色*/a:visited{color:red;text-decoration:none}/*已訪問,紫色,無下劃線*/a:hover{color:yellow;text-decoration:underline}/*鼠標移動上面,藍色,下劃線*/</style></head><body bgcolor="#98FB98" ><br><br><table align="center" width="900"><tr><td align="center" colspan="6" valign="baseline"><h2 style=" font-family:隸書;color:#0A0A0A;font-size:50px">喵喵網上書店</h2></td></tr><%! int i=1,j=1; %><% List<Book> list=(List<Book>)request.getAttribute("list");%><% for(j=1;j<=2;j++){ %><tr ><% for(Book b:list){ if(j==2){if(b.getBookId()<=3||(b.getBookId()>=7&&b.getBookId()<=9)) continue;} %> <td width="100" height="140"><img src="images/<%=String.valueOf(b.getBookId()-1) %>.jpg"/></td><td width="160"> <font color="#0000FF" face="隸書">ISDN?:<%=b.getBookId() %></font><br><font color="#0000FF" face="隸書"> 書?名:<%=b.getName() %></font><br><font color="#0000FF" face="隸書"> 作?者:<%=b.getAuthor() %></font><br><font color="#0000FF" face="隸書">出?版:<%=b.getPublisher() %></font><br><font color="#0000FF" face="隸書">價?格:<%=b.getPrice() %> </font><br> <a href="BookInfo/<%=b.getBookId()%>.jsp?bookid=<%=b.getBookId()%>">查看詳細信息</a> </td> <% if(b.getBookId()%3==0) break; %> <%} %> </tr><%} %> <tr><td align="right" colspan="6"><%= request.getAttribute("bar") %></td> </tr></table></body> </html> 結果圖:
點擊“查看詳細信息”會把該書的bookId放入request中,然后跳轉到相應的書的詳細信息頁:
Id=1的書的代碼,1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="com.Dao.BookDao" %> <%@ page import="com.beans.Book" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>三國演義</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--><style type="text/css">a:link{color:blue;text-decoration:none}/*未訪問,紅色,無下劃線*/a:active{color:blue;}/*激活,紅色*/a:visited{color:yellow;text-decoration:none}/*已訪問,紫色,無下劃線*/a:hover{color:blue;text-decoration:underline}/*鼠標移動上面,藍色,下劃線*/</style></head> <body bgcolor="#98FB98" ><% int bookid=Integer.parseInt(request.getParameter("bookid")); BookDao bookdao=new BookDao(); Book b=bookdao.getBookById(bookid); String msg=(String)request.getAttribute("msg"); %><br><br><br><br><form action="http://localhost:8080/ShoppingCart/CheckLogin?bookid=<%=b.getBookId() %>" method="post" name="checkform"><table align="center" width="800"><tr><td width="100" height="140"><img src="Http://localhost:8080/ShoppingCart/images/<%=String.valueOf(b.getBookId()-1) %>.jpg"/></td><td > <font color="#000000" face="隸書" size="4">ISDN?:<%=b.getBookId() %></font><br><font color="#000000" face="隸書" size="4"> 書?名:<%=b.getName() %></font><br><font color="#000000" face="隸書" size="4"> 作?者:<%=b.getAuthor() %></font><br><font color="#000000" face="隸書" size="4">出?版:<%=b.getPublisher() %></font><br><font color="#000000" face="隸書" size="4">價?格:<%=b.getPrice() %> </font><br> </td> </tr><tr><td colspan="2"> <hr color="#FF0000"></td></tr> <tr><td colspan="2"> <h2><font color="#8B0000" face="隸書">簡介:</font></h2></td></tr> <tr><td colspan="2"> <p style="font-family:'楷體'">??????《三國演義》是中國第一部長篇章回體歷史演義小說,以描寫東漢末年的戰爭為主,反映了魏、蜀、吳三個政治集團之間的政治和軍事斗爭。分為黃巾之亂、董卓之亂、三國鼎立三大部分。在廣闊的背景上,上演了一幕幕氣勢磅礴的戰爭場面。</p><p style="font-family:'楷體'">??????羅貫中將兵法三十六計融于字里行間,既有情節,也有兵法韜略。本書反映了豐富的歷史內容,人物名稱、地理名稱、主要事件和人物性格與《三國志》基本相同,是在固定形象基礎上,進行再發揮,這也是歷史演義小說的套路。本書一方面反映了真實的三國歷史,照顧到讀者希望了解真實歷史的需要;另一方面,根據明朝社會的實際情況對三國人物進行了夸張、美化、丑化等等。</p></td></tr><tr><td colspan="2" align="right"> <input value="加入購物車" type="submit">??<a href="Http://localhost:8080/ShoppingCart/PageQueryServlet">繼續購物</a></td></tr> </table> </form><% if(msg!=null){ %><%=msg %><%} %></body> </html>結果圖:
在該頁面中點擊“加入購物車”,請求會提交到CheckLogin的Servlet,在該Servlet中完成檢查用戶有無登錄的操作和將書加入到該用戶的購物車的操作。如果用戶為登錄會“用戶為登錄”窗口提示信息,如果登錄了,就成功加入了該用戶的購物車,感覺淘寶的模式有點像,點擊該用戶的“查看我的購物車”即可看到剛加的書籍。若購物車中有書籍會提示“此書已加入購物車,請勿重復添加!”,只需在購物車中調整購買數量即可。
CheckLogin.java
package com.servlets;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import com.Dao.BookDao; import com.Dao.CartDao; import com.beans.Book;public class CheckLogin extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {response.setCharacterEncoding("gb2312");HttpSession session=request.getSession(); //String user=(String) session.getAttribute("user");//從session中獲取用戶System.out.println("加入購物車");String bookid=request.getParameter("bookid");BookDao bookdao=new BookDao();Book b=bookdao.getBookById(Integer.parseInt(bookid));//通過傳過來的bookid返回書的對象System.out.println("以獲取用戶");if( session.getAttribute("userid")==null){//如果用戶未登錄System.out.println("用戶未空");request.setAttribute("msg", "<script language='javascript'>window.alert('用戶未登錄!');</script>");request.getRequestDispatcher("BookInfo/"+b.getBookId()+".jsp").forward(request, response);}else{//加入購物車的操作 CartDao cartdao=new CartDao();String userid=(String)session.getAttribute("userid");//System.out.println(b.getName());//System.out.println((String)session.getAttribute("userid")); boolean cc=cartdao.isContainBook(userid, bookid);if(cc){//如果此書已添加request.setAttribute("msg", "<script language='javascript'>window.alert('此書已加入購物車,請勿重復添加!');</script>");request.getRequestDispatcher("BookInfo/"+b.getBookId()+".jsp").forward(request, response);}else{//如果此書沒添加boolean bb=cartdao.InsertBook((String)session.getAttribute("userid"), b);if(bb){//如果插入書籍成功/*PrintWriter out=response.getWriter();out.print("<script language='javascript'>window.alert('成功加入購物車!');</script>"); out.flush();out.close();*/request.setAttribute("msg", "<script language='javascript'>window.alert('成功加入購物車!');</script>");request.getRequestDispatcher("BookInfo/"+b.getBookId()+".jsp").forward(request, response);}else{ request.setAttribute("msg", "<script language='javascript'>window.alert('加入購物車失敗!');</script>");request.getRequestDispatcher("BookInfo/"+b.getBookId()+".jsp").forward(request, response);}} }}}6.2用戶注冊和用戶登錄功能
在用戶登錄使用之前用戶首先要注冊,注冊過程我采用的是為每個用戶新建一張表,這張表就代表了該用戶的購物車,存放的是該用戶選購的書籍
Register.jsp是顯示注冊的代碼
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>用戶注冊</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript">var select=document.getElementByName("header");var options=select.getElementsByTagName("option");var placeholder=document.getElementsByName("place");function selectheader(){placeholder.src=select.value;}</script><script type="text/javascript">function login(){if(document.registerform.ID.value==""){window.alert("賬號不能為空!");return ;}if(document.registerform.Password.value==""){window.alert("密碼不能為空!");return ;}registerform.submit();}function cancelregister(){document.registerform.method="post";document.registerform.target="_top";document.registerform.action="http://localhost:8080/ShoppingCart/frame.jsp";document.registerform.submit();}</script></head><body bgcolor="#98FB98"><br><br><br><br><form action="RegServlet" name="registerform" method="post"><table align="center" width="300" ><tr><td colspan="2" align="center" style="color:#00F;font-size;36px" rowspan="1"><b>用戶注冊</b></td></tr><tr><td>賬????號:</td><td><input name="ID" type="text" > </td></tr><tr><td>密????碼:</td><td><input name="Password" type="password" > </td></tr><tr><td>性????別:</td><td><input name="Sex" type="radio" value="男">男 <input name="Sex" type="radio" value="女">女</td><!--單選按鈕--></tr><tr><td>電話號碼:</td><td><input name="Phone" type="text"/></td></tr><tr><td>家????鄉:</td><td><select name="Home" ><!--下拉列表--><option value="北 京">北 京</option><option value="上 海">上 海</option><option value="廣 州">廣 州</option><option value="深 圳">深 圳</option> </select></td></tr><tr><td>電子郵件:</td><td><input name="Email" type="text"/></td></tr><tr><td>上傳頭像:</td><td ><div style="border:1px solid;width:50px;height:50px;" ><img name="place" src="Sheader/1.jpg" width="50" height="50"></img> </div> <select name="Header" style="width:50px;" οnclick="selectheader()"><!--下拉列表--><option value="Sheader/1.jpg" >1</option><option value="Sheader/2.jpg" >2</option><option value="Sheader/3.jpg" >3</option><option value="Sheader/4.jpg" >4</option><option value="Sheader/5.jpg" >5</option> <option value="Sheader/6.jpg" >6</option> <option value="Sheader/7.jpg" >7</option> <option value="Sheader/8.jpg" >8</option> <option value="Sheader/9.jpg" >9</option> <option value="Sheader/10.jpg" >10</option> </select> </td> </tr><tr><td></td><td><input type="submit" value="?注????冊?" > <input type="button" value="?取????消?" οnclick="cancelregister()"></td></tr></table> </form></body> </html> 結果圖:
該注冊頁面點擊“取消”會返回顯示書籍的主頁面,點擊“注冊”請求提交到RegServlet,注冊成功之后會彈出一個注冊成功提示框并且數據庫會生成以賬號為表名的表:
RegServlet.java
package com.servlets;import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import com.Dao.UserDao; import com.tools.DBConnection;public class RegServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("text/html");String id= request.getParameter("ID");String password=request.getParameter("Password");String sex= request.getParameter("Sex");String phone=request.getParameter("Phone");String home=request.getParameter("Home");String email=request.getParameter("Email");String header=request.getParameter("Header");DBConnection DB=new DBConnection();Connection conn=null;conn=DB.getCon();if(conn!=null){ try {UserDao dao=new UserDao();if(!dao.isContainUser(id)){//是否存在用戶 String sql="insert into users values(?,?,?,?,?,?,?)";PreparedStatement pstm=conn.prepareStatement(sql);pstm.setString(1, id);pstm.setString(2, password);pstm.setString(3, sex);pstm.setString(4, phone);pstm.setString(5, home);pstm.setString(6, email);pstm.setString(7, header);pstm.executeUpdate();System.out.println("注冊成功!");//同時新建一張購車表,即每個用戶注冊成功都會建一張表String sql1="create table "+id+"(ID int(20),Name varchar(20),Price varchar(20),Num int(20),Total int(20),primary key(ID))";PreparedStatement pstm1=conn.prepareStatement(sql1);pstm1.executeUpdate();response.sendRedirect("Http://localhost:8080/ShoppingCart/PageQueryServlet");//登錄成功后重定向到books界面}else{PrintWriter out=response.getWriter();out.print("<script language='javascript'>window.alert('注冊失敗!');</script>"); out.flush();out.close();System.out.println("用戶已存在!");}} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}} }Bug分析:
本來想搞個上傳頭像的功能,但是感覺圖片規格大小之類的技術不太會,只想出了使用剪輯好了的圖片作為備選項,想實現選中了某個頭像就更換顯示對應的頭像,這涉及了web前端的javascript知識,我只懂一點點,所以就沒有修改了……
用戶登錄功能:
Login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>網上書店</title><script language="javascript" src="JS/AjaxRequest.js"></script><!--javascript語言寫的代碼塊--><script type="text/javascript">function login(){if(document.loginform.id.value==""){window.alert("賬號不能為空!");return ;}if(document.loginform.password.value==""){window.alert("密碼不能為空!");return ;}loginform.submit();}function register(){document.loginform.method="post";document.loginform.target="rightframe";document.loginform.action="register.jsp";document.loginform.submit();}</script><script type="text/javascript">/***********錯誤處理方法*********/function onerror(){alert("您的操作有誤!");}/***********實例化ajax對象的方法*********/function getInfo(){var loader=new net.AjaxRequest("getInfo.jsp?nocache="+new Date().getTime(),deal_getInfo,onerror,"GET");}/***********回調函數*********/function deal_getInfo(){document.getElementById("showInfo").innerHTML=this.req.responseText;}window.οnlοad=function(){getInfo(); //調用getInfo()方法獲取公告信息window.setInterval("getInfo()", 600000); //每隔10分鐘調用一次getInfo()方法}</script><style type="text/css">a:link{color:red;text-decoration:none}/*未訪問,紅色,無下劃線*/a:active{color:blue;}/*激活,紅色*/a:visited{color:yellow;text-decoration:none}/*已訪問,紫色,無下劃線*/a:hover{color:blue;text-decoration:underline}/*鼠標移動上面,藍色,下劃線*/</style></head><body bgcolor="#98FB98" ><form action="LoginServlet" name="loginform" method="post"><h2 align="center" style=" font-family:隸書">歡迎登陸網上書店系統</h2><br> <table align="center" style="border:1px solid"><tr><td><font color="blue"><b>賬?號:</b></font></td><td><input name="id" type="text"> </td></tr><tr><td><font color="blue"><b>密?碼:</b></font></td><td><input name="password" type="password" size="20"> </td></tr><tr><td></td><td><input type="button" value="登??錄" οnclick="login()"><input type="button" value="立即注冊" οnclick="register()"> </td> </tr></table> </form><table align="center" style="border:1px solid"><tr bgcolor="#FF0000"><td colspan="2" >公告信息:</td></tr> <tr ><td colspan="2" width="215" height="100"> <marquee direction="up" scrollamount="3" οnmοuseοut="this.start()" οnmοuseοver="this.stop()"><div id="showInfo" ></div></marquee></td></tr><tr bgcolor="#FF0000"><td colspan="2" >友情鏈接:</td></tr> <tr ><td colspan="2" ><a href="http://www.hust.edu.cn/" target="_blank"><font face="隸書" color="#FF4500" size="4">華中科技大學</font></a><br><a href="http://portal.ccnu.edu.cn/" target="_blank"><font face="隸書" color="#FF4500" size="4">華中師范大學</font></a><br><a href="http://www.cug.edu.cn/new/" target="_blank"><font face="隸書" color="#FF4500" size="4">中國地質大學</font></a><br><a href="http://www.whut.edu.cn/2015web/index.htm" target="_blank"><font face="隸書" color="#FF4500" size="4">武漢理工大學</font></a> </td></tr> </table></body> </html>該頁面有三部分,登錄框,公告信息,友情鏈接。
登錄框很簡單form提交到LoginServlet就可以了,在LoginServlet中查詢數據庫判斷等操作:
LoginServlet.java
package com.servlets;import java.io.IOException; import java.io.PrintWriter; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import com.Dao.BookDao; import com.Dao.UserDao; import com.beans.Book; import com.beans.User;public class LoginServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");response.setContentType("text/html");System.out.println("接收數據");String id=request.getParameter("id");//獲得用戶名String password=request.getParameter("password");//獲得密碼UserDao dao=new UserDao();BookDao bdao=new BookDao();User user=null;user=dao.getUser(id, password);HttpSession session=request.getSession();if(user!=null){System.out.println("用戶已查到");session.setAttribute("userid",user.getID());//把查到的用戶放進session中,便于登錄檢查 response.sendRedirect("loginsuccess.jsp");}else{PrintWriter out=response.getWriter();out.print("<script type='text/javascript'>");out.print("window.alert('用戶名或密碼不正確!');");out.print("</script>");out.flush();out.close();}}}公告信息采用Ajax技術,不刷新頁面更新
關鍵代碼:
<tr bgcolor="#FF0000"><td colspan="2" >公告信息:</td></tr> <tr ><td colspan="2" width="215" height="100"> <marquee direction="up" scrollamount="3" οnmοuseοut="this.start()" οnmοuseοver="this.stop()"><div id="showInfo" ></div></marquee></td></tr>主要是javascript代碼
<script type="text/javascript">/***********錯誤處理方法*********/function onerror(){alert("您的操作有誤!");}/***********實例化ajax對象的方法*********/function getInfo(){var loader=new net.AjaxRequest("getInfo.jsp?nocache="+new Date().getTime(),deal_getInfo,onerror,"GET");}/***********回調函數*********/function deal_getInfo(){document.getElementById("showInfo").innerHTML=this.req.responseText;}window.οnlοad=function(){getInfo(); //調用getInfo()方法獲取公告信息window.setInterval("getInfo()", 600000); //每隔10分鐘調用一次getInfo()方法}</script> 結果圖:6.3查看購物車,商品結算和生成訂單功能
點擊“查看我的購物車”,表單提交到CartServlet,在此CartServlet中查詢該用戶的購物車表,查詢所有已添加到購物車的書籍,并請求轉發到Carts.jsp
CartServlet.java
package com.servlets;import java.io.IOException; import java.io.PrintWriter; import java.util.List;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import com.Dao.CartDao; import com.beans.CartBook;public class CartServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {HttpSession session=request.getSession();String userId=(String) session.getAttribute("userid");//登錄成功后用戶的Id放在session中System.out.println(userId);String m=request.getParameter("m");//刪除書籍的時候判斷標記if(m!=null){if(m.equals("1")){request.setAttribute("msg", "<script language='javascript'>window.alert('成功刪除!');</script>");}else if(m.equals("0")){request.setAttribute("msg", "<script language='javascript'>window.alert('刪除失敗!');</script>");}else if(m.equals("2")){request.setAttribute("msg", "<script language='javascript'>window.alert('清空購物車失敗!');</script>");}}CartDao ccdao=new CartDao();List<CartBook> list=ccdao.getAllCartBooks((String)session.getAttribute("userid"));request.setAttribute("booklist", list);//把已購買的書單放進request中request.getRequestDispatcher("Carts.jsp").forward(request, response); }}Carts.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="com.beans.CartBook" import="com.Dao.CartDao"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>購物車</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--><style type="text/css">a:link{color:#FF4500;text-decoration:none}/*未訪問,紅色,無下劃線*/a:active{color:blue;}/*激活,紅色*/a:visited{color:red;text-decoration:none}/*已訪問,紫色,無下劃線*/a:hover{color:yellow;text-decoration:underline}/*鼠標移動上面,藍色,下劃線*/</style></head> <body bgcolor="#98FB98"><br> <br> <br><table align="center" width="900" ><tr bgcolor="#ff0000" ><td colspan="8"><font face="隸書" size="5" >我的購物車</font></td></tr><tr><td width="60" align="center" ><font color="blue"><b>商品</b></font></td><td align="center" ><font color="blue"><b>商品名稱</b></font></td><td align="center"><font color="blue"><b>價格</b></font></td><td align="center" width="20"></td><td align="center" width="60"><font color="blue"><b>數量</b></font></td><td align="center" width="20"></td><td align="center"><font color="blue"><b>總價</b></font></td> <td align="center"><font color="blue"><b>操作</b></font></td></tr><tr><td colspan="8"><hr></td></tr><% List<CartBook> list=(List<CartBook>)request.getAttribute("booklist");String userid=(String) session.getAttribute("userid");CartDao cdao=new CartDao();int total=cdao.getTotalPrice(userid); // int total=0; int i=1; System.out.print(list.size()); %><% if(list.size()==0){%> <tr><td colspan="8" align="center" height="30">請添加書籍!</td></tr><% }else{for(i=0;i<list.size();i++){%><tr align="center"><td height="80" width="60"><img src="Simages/<%=list.get(i).getBookId()-1 %>.jpg"></td><td align="center"><%=list.get(i).getName() %></td><td align="center">¥<%=list.get(i).getPrice()%></td><td align="center" width="20"> <form action="UpdateNumServlet?bookidtext=<%=list.get(i).getBookId() %>" method="post" name="numform"><!--減數量 --><br> <input value="-" type="submit" name="sub" > <input type="hidden" value="-1" name="hid"> </form></td><td align="center" width="60"> <input type="text" size="10" readonly value="<%=list.get(i).getNum() %>" style="text-align:center"> </td><td align="center" width="20"><form action="UpdateNumServlet?bookidtext=<%=list.get(i).getBookId() %>" method="post" ><!-- 加數量 --> <br> <input value="+" type="submit" name="add" ><input type="hidden" value="1" name="hid"> </form> </td><td align="center">¥<%=list.get(i).getTotal()%></td><td align="center"><a href="http://localhost:8080/ShoppingCart/DeleteBookServlet?bookid=<%=list.get(i).getBookId()%>">刪除</a> </td></tr> <%} }%><tr><td colspan="8"><hr></td></tr><tr> <td width="80">總金額:</td> <td colspan="7">¥<%=total %></td></tr> <tr><td colspan="8"><hr></td></tr><tr><td colspan="2"> <a href="ClearCartServlet">清空購物車</a></td><td align="right" colspan="6" valign="bottom"><form action="orders.jsp" method="post"><br><input value="商品結算" type="submit"> <a href="http://localhost:8080/ShoppingCart/PageQueryServlet">返回繼續購物</a></form> </td></tr> <tr><td colspan="8"><hr></td></tr> </table><% String msg=(String)request.getAttribute("msg"); //彈窗信息if(msg!=null){ %><%=msg %><%} %></body> </html>購物車結果圖:
在這個購物車頁面中會有比較多的功能,比如:刪除書籍,清空購物車,修改書籍數量,商品結算等功能
刪除書籍:
點擊“刪除”請求提交到DeleteBookServlet,該Servlet中實現刪除操作
DeleteBookServlet.java
package com.servlets;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import com.Dao.CartDao;public class DeleteBookServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");HttpSession session=request.getSession();String userid=(String)session.getAttribute("userid");String bookid=request.getParameter("bookid");CartDao cartdao=new CartDao();boolean b=cartdao.DeleteBook(userid, Integer.parseInt(bookid));//刪除書籍if(b){System.out.println("刪除成功"); response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet?m=1");}else{response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet?m=0");} }}清空購物車:
點擊“清空購物車”,請求提交到ClearCartServlet
ClearCartServlet.java
package com.servlets;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import com.Dao.CartDao;public class ClearCartServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {HttpSession session=request.getSession();String userid=(String)session.getAttribute("userid");CartDao cd=new CartDao();boolean b=cd.ClearCartBook(userid);if(b){response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet");}else{response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet?m=2");}}}修改書籍數量:點擊“+”/“-”操作,請求提交到UpdateNumServlet,修改數量之后總價格也會變化,修改完成之后重定向到本頁面
UpdateNumServlet.java
package com.servlets;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import com.Dao.CartDao;public class UpdateNumServlet extends HttpServlet {private static final long serialVersionUID = 1L;public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");HttpSession session=request.getSession();String userid=(String)session.getAttribute("userid");int bookid=Integer.parseInt((String)request.getParameter("bookidtext"));String hid=(String)request.getParameter("hid");int dnum=Integer.parseInt(hid);//hid的值是+1,-1CartDao cd=new CartDao();cd.ModifyNum(userid, bookid, dnum);System.out.println("進入修改數目servlet");response.sendRedirect("http://localhost:8080/ShoppingCart/CartServlet");}}商品結算:
點擊“商品結算”,請求提交到orders.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><title>填寫訂單</title><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head> <body bgcolor="#98FB98"><form action="OrderServlet" method="post"><br><br><table align="center" width="900" ><tr><td colspan="2" bgcolor="#FFC125"><b>填寫訂單信息:</b></td> </tr><tr><td colspan="2"><hr></td></tr><tr ><td colspan="2" bgcolor="#FFE4B5">收貨人信息</td></tr><tr><td width="150">收??貨??人:</td><td><input type="text" name="receiver"></td></tr><tr><td width="150">詳細地址:</td><td><input type="text" name="address" size="70"></td></tr><tr><td width="150">郵政編碼:</td><td><input type="text" name="post"></td></tr><tr><td width="150">移動電話:</td><td><input type="text" name="mobile">???????? 固定電話:<input type="text" name="fixphone">(如:027-12345678)</td></tr><tr bgcolor="#FFE4B5"><td colspan="2">送貨方式:</td></tr><tr><td colspan="2" ><input type="radio" name="songhuoway" value="<b>普通快遞送貨上門 。</b>【運費5元】 ">普通快遞送貨上門 送貨時間:<select name="songhuotime" style="width:150px"><option value="--請選擇送貨時間--" >--請選擇送貨時間--</option> <option value="送貨時間:三天內." >三天內</option><option value="送貨時間:一周內." >一周內</option><option value="送貨時間:十天內." >十天內</option> </select>(支持貨到付款)【運費5元】</td></tr><tr><td colspan="2" ><input type="radio" name="songhuoway" value="<b>普通郵遞</b>(不支持貨到付款)【運費8元】">普通郵遞(不支持貨到付款)【運費8元】 </td></tr><tr><td colspan="2" ><input type="radio" name="songhuoway" value="<b>郵政特快專遞</b>(不支持貨到付款)【運費20元】">郵政特快專遞(不支持貨到付款)【運費20元】 </td></tr><tr bgcolor="#FFE4B5"><td colspan="2">支付方式:</td></tr><tr><td colspan="2" ><input type="radio" name="payway" value="網上支付">網上支付<br><input type="radio" name="payway" value="網上支付:通過 <b>工商銀行</b>支付">工商銀行<br><input type="radio" name="payway" value="網上支付:通過 <b>中國銀行</b>支付">中國銀行<br><input type="radio" name="payway" value="網上支付:通過 <b>建設銀行</b>支付">建設銀行<br><input type="radio" name="payway" value="網上支付:通過 <b>支付寶支付</b>支付">支付寶支付</td></tr><tr><td colspan="2" ><input type="radio" name="payway" value="貨到付款">貨到付款 </td></tr><tr><td colspan="2" ><input type="radio" name="payway" value="郵政匯款">郵政匯款 </td></tr><tr><td colspan="2" ><input type="radio" name="payway" value="銀行轉賬">銀行轉賬 </td></tr><tr bgcolor="#FFE4B5"><td colspan="2">給賣家留言:</td></tr><tr ><td colspan="2"><input type="text" size="100" name="message"></td></tr><tr><td colspan="2"><hr></td></tr><tr><td align="center" colspan="2"><input type="submit" value="生成訂單"></td></tr></table></form></body> </html>結果圖:
點擊”生成訂單”,請求提交到OrderServlet,此Servlet需要 封裝order.jsp的所有信息,然后請求轉發到確認頁面
OrderServlet.java
package com.servlets;import java.io.IOException; import java.io.PrintWriter; import java.util.HashMap; import java.util.List; import java.util.Map;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession;import com.Dao.CartDao; import com.beans.CartBook;public class OrderServlet extends HttpServlet {public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("UTF-8");response.setCharacterEncoding("UTF-8");String receiver=request.getParameter("receiver");String address=request.getParameter("address");String post=request.getParameter("post");String mobile=request.getParameter("mobile");String fixphone=request.getParameter("fixphone");String songhuoway=request.getParameter("songhuoway");String songhuotime=request.getParameter("songhuotime");String payway=request.getParameter("payway");String message=request.getParameter("message");int yunfei=0;if(songhuoway.equals("<b>普通快遞送貨上門 。</b>【運費5元】 ")){yunfei=5;}else if(songhuoway.equals("<b>普通郵遞</b>(不支持貨到付款)【運費8元】")){yunfei=8;}else if(songhuoway.equals("<b>郵政特快專遞</b>(不支持貨到付款)【運費20元】")){yunfei=20;}Map<String,String> hashmap=new HashMap<String,String>();hashmap.put("receiver",receiver);hashmap.put("address", address);hashmap.put("post", post); hashmap.put("mobile", mobile);hashmap.put("fixphone", fixphone);hashmap.put("songhuoway", songhuoway);hashmap.put("songhuotime", songhuotime);hashmap.put("payway", payway); hashmap.put("message", message);hashmap.put("yunfei", String.valueOf(yunfei));//把運費也傳過去request.setAttribute("hashmap", hashmap);//封裝訂單信息HttpSession session=request.getSession(); CartDao ccdao=new CartDao();List<CartBook> list=ccdao.getAllCartBooks((String)session.getAttribute("userid"));request.setAttribute("booklist", list);//把已購買的書單放進session中request.getRequestDispatcher("confirmorder.jsp").forward(request, response);}}Bug分析:
1,確認頁面沒有返回按鈕。
2,點擊“退出登錄”之后,雖然在session中銷毀了userid,但是右框架頁面還停留在之前的頁面,不能返回到主頁面。
3,當沒有注冊就登錄時,也能到成功登錄界面,只不過用戶名是“null”,應該給出提示信息
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的基于ServletJsp的网上书店设计(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于ServletJsp的网上书店设计(
- 下一篇: JSP+JavaBean+Servlet