当前位置:  编程技术>java/j2ee

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

    来源: 互联网  发布时间:2014-10-13

    本文导语:  理解“音乐无国界”   “音乐无国界”的主界面是JSP页 Eshop.jsp(见代码清单1)。你会注意到,这个页面几乎只作为专门的用户界面,不承担任何处理任务――是一个最理想的JSP方案。另外,请注意另一个JSP页Cart.jsp(见代码...

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

  代码清单 1:EShop.jsp

  

  

  

   Music Without Borders

  

  

  

   Music Without Borders

  

  



  

  

   CD:

  

   Yuan | The Guo Brothers | China | $14.95

   Drums of Passion | Babatunde Olatunji | Nigeria | $16.95

   Kaira | Tounami Diabate| Mali | $16.95

   The Lion is Loose | Eliades Ochoa | Cuba | $13.95

   Dance the Devil Away | Outback | Australia | $14.95

   Record of Changes | Samulnori | Korea | $12.95

   Djelika | Tounami Diabate | Mali | $14.95

   Rapture | Nusrat Fateh Ali Khan | Pakistan | $12.95

   Cesaria Evora | Cesaria Evora | Cape Verde | $16.95

   Ibuki | Kodo | Japan | $13.95

  

   Quantity:

  

  

  

  

  



  

  

  

  代码清单 2:Cart.jsp

  

   0)) {

  %>

  

  

  

   ALBUM

   ARTIST

   COUNTRY

   PRICE

   QUANTITY

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  

    

    

    

  

  



  

    

    

  

  

  

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

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

   0)) {

  %>

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


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

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

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

  

  描述物品的变量一旦被创建,就会被用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;

   }

  } 


    
 
 

您可能感兴趣的文章:

  • 实例讲解JSP Model2体系结构(上)
  • 实例讲解JSP Model2体系结构(下)
  • oracle的存储过程实例讲解
  • Jquery each方法跳出循环,并获取返回值(实例讲解)
  • JavaScript正则表达式验证中文实例讲解
  • ThinkPHP之A方法实例讲解
  • gridview的buttonfield获取该行的索引值(实例讲解)
  • 使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
  • Jquery ajaxStart()与ajaxStop()方法(实例讲解)
  • C#控制台带参数程序源码编写实例讲解
  • jquery遍历select元素(实例讲解)
  • Android入门之LinearLayout、AbsoluteLayout的用法实例讲解
  • sql server 分组统计实例讲解
  • python使用xmlrpc实例讲解
  • Java冒泡排序(Bubble Sort)实例讲解
  • c#委托把方法当成参数(实例讲解)
  • Android获取手机型号/系统版本号/App版本号等信息实例讲解
  • C与C++之间相互调用实例方法讲解
  • C# 委托(跨窗体操作控件)实例流程讲解
  • jQuery:delegate中select()不起作用的解决方法(实例讲解)
  • 互斥量mutex的简单使用(实例讲解)
  • MySQL数据库防止人为误操作的实例讲解
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • 可以有其他两个类的实例同时调用一个java实例的两个方法吗?
  • Bean的作用域及Spring 暴露 Bean实例的方法介绍
  • 请问:类的实例化是怎么一回事?如何进行实例化?
  • Python 3 Tkinter教程之事件Event绑定处理代码实例
  • 万般火急!关于java打印,已经得到printerJob实例,那么怎么通过它得到Pageable实例?
  • Python namedtuple(命名元组)使用实例
  • 类的方法和实例方法,类字段和实例字段有什么不同,在使用上?
  • boost库区间range基本原理及使用实例
  • 既然在定义实例变量的时候可以初始化实例变量的值,那还要构造函数干吗?谢谢!
  • php session_id()函数介绍及代码实例
  • 怎么样判断一个类是否已经被实例化,并关闭这个实例,而且保证系统不退出(详情见内)
  • .NET下 c#通过COM组件操作并导出Excel实例代码
  • 请问在一个servlet里取得一个用singleton模式实现的类实例,那么这个类实例的生命周期是怎样的?
  • java Servlet获取和设置cookie实例代码
  • C#静态变量与实例变量实例分析
  • Python namedtuple(命名元组)使用实例 iis7站长之家
  • 实例变量和类变量
  • c++类库Boost::bimap(双向映射)介绍及使用实例
  • 又谁能告诉我实例因该怎么去理解它?????????/
  • OpenStack中compute介绍和compute实例需要注意的问题
  • Keepalived 能配两个虚拟ip吗,匹配两个数据库实例?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3