最簡單的小型商城實現:Serlvet+Jsp經典案例

1. 前臺client有關的頁面

【header.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions"  prefix="fn"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
  	<link href="${pageContext.request.contextPath}/css/css.css" rel="stylesheet" type="text/css" />  
    <title>首頁</title>   
  </head>
  
<body style="text-align:center">
<br />
	<a href="${pageContext.request.contextPath}">首頁</a>
	<span style="width:800px"></span>
	<c:if test="${empty user}"><!-- 也可以是:${sessionScope.user==null} -->
		<a href="${pageContext.request.contextPath}/client/login.jsp">登錄</a>
		<a href="${pageContext.request.contextPath}/client/regist.jsp">註冊</a>
	</c:if>
	<c:if test="${!empty user}">
		歡迎您:${user.username}  <!-- ${sessionScope.user.username} -->
		<a href="${pageContext.request.contextPath}/clientServlet?operation=logout">註銷</a>
	</c:if>
	<a href="${pageContext.request.contextPath}/clientServlet?operation=showUsersOrders">我的訂單</a>  
	<a href="${pageContext.request.contextPath}/client/showCart.jsp">我的購物車</a>
<br />
<script language="javascript">
	function qiehuan(num){
		for(var id = 0;id<=9;id++)
		{
			if(id==num)
			{
				document.getElementById("qh_con"+id).style.display="block";
				document.getElementById("mynav"+id).className="nav_on";
			}
			else
			{
				document.getElementById("qh_con"+id).style.display="none";
				document.getElementById("mynav"+id).className="";
			}
		}
	}
</script>
<div id=menu_out>
  <div id=menu_in>
    <div id=menu>
      <UL id=nav>
        <LI><A class=nav_on id=mynav0 οnmοuseοver=javascript:qiehuan(0) href="#"><SPAN>所有分類</SPAN></A></LI>
        <LI class="menu_line"></LI>
    </UL>
      <div id=menu_con>
        <div id=qh_con0 style="DISPLAY: block">
          <UL>
          <c:forEach items="${sessionScope.cs}" var="c">
	            <LI><A href="${pageContext.request.contextPath}/clientServlet?operation=showCategoryBook&categoryId=${c.id}"><SPAN>${c.name }</SPAN></A></LI>
	            <LI class=menu_line2></LI>
            </c:forEach>
            </UL>
         </div>
      </div>
    </div>
  </div>
  </div>

【listOrder.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/client/header.jsp" %>
	<h1>您近期的訂單如下:</h1>
		<table border="1" width="88%" style="text-align:center" align="center">
			<tr>
				<th>訂單號</th>
				<th>金額</th>
				<th>訂單狀態</th>
				<th>明細</th>
			
			</tr>
			<c:forEach items="${ os}" var="o">
				<tr>
					<td>${o.ordernum}</td>
					<td>¥${o.price }元</td>
					<td>${o.state==0?'未發貨':'已發貨'}</td>
					<td>
						<a href="${pageContext.request.contextPath}/clientServlet?operation=showOrdersDetail&ordersId=${o.id}">訂單詳情</a>
					</td>
				</tr>
			</c:forEach>
		</table>
  </body>
</html>


【login.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/client/header.jsp" %>
	<h1>用戶登錄</h1>	
	<form action="${pageContext.request.contextPath}/clientServlet?operation=login" method="post"> 
		<table border="1" width="88%" style="text-align:center" align="center">
			<tr>
				<td>用戶名</td>
				<td>
					<input type="text" name="username"/>
				</td>
			</tr>
			<tr>
				<td>密碼</td>
				<td>
					<input type="password" name="password"/>
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="登錄"/>
				</td>
			</tr>
			
		</table>
	</form>
  </body>
</html>


【orderMsg.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/client/header.jsp" %>
	訂單號:${o.ordernum}  </br>金額:¥${o.price }元</br>
	明細如下:</br>
		<table border="1" width="88%" style="text-align:center" align="center">
			<tr>
				<th>書名</th>
				<th>作者</th>
				<th>單價</th>
				<th>小計</th>
				<th>數量</th>
			</tr>
			<c:forEach items="${o.items }" var="i">
				<tr>
					<td>${i.book.name}</td>
					<td>${i.book.author}</td>
					<td>¥${i.book.price}元</td>
					<td>${i.num}</td>
					<td>¥${i.price}元</td>
				</tr>
			</c:forEach>
		</table>
   	收貨信息如下:</br>
   		地址:${sessionScope.user.address}</br> 		
   		電話:${sessionScope.user.cellphone}</br>
  </body>
</html>

【regist.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/client/header.jsp" %>
	<h1>新用戶註冊</h1>	
	<form action="${pageContext.request.contextPath}/clientServlet?operation=regist" method="post"> 
		<table border="1" width="88%" style="text-align:center" align="center">
			<tr>
				<td>用戶名</td>
				<td>
					<input type="text" name="username" />
				</td>
			</tr>
			<tr>
				<td>密碼</td>
				<td>
					<input type="password" name="password" />
				</td>
			</tr>
			<tr>
				<td>確認密碼</td>
				<td>
					<input type="password" name="password1" />
				</td>
			</tr>
			<tr>
				<td>電話</td>
				<td>
					<input type="text" name="cellphone" />
				</td>
			</tr>
			<tr>
				<td>手機</td>
				<td>
					<input type="text" name="mobilephone" />
				</td>
			</tr>
			<tr>
				<td>住址</td>
				<td>
					<input type="text" name="address" />
				</td>
			</tr>
			<tr>
				<td>郵箱</td>
				<td>
					<input type="text" name="email" />
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="註冊" />
				</td>
			</tr>
		</table>	
	</form>
  </body>
</html>


【showChart.jsp】


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/client/header.jsp" %>
	<h1>您購買的商品如下</h1>
	<c:if test="${empty sessionScope.cart.items}">
		<img height="180" width="120" src="${pageContext.request.contextPath }/files/0.jpg"/><br/>對不起,您沒有購買任何商品
	</c:if>
	<c:if test="${!empty sessionScope.cart.items}">
		<table border="1" width="88%" style="text-align:center" align="center">
			<tr>
				<th>書名</th>
				<th>作者</th>
				<th>單價</th>
				<th>數量</th>
				<th>小計</th>
				<th>操作</th>
			</tr>
			<c:forEach items="${ sessionScope.cart.items}" var="me">
				<tr>
					<td>${me.value.book.name}</td>
					<td>${me.value.book.author }</td>
					<td>${me.value.book.price }</td>
					<td>${me.value.num }</td>
					<td>${me.value.price}</td>
					<td>
						<a href="#" >刪除</a>
					</td>
				</tr>
			</c:forEach>
			<tr>
				<td colspan="6" align="right">
					總數量:${sessionScope.cart.num}  
					付款金額:${sessionScope.cart.price}  
					<a href="${pageContext.request.contextPath }/clientServlet?operation=genOrders">生成訂單</a>
				</td>
			</tr>
		</table>
	</c:if>
  </body>
</html>

【welcome.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/client/header.jsp" %>
<h1>歡迎光臨</h1>
	<!-- 顯示分頁數據,不分類的 -->
	<table align="center">
		<tr >
			<c:forEach items="${page.records}" var="b">
				<td>
					<table>
						<tr>
							<td>
								<img src="${pageContext.request.contextPath}/files/${b.image}"/>
							</td>
						</tr>
						<tr>
							<td>
								書名:${b.name }<br />
								作者:${b.author }<br />
								原價:<strike>888</strike><br/>
								震撼價:${b.price}
							</td>
						</tr>
						<tr>
							<td>
								<a href="${pageContext.request.contextPath}/clientServlet?operation=buyBook&bookId=${b.id}">購買</a>
							</td>
						</tr>
					</table>
				</td>
			</c:forEach>
		</tr>
	</table>
			
		<tr align="center">
			<td>
				<%@ include file="/commons/page.jsp" %>
			</td>
		</tr>
	
  </body>
</html>

2. 前臺manager相關頁面

【header.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib uri="http://hw.com/jsp/jstl/myfunctions" prefix="myfn" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<link href="${pageContext.request.contextPath}/css/css.css" rel="stylesheet" type="text/css" />
  <head>  
    <title>首頁</title>   
  </head>
  
  <body style="text-align:center">
  
  <br />
<br />
<script language="javascript">
	function qiehuan(num){
		for(var id = 0;id<=9;id++)
		{
			if(id==num)
			{
				document.getElementById("qh_con"+id).style.display="block";
				document.getElementById("mynav"+id).className="nav_on";
			}
			else
			{
				document.getElementById("qh_con"+id).style.display="none";
				document.getElementById("mynav"+id).className="";
			}
		}
	}
