📄 68.html
字号:
anOrder.getAlbum() %></b></td> <BR><BR>
<td><b><%= anOrder.getArtist()
%></b></td> <BR><BR> <td><b><%=
anOrder.getCountry() %></b></td> <BR><BR>
<td><b><%= anOrder.getPrice()
%></b></td> <BR><BR> <td><b><%=
anOrder.getQuantity() %></b></td> <BR><BR>
<td> <BR><BR> <form name="deleteForm"
<BR><BR> action="/examples/servlet/ShoppingServlet"
<BR><BR> method="POST"> <BR><BR> <input type="submit"
value="Delete"> <BR><BR> <input type="hidden" name=
"delindex" value='<%= index %>'> <BR><BR> <input
type="hidden" name="action" value="DELETE"> <BR><BR>
</form> <BR><BR> </td> <BR><BR> </tr>
<BR><BR> <% } %> <BR><BR> </table> <BR><BR>
<p> <BR><BR> <form name="checkoutForm"
<BR><BR> action="/examples/servlet/ShoppingServlet"
<BR><BR> method="POST"> <BR><BR> <input type="hidden"
name="action" value="CHECKOUT"> <BR><BR> <input
type="submit" name="Checkout" value="Checkout"> <BR><BR>
</form> <BR><BR> </center> <BR><BR> <% } %>
<BR><BR> 这里,Cart.jsp操纵着基于会话的购物车的表达,在MVC体系中,购物车就充当Model的角色。
<BR><BR> 观察Cart.jsp开头处的脚本片段: <BR><BR> <% <BR><BR> Vector
buylist = (Vector) session.getValue("shopping.shoppingcart");
<BR><BR> if (buylist != null && (buylist.size() > 0)) {
<BR><BR> %>
<BR><BR> 这段脚本主要是从会话中取出购物车。如果购物车是空的或尚未创建,则它什么都不显示;因此,当用户第一次访问这个应用程序时,呈现给他的视图如图3所示:
<BR><BR><IMG
src="68-3.gif" tppabs="http://www.chinajavaworld.com/doc/servlet-jsp/images/68-3.gif">
<BR> 图3:音乐无国界,主视图 <BR><BR> 图中按钮文字:放入购物车
<BR><BR> 如果购物车不为空,则选中的物品被依次从购物车中取出,如下面的脚本片段所示: <BR><BR> <%
<BR><BR> for (int index=0; index < buylist.size(); index++) {
<BR><BR> CD anOrder = (CD) buylist.elementAt(index);
<BR><BR> %>
<BR><BR> 描述物品的变量一旦被创建,就会被用JSP表达式直接嵌入静态HTML模板中去。图4显示了当用户向购物车中放入一些物品后的视图。
<BR><BR><IMG
src="68-4.gif" tppabs="http://www.chinajavaworld.com/doc/servlet-jsp/images/68-4.gif">
<BR> 图4:音乐无国界,购物车视图 <BR><BR> 图中文字:Music Without
Borders:音乐无国界;Quantity:数量;ALBUM:唱片;ARTIST:演唱者;COUNTRY:国家;PRICE:价格;Delete:删除;Checkout:结帐。
<BR><BR> 这里需要注意的重要一点是,在Eshop.jsp和Cart.jsp中实现的对所有动作的处理都由一个servlet――ShoppingServlet.java控制,如代码清单3所示:
<BR><BR> 代码清单3:ShoppingServlet.java <BR><BR> import java.util.*;
<BR><BR> import java.io.*; <BR><BR> import javax.servlet.*;
<BR><BR> import javax.servlet.http.*; <BR><BR> import shopping.CD;
<BR><BR> public class ShoppingServlet extends HttpServlet {
<BR><BR> public void init(ServletConfig conf) throws
ServletException { <BR><BR> super.init(conf); <BR><BR> }
<BR><BR> public void doPost (HttpServletRequest req,
HttpServletResponse res) <BR><BR> throws ServletException,
IOException { <BR><BR> HttpSession session =
req.getSession(false); <BR><BR> if (session == null) {
<BR><BR> res.sendRedirect("http://localhost:8080/error.html");
<BR><BR> } <BR><BR> Vector buylist= <BR><BR>
(Vector)session.getValue("shopping.shoppingcart");
<BR><BR> String action = req.getParameter("action");
<BR><BR> if (!action.equals("CHECKOUT")) { <BR><BR> if
(action.equals("DELETE")) { <BR><BR> String del =
req.getParameter("delindex"); <BR><BR> int d = (new
Integer(del)).intValue(); <BR><BR> buylist.removeElementAt(d);
<BR><BR> } else if (action.equals("ADD")) {
<BR><BR> //以前是否购买了同样的cd? <BR><BR> boolean match=false;
<BR><BR> CD aCD = getCD(req); <BR><BR> if (buylist==null)
{ <BR><BR> //将第一张CD放入购物车 <BR><BR> buylist = new
Vector(); //第一份定单 <BR><BR> buylist.addElement(aCD);
<BR><BR> } else { // 不是第一次购买 <BR><BR> for (int i=0; i<
buylist.size(); i++) { <BR><BR> CD cd = (CD)
buylist.elementAt(i); <BR><BR> if
(cd.getAlbum().equals(aCD.getAlbum())) { <BR><BR>
cd.setQuantity(cd.getQuantity()+aCD.getQuantity()); <BR><BR>
buylist.setElementAt(cd,i); <BR><BR> match = true;
<BR><BR> } //if name matches结束 <BR><BR> } // for循环结束
<BR><BR> if (!match) <BR><BR> buylist.addElement(aCD);
<BR><BR> } <BR><BR> } <BR><BR>
session.putValue("shopping.shoppingcart", buylist); <BR><BR>
String url="/jsp/shopping/EShop.jsp"; <BR><BR> ServletContext sc
= getServletContext(); <BR><BR> RequestDispatcher rd =
sc.getRequestDispatcher(url); <BR><BR> rd.forward(req, res);
<BR><BR> } else if (action.equals("CHECKOUT")) { <BR><BR>
float total =0; <BR><BR> for (int i=0; i< buylist.size();i++)
{ <BR><BR> CD anOrder = (CD) buylist.elementAt(i);
<BR><BR> float price= anOrder.getPrice(); <BR><BR> int qty
= anOrder.getQuantity(); <BR><BR> total += (price * qty);
<BR><BR> } <BR><BR> total += 0.005; <BR><BR> String
amount = new Float(total).toString(); <BR><BR> int n =
amount.indexOf('.'); <BR><BR> amount = amount.substring(0,n+3);
<BR><BR> req.setAttribute("amount",amount); <BR><BR> String
url="/jsp/shopping/Checkout.jsp"; <BR><BR> ServletContext sc =
getServletContext(); <BR><BR> RequestDispatcher rd =
sc.getRequestDispatcher(url); <BR><BR> rd.forward(req,res);
<BR><BR> } <BR><BR> } <BR><BR> private CD
getCD(HttpServletRequest req) {
<BR><BR> //想象一下如果这些都在一个脚本片段中会有多么难看 <BR><BR> String myCd =
req.getParameter("CD"); <BR><BR> String qty =
req.getParameter("qty"); <BR><BR> StringTokenizer t = new
StringTokenizer(myCd,"|"); <BR><BR> String album= t.nextToken();
<BR><BR> String artist = t.nextToken(); <BR><BR> String
country = t.nextToken(); <BR><BR> String price = t.nextToken();
<BR><BR> price = price.replace('$',' ').trim(); <BR><BR> CD cd
= new CD(); <BR><BR> cd.setAlbum(album);
<BR><BR> cd.setArtist(artist);
<BR><BR> cd.setCountry(country); <BR><BR> cd.setPrice((new
Float(price)).floatValue()); <BR><BR> cd.setQuantity((new
Integer(qty)).intValue()); <BR><BR> return cd; <BR><BR> }
<BR><BR> } <BR><BR>
</td>
</tr>
</td>
</tr>
</div>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -