文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页网页设计JSP实例 → 实例讲解JSP Model2体系结构(中)

实例讲解JSP Model2体系结构(中)

时间:2004/11/7 3:39:00来源:本站整理作者:蓝点我要评论(0)

理解“音乐无国界”

  “音乐无国界”的主界面是JSP页 Eshop.jsp(见代码清单1)。你会注意到,这个页面几乎只作为专门的用户界面,不承担任何处理任务――是一个最理想的JSP方案。另外,请注意另一个JSP页Cart.jsp(见代码清单2)被Eshop.jsp通过指令包含于其中。



  代码清单 1:EShop.jsp



  <%@ page session="true" %>



  



  



   Music Without Borders



  



  



  



   Music Without Borders



  




  





  





  



   action="/examples/servlet/ShoppingServlet"



   method="POST">



   CD:



  



   Quantity:



  



  



  




  




  





  



  



  



  代码清单 2:Cart.jsp



  <%@ page session="true" import="java.util.*, shopping.CD" %>



  <%



   Vector buylist = (Vector) session.getValue("shopping.shoppingcart");



   if (buylist != null && (buylist.size() > 0)) {



  %>



  





  



  



  



  



  



  



  



  



  



   <%



   for (int index=0; index < buylist.size();index++) {



   CD anOrder = (CD) buylist.elementAt(index);



   %>



  



  



  



  



  



  



  



    



    <% } %>



  
ALBUM ARTIST COUNTRY PRICE QUANTITY
<%= anOrder.getAlbum() %> <%= anOrder.getArtist() %> <%= anOrder.getCountry() %> <%= anOrder.getPrice() %> <%= anOrder.getQuantity() %>



  



    action="/examples/servlet/ShoppingServlet"



    method="POST">



  



  



  



  




    




  





  




    action="/examples/servlet/ShoppingServlet"



    method="POST">



    



    



  




  




  <% } %>



  这里,Cart.jsp操纵着基于会话的购物车的表达,在MVC体系中,购物车就充当Model的角色。



  观察Cart.jsp开头处的脚本片段:



  <%



   Vector buylist = (Vector) session.getValue("shopping.shoppingcart");



   if (buylist != null && (buylist.size() > 0)) {



  %>



  这段脚本主要是从会话中取出购物车。如果购物车是空的或尚未创建,则它什么都不显示;因此,当用户第一次访问这个应用程序时,呈现给他的视图如图3所示:





  图3:音乐无国界,主视图



  图中按钮文字:放入购物车



  如果购物车不为空,则选中的物品被依次从购物车中取出,如下面的脚本片段所示:



  <%



   for (int index=0; index < buylist.size(); index++) {



    CD anOrder = (CD) buylist.elementAt(index);



  %>



  描述物品的变量一旦被创建,就会被用JSP表达式直接嵌入静态HTML模板中去。图4显示了当用户向购物车中放入一些物品后的视图。





  图4:音乐无国界,购物车视图



  图中文字:Music Without Borders:音乐无国界;Quantity:数量;ALBUM:唱片;ARTIST:演唱者;COUNTRY:国家;PRICE:价格;Delete:删除;Checkout:结帐。



  这里需要注意的重要一点是,在Eshop.jsp和Cart.jsp中实现的对所有动作的处理都由一个servlet――ShoppingServlet.java控制,如代码清单3所示:



  代码清单3:ShoppingServlet.java



  import java.util.*;



  import java.io.*;



  import javax.servlet.*;



  import javax.servlet.http.*;



  import shopping.CD;



  public class ShoppingServlet extends HttpServlet {



   public void init(ServletConfig conf) throws ServletException {



    super.init(conf);



   }



   public void doPost (HttpServletRequest req, HttpServletResponse res)



     throws ServletException, IOException {



    HttpSession session = req.getSession(false);



    if (session == null) {



     res.sendRedirect("http://localhost:8080/error.html");



    }



    Vector buylist=



     (Vector)session.getValue("shopping.shoppingcart");



    String action = req.getParameter("action");



    if (!action.equals("CHECKOUT")) {



     if (action.equals("DELETE")) {



      String del = req.getParameter("delindex");



      int d = (new Integer(del)).intValue();



      buylist.removeElementAt(d);



     } else if (action.equals("ADD")) {



      //以前是否购买了同样的cd?



      boolean match=false;



      CD aCD = getCD(req);



      if (buylist==null) {



       //将第一张CD放入购物车



       buylist = new Vector(); //第一份定单



       buylist.addElement(aCD);



      } else { // 不是第一次购买



       for (int i=0; i< buylist.size(); i++) {



        CD cd = (CD) buylist.elementAt(i);



        if (cd.getAlbum().equals(aCD.getAlbum())) {



         cd.setQuantity(cd.getQuantity()+aCD.getQuantity());



         buylist.setElementAt(cd,i);



         match = true;



        } //if name matches结束



       } // for循环结束



       if (!match)



        buylist.addElement(aCD);



      }



     }



     session.putValue("shopping.shoppingcart", buylist);



     String url="/jsp/shopping/EShop.jsp";



     ServletContext sc = getServletContext();



     RequestDispatcher rd = sc.getRequestDispatcher(url);



     rd.forward(req, res);



    } else if (action.equals("CHECKOUT")) {



     float total =0;



     for (int i=0; i< buylist.size();i++) {



      CD anOrder = (CD) buylist.elementAt(i);



      float price= anOrder.getPrice();



      int qty = anOrder.getQuantity();



      total += (price * qty);



     }



     total += 0.005;



     String amount = new Float(total).toString();



     int n = amount.indexOf('.');



     amount = amount.substring(0,n+3);



     req.setAttribute("amount",amount);



     String url="/jsp/shopping/Checkout.jsp";



     ServletContext sc = getServletContext();



     RequestDispatcher rd = sc.getRequestDispatcher(url);



     rd.forward(req,res);



    }



   }



   private CD getCD(HttpServletRequest req) {



    //想象一下如果这些都在一个脚本片段中会有多么难看



    String myCd = req.getParameter("CD");



    String qty = req.getParameter("qty");



    StringTokenizer t = new StringTokenizer(myCd,"|");



    String album= t.nextToken();



    String artist = t.nextToken();



    String country = t.nextToken();



    String price = t.nextToken();



    price = price.replace('$',' ').trim();



    CD cd = new CD();



    cd.setAlbum(album);



    cd.setArtist(artist);



    cd.setCountry(country);



    cd.setPrice((new Float(price)).floatValue());



    cd.setQuantity((new Integer(qty)).intValue());



    return cd;



   }



  } 

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 没有查询到任何记录。 学习java必学的几门技术jspSmartUpload上传下载全攻略Tomcat5.x中的虚拟主机配置方法利用iText在JSP中生成PDF报表

人气排行 告诉大家JSP连接数据库程序代码JSP单页面网站文件管理器jsp留言板源代码一: 给jsp初学者.在jsp中用bean和servlet联合实现用户注册、使用JSP + JAVABEAN + XML 开发的一个例子jsp在线考试系统-jsp文件 jsp计数器代码JSP/JAVABEAN+TOMCAT4.0.5+MYSQL组合建站总