</script>
<div id=menu_out>
  <div id=menu_in>
    <div id=menu>
      <UL id=nav>
        <LI><A class=nav_on id=mynav0 οnmοuseοver=javascript:qiehuan(0) href="#"><SPAN>分類管理</SPAN></A></LI>
        <LI class="menu_line"></LI>
        <li><a href="#" οnmοuseοver="javascript:qiehuan(1)" id="mynav1" class="nav_off"><span>圖書管理</span></a></li>
        <li class="menu_line"></li>
        <li><a href="#" οnmοuseοver="javascript:qiehuan( 2)" id="mynav2" class="nav_off"><span>訂單管理</span></a></li>
        <li class="menu_line"></li>
        
        
      </UL>
      <div id=menu_con>
        <div id=qh_con0 style="DISPLAY: block">
          <UL>
            <LI><a href="${pageContext.request.contextPath}/manage/addCategory.jsp"><span>添加分類</span></A></LI>
            <LI class=menu_line2></LI>
            <LI><A href="${pageContext.request.contextPath}/manageServlet?operation=listCategory"><SPAN>查詢分類</SPAN></A></LI>
            <LI class=menu_line2></LI>
           
          </UL>
        </div>
        <div id=qh_con1 style="DISPLAY: none">
          <UL>
            <LI><a href="${pageContext.request.contextPath}/manageServlet?operation=showCategoryUI"><span>添加圖書</span></A></LI>
            <LI class=menu_line2></LI>
            <LI><A href="${pageContext.request.contextPath}/manageServlet?operation=showAllBook"><SPAN>查詢圖書</SPAN></A></LI>
            <LI class=menu_line2></LI>
           
          </UL>
        </div>
        <div id=qh_con2 style="DISPLAY: none">
          <UL>
            <LI><a href="${pageContext.request.contextPath}/manageServlet?operation=showAllOrders0"><span>待處理訂單</span></A></LI>
            <LI class=menu_line2></LI>
            <LI><A href="${pageContext.request.contextPath}/manageServlet?operation=showAllOrders1"><SPAN>已處理訂單</SPAN></A></LI>
            <LI class=menu_line2></LI>
          </UL>
        </div>  
      </div>
    </div>
  </div>
</div>


【listBook.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/manage/header.jsp" %>
<h3>書籍列表</h3>
	<table border="1" width="88%" align="center" style="text-align:center">
		<tr>
			<th>書名</th>
			<th>作者</th>
			<th>描述</th>
			<th>所屬分類</th>
			<th>圖片</th>
			<th>操作</th>
		</tr>
		<c:forEach items="${page.records}" var="b">
			<tr>
				<td>${ b.name}</td>
				<td>${b.author }</td>
				<td>${b.description }</td>
				<td>${myfn:getCategoryNameByIdEL(b.category_id)}</td>
				<td>
					<a href="${pageContext.request.contextPath}/files/${b.image}">查看圖片</a>
				</td>
				<td>
					<a href="#" >[修改]</a>  
					<a href="#" >[刪除]</a>
				</td>
			</tr>
		</c:forEach>
	</table>
	<!-- 視頻內容簡單分頁內容開始 -->
	<!--  
	第${page.pagenum}頁/共${page.totalpage}頁  
	<a href="${pageContext.request.contextPath}/manageServlet?operation=showAllBook&pagenum=
		${page.pagenum-1>0?pagenum-1:1}">上一頁</a>
	<a href="${pageContext.request.contextPath}/manageServlet?operation=showAllBook&pagenum=
		${page.pagenum+1>page.totalpage?page.totalpage:(page.pagenum+1)}">下一頁</a>
		-->
	<%@ include file="/commons/page.jsp" %>
		
	<!-- 視頻內容簡單分頁內容結束 -->
  </body>
</html>


