主要內容:l 完成購物車的其他準系統;l 產生訂單;l 小結1、購物車的其它功能對購物車的物品數量修改和物品刪除功能是兩外兩個準系統。實現過程與添加工程比較類似,這裡只給出參考代碼:1.1 模型部分檔案名稱:CartManager.java(在上一講的基礎上修改,紅色部分為添加的內容)package javabean; import java.util.ArrayList;import java.util.Iterator; public class CartManager{ // 表示購物車 private ArrayList cart; public void setCart(ArrayList cart) { this.cart = cart; } public ArrayList getCart() { return cart; } // 添加的物品&數量 public ArrayList addToCart(Goods g,int quantity) { if(cart==null){ // 執行個體化購物車對象 cart=new ArrayList(); // 添加到購物車 Item item = new Item(g,quantity); cart.add(item); } else { // 轉換成數組 Object items[] = cart.toArray(); boolean find=false; // 表示是否尋找到 for(int i=0;i<items.length;i++) { Item temp = (Item)items[i]; // 判斷購物車中是否存在要添加的物品 if(temp.getGoods().getGoodsid().equals(g.getGoodsid())) { temp.setQuantity(temp.getQuantity()+quantity); find=true; break; } } if(!find) { // 添加到購物車 Item item = new Item(g,quantity); cart.add(item); } } return cart; } public void delete(String goodsid) { // 轉換成Iterator對象 Iterator i = cart.iterator(); while(i.hasNext()) { // 得到一個購物項 Item temp = (Item)i.next(); if(temp.getGoods().getGoodsid().equals(goodsid)) { cart.remove(temp); break; } } } public void update(String goodsid,int quantity) { Iterator i = cart.iterator(); while(i.hasNext()) { // 得到一個購物項 Item temp = (Item)i.next(); if(temp.getGoods().getGoodsid().equals(goodsid)) { temp.setQuantity(quantity); break; } } } }1.2 修改視圖部分檔案名稱:cart.jsp(在上一講的基礎上修改,紅色部分為添加的內容)<%@ page contentType="text/html;charset=gb2312"%><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>購物車中的資訊<br><table border=1> <tr> <td>物品編號</td> <td>物品名稱</td> <td>價格</td> <td>數量</td> </tr><c:forEach var="item" items="${cart}"> <tr><form action="processCart"> <input type="hidden" name="goodsid" value="${item.goods.goodsid}"> <td>${item.goods.goodsid}</td> <td>${item.goods.goodsname}</td> <td>${item.goods.price}</td> <td><input type="text" name="quantity" value="${item.quantity}"></td> <td><input type="submit" name="action" value="修改"></td> <td><input type="submit" name="action" value="刪除"></td></form> </tr></c:forEach></table>1.3 控制器刪除和修改功能使用相同的控制器,會根據提交按鈕的值確定要完成的功能,參考代碼如下:檔案名稱:ProcessCart.javapackage servlet; import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import javabean.*;import java.util.*; public class ProcessCart extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { //response.setContentType("text/html;charset=gb2312"); //PrintWriter out = response.getWriter(); try{ // request.setCharacterEncoding("gb2312"); // 得到要添加的物品的編號 String goodsid = request.getParameter("goodsid"); // 得到執行命令:刪除還是修改 String action = request.getParameter("action"); action=new String(action.getBytes("8859_1")); //out.println(action); String quantity=null; if(action.equals("修改")) { quantity = request.getParameter("quantity"); } // 建立JavaBean對象 CartManager cartManager=new CartManager(); // 得到session對象 HttpSession session = request.getSession(true); // 得到購物車對象 ArrayList cart = (ArrayList)session.getAttribute("cart"); // 用cart初始化cartManager cartManager.setCart(cart); if(action.equals("修改")) { cartManager.update(goodsid,Integer.parseInt(quantity)); }else { cartManager.delete(goodsid); } // 把購物車重新存到session session.setAttribute("cart",cartManager.getCart()); }catch(Exception e){ //out.println(e.toString()); } response.sendRedirect("cart.jsp"); } public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException { doGet(request,response); }}2、產生訂單如果使用者購物完成會下訂單,通常需要輸入個人的送貨資訊等,然後把訂單資訊儲存到資料庫中。這裡這介紹如何組織資訊,儲存資訊的過程不再介紹。需要兩張表:l 訂單表 l 訂單明細表訂單表中資訊:l 訂單號: 日期+流水號,通常作主鍵l 訂單的發出者:通常從session中擷取資訊 或者 讓使用者輸入(沒有登入的情況下)l 訂單的日期:l 訂單的狀態:l 付款條件l 寄送地址l 聯絡電話l 接收人訂單明細表(訂單號和物品編號作為聯合主鍵):l 訂單號l 物品的編號l 該物品的數量在完成訂單添加的時候,最好能進行交易處理。3、小結整個JSP培訓基本上按照MVC模式進行,自己在完成任何功能的時候都可以按照這個思路來做。3.1 MVC思路分析MVC:對於每個功能,都分成3部分考慮。l 先考慮v:表示試圖,與人交戶,分別輸入和輸出。l M:模型,通常使用JavaBean編寫,對於每個功能實際上對應的一個方法(或者多個方法),應該考慮整個方法執行的時候需要的條件(方法的輸入),如何反饋(傳回值類型和異常類型),具體功能使用Java代碼實現。l C:記住4句話:n 擷取請求資訊:request.getParameter方法,getParameterValues方法n 調用JavaBean:建立對象、執行個體化、初始化、調用方法n 傳值:request.setAttributen 轉向: RequestDispatcher或者response.sendRedirect方法 因為控制器的功能非常固定,所以掌握上沒有難度。而模型部分屬於Java代碼,與JSP文法沒有太大關係,所以對讀者來說,學習JSP的難度主要在視圖部分。3.2 輸入和輸出輸入:l 最基本的方式:表單提交,使用表單元素提交資訊,通過form的action屬性指定處理檔案(控制器)。比較典型的隱藏欄位的使用(修改資訊、刪除)。l 超鏈方法:典型的用法,就是使用“?”傳遞參數,例如分頁顯示、刪除(超鏈方式)。l 通過地址欄。這些也非常固定。輸出:l 靜態資訊的輸出:表頭,直接輸出l 單個對象:例如user,使用${user.屬性名稱}輸出l 集合對象:<c:forEach>標籤輸出l 錯誤資訊,包括提示資訊:${error}l 特定條件下的資訊輸出:<c:if>標籤處理這些相對比較靈活,主要是JSTL和EL的靈活使用。所以需要把JSTL和EL掌握好。3.3 檔案之間的關係靜態:檔案之間的關聯關係(多次請求之間):按鈕提交、超鏈、地址欄輸入動態:檔案之間的關係(一次請求):<jsp:forward> <jsp:include> response.sendRedirect RequestDispatcher <%@ include file=”” %>。3.4 資訊的儲存:l 持久儲存:就是使用資料庫儲存,主要使用JDBC技術(O/R映射,JPA)。l 臨時儲存:記憶體儲存,request(MVC模式傳值)、session(登入使用者的資訊、購物車資訊)、appliction(公開的聊天室)系列培訓筆記到此結束。 本人連絡方式:lixucheng@dl.cnhttp://blog.csdn.net/javaeeteacher參考教材:《Java Web程式設計基礎教程》