【listCategory.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/manage/header.jsp" %>
	<h2>分類列表</h2>
	<c:if test="${empty cs}">
		對不起,沒有分類,請先添加
	</c:if>
	<c:if test="${!empty cs}">
	<table border="1" width="88%" style="text-align:center" align="center">
		<tr>
			<th>選擇</th>
			<th>分類名稱</th>
			<th>描述</th>
			<th>操作</th>
		</tr>
		<c:forEach items="${cs}" var="c">
			<tr>
				<td>
					<input type="checkbox" name="cids" value="${c.id }"/>
				</td>
				<td>${c.name }</td>
				<td>${c.description }</td>
				<td>
					<a href="#" >更改</a>
					<a href="#" >刪除</a>
				</td>
			<tr>
		</c:forEach>
	</table>
	</c:if>
  </body>
</html>


【addBook.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/manage/header.jsp" %>
	<h2 align="center">添加圖書</h2>
	<form action="${pageContext.request.contextPath}/manageServlet?operation=addBook" method="post" enctype="multipart/form-data" >
		<table border="0" width="88%" align="center">
			<tr>
				<td>書名</td>
				<td>
					<input type="text" name="name"/>
				</td>
			</tr>
			<tr>
				<td>作者</td>
				<td>
					<input type="text" name="author"/>
				</td>
			</tr>
			<tr>
				<td>售價</td>
				<td>
					<input type="text" name="price"/>
				</td>
			</tr>
			<tr>
				<td>圖片</td>
				<td>
					<input type="file" name="img"/> <!-- ★和javabean的名字不一樣 -->
				</td>
			</tr>
			<tr>
				<td>描述</td>
				<td>
					<textarea rows="3" cols="38" name="description"></textarea>
				</td>
			</tr>
			<tr>
				<td>所屬分類</td>
				<td>
					<select name="category_id">
						<c:forEach items="${cs}" var="c">
							<option value="${c.id}">${c.name}</option> 
						</c:forEach>
					</select>
				</td>
			</tr>
			<tr>
				<td>
					<input type="submit" value="添加圖書"></td>
			</tr>
		</table>
	</form>
	${message}
  </body>
</html>


【addCategory.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/manage/header.jsp" %>
	<form action="${pageContext.request.contextPath}/manageServlet?operation=addCategory" method="post">  
		<table align="center"  border="1" width="88%" >
			<tr>
				<td>*分類名稱</td>
				<td>
					<input type="text" name="name"/>
				</td>
			</tr>
			<tr>
				<td>概述</td>
				<td>
					<textarea rows="3" cols="34" name="description"></textarea>
				</td>
			</tr>
			<tr>
				<td colspan="2">
					<input type="submit" value="添加"/>
				</td>
			</tr>
		
		</table>
	</form>
  </body>
</html>

【showOrders.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/client/header.jsp" %>
	<h1>未發貨訂單如下:</h1>
		<table border="1" width="88%" style="text-align:center" align="center">
			<tr>
				<th>用戶</th>
				<th>訂單號</th>
				<th>金額</th>
				<th>訂單狀態</th>
				<th>明細</th>
			
			</tr>
			<c:forEach items="${ os}" var="o">
				<tr>
					<td>${o.user.username}
					<td>${o.ordernum}</td>
					<td>¥${o.price }元</td>
					<td>${o.state==0?'未發貨':'已發貨'}</td>
					<td>
						<a href="${pageContext.request.contextPath}/manageServlet?operation=showOrdersDetail&ordersId=${o.id}">訂單詳情</a>
					</td>
				</tr>
			</c:forEach>
		</table>
  </body>
</html>

【orderMsg.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/manage/header.jsp" %>
	訂單號:${o.ordernum}  </br>金額:¥${o.price }元</br>
	明細如下:</br>
		<table border="1" width="88%" style="text-align:center" align="center">
			<tr>
				<th>書名</th>
				<th>作者</th>
				<th>單價</th>
				<th>小計</th>
				<th>數量</th>
			</tr>
			<c:forEach items="${o.items }" var="i">
				<tr>
					<td>${i.book.name}</td>
					<td>${i.book.author}</td>
					<td>¥${i.book.price}元</td>
					<td>${i.num}</td>
					<td>¥${i.price}元</td>
				</tr>
			</c:forEach>
		</table>
   	收貨信息如下:</br>
   		地址:${o.user.address}</br> 		
   		電話:${o.user.cellphone}</br>
   		</hr>
   		<c:if test="${o.state==0 }">
   		<a href="${pageContext.request.contextPath}/manageServlet?operation=sureSend&ordersId=${o.id}">確認發貨</a>
 	</c:if>
  </body>
</html>

【welcome.jsp】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"
      contentType="text/html;charset=UTF-8"%>
<%@ include file="/manage/header.jsp" %>
	<h1 align="center">歡迎使用</h1>
  </body>
</html>

3. 後臺代碼

後臺代碼管理員和客戶兩種基本角色各自一個Servlet解決:

  • 客戶servlet:ClientServlet

public class ClientServlet extends HttpServlet {
	private BusinessService bs = new BusinessServiceImpl();
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String operation = request.getParameter("operation");
		if("showIndexCategory".equals(operation)){
			showIndexCategory(request,response);
		}
		if("showCategoryBook".equals(operation)){
			showCategoryBook(request,response);
		}
		if("buyBook".equals(operation)){
			buyBook(request,response);
		}
		if("genOrders".equals(operation)){
			genOrders(request,response);
		}
		if("regist".equals(operation)){
			regist(request,response);
		}
		if("login".equals(operation)){
			login(request,response);
		}
		if("logout".equals(operation)){
			logout(request,response);
		}
		if("showUsersOrders".equals(operation)){
			showUsersOrders(request,response);
		}
		if("showOrdersDetail".equals(operation)){
			showOrdersDetail(request,response);
		}
	}
	private void showOrdersDetail(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		//1.判斷用戶是否登錄。1.1沒有登錄,轉向登錄頁面
		HttpSession session = request.getSession();
		User user = (User)session.getAttribute("user");
		if(user==null){
			request.setAttribute("message", "請先登錄!2秒後將自動轉向登錄頁面。<meta http-equiv='Refresh' content='2;" +
					"URL="+request.getContextPath()+"/client/login.jsp'/>");
			request.getRequestDispatcher("/client/message.jsp").forward(request, response);
			return ;
		}
		String ordersId=request.getParameter("ordersId");
		Orders o = bs.findOrdersById(ordersId);//★★查詢的是訂單明細,與通過用戶id查訂單是不同的,明細中還要查出書的信息
		request.setAttribute("o", o);
		request.getRequestDispatcher("/client/ordersMsg.jsp").forward(request, response);
	}
	//依據用戶id查詢用戶訂單
	private void showUsersOrders(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		//1.判斷用戶是否登錄。1.1沒有登錄,轉向登錄頁面
		HttpSession session = request.getSession();
		User user = (User)session.getAttribute("user");
		if(user==null){
			request.setAttribute("message", "請先登錄!2秒後將自動轉向登錄頁面。<meta http-equiv='Refresh' content='2;" +
					"URL="+request.getContextPath()+"/client/login.jsp'/>");
			request.getRequestDispatcher("/client/message.jsp").forward(request, response);
			return ;
		}
		List<Orders> os = bs.findOrdersByUserId(user.getId());
		request.getSession().setAttribute("os", os);
		request.getRequestDispatcher("client/listOrders.jsp").forward(request,response);//轉向主頁
	}
	private void logout(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.getSession().invalidate();
		//注意:註銷時是直接到根目錄下
		request.getRequestDispatcher("/").forward(request, response);
	}
	private void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		User user = bs.login(username,password);
		if(user==null){
			request.setAttribute("message", "用戶名或密碼錯誤!");
			request.getRequestDispatcher("/client/message.jsp").forward(request, response);
		}else{
			request.getSession().setAttribute("user", user);
			response.sendRedirect(request.getContextPath());//轉向主頁
		}
	}
	private void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		User user = WebUtil.fillBean(request, User.class);
		if(!(user.getPassword()).equals(user.getPassword1())){//這裏是比較
			request.setAttribute("message", "兩次密碼輸入不匹配");
			request.getRequestDispatcher("/client/message.jsp").forward(request, response);
		}
		bs.regist(user);
		request.setAttribute("message", "註冊成功");
		request.getRequestDispatcher("/client/message.jsp").forward(request, response);
	}
	//生成訂單,把訂單和訂單項的信息存到數據庫中
	private void genOrders(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		//1.判斷用戶是否登錄。1.1沒有登錄,轉向登錄頁面
		HttpSession session = request.getSession();
		User user = (User)session.getAttribute("user");
		if(user==null){
			request.setAttribute("message", "請先登錄!2秒後將自動轉向登錄頁面。<meta http-equiv='Refresh' content='2;" +
					"URL="+request.getContextPath()+"/client/login.jsp'/>");
			request.getRequestDispatcher("/client/message.jsp").forward(request, response);
			return ;
		}
		//2.如果已經登錄,則將購物車裏面的東西按規則生成訂單信息
		//取出購物車:Cart Map<String,CartItem> 
		Cart cart  = (Cart)session.getAttribute("cart");//購物車<->訂單
		Orders orders = new Orders();
		orders.setNum(cart.getNum());
		orders.setPrice(cart.getPrice());
		//★▲弄購物項
		List<OrdersItem> ordersItems = new ArrayList<OrdersItem>();//訂單項<->訂單項
		for(Map.Entry<String, CartItem> item:cart.getItems().entrySet()){//★▲▲填充模型
			CartItem i = item.getValue();//得到購物項
			OrdersItem orderItem = new OrdersItem();
			orderItem.setNum(i.getNum());
			orderItem.setPrice(i.getPrice());
			orderItem.setBook(i.getBook());
			ordersItems.add(orderItem);
		}
		orders.setItems(ordersItems);
		bs.addOrders(orders,user);
		//刪除購物車
		request.getSession().removeAttribute("cart");
		request.setAttribute("message","訂單生成成功!購物車爲空");
		request.getRequestDispatcher("/client/message.jsp").forward(request, response);
	}

	private void buyBook(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		//購買書的id
		String bookId = request.getParameter("bookId");
		//獲取要購買的書
		Book book = bs.findBookById(bookId);
		HttpSession session = request.getSession();
		//★▲從HttpSession中取出購物車
		Cart cart = (Cart)session.getAttribute("cart");
		//>創建購物車(判斷是否有購物車)並放到httpsession中(購物車)
		if(cart==null){
			cart = new Cart();
			session.setAttribute("cart",cart);
		}
		//把書放到購物車中
		cart.addBook(book);
		//提示購買成功
		request.setAttribute("message", "購買成功,2秒後返回主頁面。<meta http-equiv='Refresh' content='2;" +
					"URL="+request.getContextPath());
		//頁面轉發
		request.getRequestDispatcher("/client/message.jsp").forward(request, response);
	}
	//按照分類進行分頁書籍查詢
	private void showCategoryBook(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String pagenum = request.getParameter("pagenum");
		String categoryId = request.getParameter("categoryId");//★1.相對於下面那個方法再添加的
		Page page = bs.findPageRecords(pagenum,categoryId);//★2.相對於下面那個方法再添加的
		page.setUrl("/clientServlet?operation=showCategoryBook&categoryId="+categoryId);//★3.相對於下面那個方法再添加的
		request.setAttribute("page", page);
		request.getRequestDispatcher("/client/welcome.jsp").forward(request,response);
	}
	//查詢所有分類,封裝後,便於前端主頁的顯示
	private void showIndexCategory(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		List<Category> cs = bs.findAllCategory();
		request.getSession().setAttribute("cs", cs);//★★用session放大範圍以保持header.jsp部分的數據維護
		//查詢所有書籍,還要分頁
		String pagenum = request.getParameter("pagenum");
		Page page = bs.findPageRecords(pagenum);
		page.setUrl("/clientServlet?operation=showIndexCategory");
		request.setAttribute("page", page);
		request.getRequestDispatcher("/client/welcome.jsp").forward(request,response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		this.doGet(request, response);
	}
}
</span>

  • 解決管理員基本功能的servlet:ManageServlet
public class ManageServlet extends HttpServlet {
	private BusinessService  bs = new BusinessServiceImpl();
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String operation = request.getParameter("operation");
		if("addCategory".equals(operation))
			addCategory(request,response);
		if("listCategory".equals(operation))
			listCategory(request,response);
		if("showCategoryUI".equals(operation))
			showCategoryUI(request,response);
		if("addBook".equals(operation))
			addBook(request,response);
		if("showAllBook".equals(operation))
			showAllBook(request,response);
		if("showAllOrders0".equals(operation)){
			showAllOrders0(request,response);
		}
		if("showAllOrders1".equals(operation)){
			showAllOrders1(request,response);
		}
		if("showOrdersDetail".equals(operation)){
			showOrdersDetail(request,response);
		}
		if("sureSend".equals(operation)){
			sureSend(request,response);
		}
	}
	private void sureSend(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String ordersId = request.getParameter("ordersId");
		bs.sureOrders(ordersId);
		request.setAttribute("message","成功發貨");
		request.getRequestDispatcher("/message.jsp").forward(request, response);
	}
	private void showOrdersDetail(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		//哪個用戶的也要查詢出來
		String ordersId = request.getParameter("ordersId");
		Orders o = bs.findOrdersById(ordersId);
		request.setAttribute("o", o);
		request.getRequestDispatcher("/manage/ordersMsg.jsp").forward(request, response);
	}
	private void showAllOrders1(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		List<Orders> os = bs.findOrdersByState(1);
		request.setAttribute("os", os);
		request.getRequestDispatcher("/manage/showOrders.jsp").forward(request, response);
	}
	//顯示所有爲發貨的訂單
	private void showAllOrders0(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		List<Orders> os = bs.findOrdersByState(0);
		request.setAttribute("os", os);
		request.getRequestDispatcher("/manage/showOrders.jsp").forward(request, response);
	}
	//後臺查詢所有圖書分頁
	private void showAllBook(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String pagenum = request.getParameter("pagenum");
		Page page = bs.findPageRecords(pagenum);
		page.setUrl("manageServlet?operation=showAllBook");//第二種分頁方式傳遞到jsp頁面的數據
		request.setAttribute("page",page);
		request.getRequestDispatcher("/manage/listBook.jsp").forward(request, response);
	}
	//添加書籍到數據庫:jsp頁面傳過來的是mutipart類型
	private void addBook(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String resultPath = "";
		String storePath = getServletContext().getRealPath("/files");
		try {
			Book book = new Book();
			DiskFileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(factory);
			List<FileItem> items = upload.parseRequest(request);//獲得待解析數據
			//解析數據
			for(FileItem item:items){
				if(item.isFormField()){
					//封裝數據到javabean中
					String filedName = item.getFieldName();//字段名,即javabean的屬性名,除了圖片
					String filedValue = item.getString(request.getCharacterEncoding());//保證得到的字符串是UTF-8格式
					BeanUtils.setProperty(book,filedName,filedValue);//到這一步,除了圖片路徑,其它數據都有了
				}else{
					//處理文件上傳
					InputStream in = item.getInputStream();
					String fileName = item.getName();//用戶上傳文件路徑名
					//從用戶上傳的文件路徑名中截取文件名。然後在加隨機碼,以防止用戶上傳的文件名相同發生衝突
					fileName = UUID.randomUUID()+fileName.substring(fileName.lastIndexOf("\\")+1);
					//設置存儲的圖片文件名
					book.setImage(fileName);
					OutputStream out = new FileOutputStream(storePath+"\\"+fileName);
					byte b[] = new byte[1024];
					int len = -1;
					while((len=in.read(b))!=-1){
						out.write(b,0,len);
					}
					out.close();
					in.close();
					item.delete();//★刪除臨時文件
				}
			}
			//System.out.println(book);
			bs.addBook(book);//★★先測試,然後看方法對不對,在寫service和dao層中寫該方法  
			List<Category> cs = bs.findAllCategory();
			request.setAttribute("cs", cs);//如果沒有這兩句,添加完成後添加頁面將不會顯示圖書分類
			resultPath = "/manage/addBook.jsp";
			request.setAttribute("message","<script type='text/javascript'>alert('添加成功')</script>");
		} catch (Exception e) {
			e.printStackTrace();
			resultPath="/message.jsp";
			//TODO
			request.setAttribute("message", "上傳出問題了");
		}
		request.getRequestDispatcher(resultPath).forward(request, response);
	}

	private void showCategoryUI(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		List<Category> cs = bs.findAllCategory();
		request.setAttribute("cs", cs);
		request.getRequestDispatcher("/manage/addBook.jsp").forward(request, response);
	}

	private void listCategory(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		List<Category> cs = bs.findAllCategory();
		request.setAttribute("cs", cs);
		request.getRequestDispatcher("/manage/listCategory.jsp").forward(request, response);	
	}

	private void addCategory(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		Category ca = WebUtil.fillBean(request, Category.class);
		bs.addCategory(ca);
		request.setAttribute("message", "<script type='text/javascript'>alert('添加成功')</script>");
		request.getRequestDispatcher("/manage/addCategory.jsp").forward(request, response);		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		this.doGet(request, response);

	}

}



發佈了56 篇原創文章 · 獲贊 15 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章