首页后端开发其他后端知识实例讲解JSP Model2体系结构(中)

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

时间2024-02-07 20:35:03发布访客分类其他后端知识浏览963
导读:收集整理的这篇文章主要介绍了实例讲解JSP Model2体系结构(中),觉得挺不错的,现在分享给大家,也给大家做个参考。 理解“音乐无国界” “音乐无国界”的主界面是JSP页 Esh...
收集整理的这篇文章主要介绍了实例讲解JSP Model2体系结构(中),觉得挺不错的,现在分享给大家,也给大家做个参考。 理解“音乐无国界”
  “音乐无国界”的主界面是JSP页 Eshop.jsp(见代码清单1)。你会注意到,这个页面几乎只作为专门的用户界面,不承担任何处理任务――是一个最理想的JSP方案。另外,请注意另一个JSP页Cart.jsp(见代码清单2)被Eshop.jsp通过指令jsp:include page="Cart.jsp" flush="true" /> 包含于其中。

  代码清单 1:EShop.jsp

  %@ page session="true" %>

  htML>

  head>

   tITle> music Without Borders/title>

  /head>

  body bgcolor="#33CCFF">

   font face="Times New roman,Times" size="+3">

   Music Without Borders

   /font>

   hr> p>

   center>

   form name="shoppingForm"

   action="/examples/servlet/ShoppingServlet"

   method="POST">

   b> CD:/b>

   select name=CD>

   option> Yuan | The Guo brothers | China | $14.95/option>

   option> Drums of Passion | Babatunde Olatunji | Nigeria | $16.95/option>

   option> Kaira | Tounami Diabate| Mali | $16.95/option>

   option> The Lion is Loose | Eliades Ochoa | Cuba | $13.95/option>

   option> Dance the Devil Away | Outback | Australia | $14.95/option>

   option> Record of Changes | Samulnori | Korea | $12.95/option>

   option> Djelika | Tounami Diabate | Mali | $14.95/option>

   option> Rapture | Nusrat Fateh Ali Khan | Pakistan | $12.95/option>

   option> Cesaria Evora | Cesaria Evora | CaPE Verde | $16.95/option>

   option> Ibuki | Kodo | Japan | $13.95/option>

   /select>

   b> Quantity: /b> input type="text" name="qty" SIZE="3" value=1>

   input type="hidden" name="action" value="ADD">

   input type="submit" name="Submit" value="Add to Cart">

   /form>

   /center>

   p>

   jsp:include page="Cart.jsp" flush="true" />

  /body>

  /html>

  代码清单 2:Cart.jsp

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

  %

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

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

  %>

  center>

  table border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF">

   tr>

   td> b> ALBUM/b> /td>

   td> b> ARTIST/b> /td>

   td> b> COUNTRY/b> /td>

   td> b> PRICE/b> /td>

   td> b> QUANTITY/b> /td>

   td> /td>

   /tr>

   %

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

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

   %>

   tr>

   td> b> %= anOrder.getAlbum() %> /b> /td>

   td> b> %= anOrder.getArtist() %> /b> /td>

   td> b> %= anOrder.getCountry() %> /b> /td>

   td> b> %= anOrder.getPrice() %> /b> /td>

   td> b> %= anOrder.getQuantity() %> /b> /td>

   td>

   form name="deleteForm"

    action="/examples/servlet/ShoppingServlet"

    method="POST">

   input type="submit" value="Delete">

   input type="hidden" name= "delindex" value='%= index %> '>

   input type="hidden" name="action" value="DELETE">

   /form>

     /td>

    /tr>

    % } %>

   /table>

   p>

   form name="checkoutForm"

    action="/examples/servlet/ShoppingServlet"

    method="POST">

    input type="hidden" name="action" value="CHECKOUT">

    input type="submit" name="Checkout" value="Checkout">

   /form>

   /center>

  % } %>

  这里,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;

   }

  }   您可能感兴趣的文章:
  • JSP运行原理和九大隐式对象说明
  • 实例讲解JSP Model2体系结构(下)
  • 实例讲解JSP Model2体系结构(上)
  • JSP中使用JavaScript动态插入删除输入框实现代码
  • JSP + ajax实现输入框自动补全功能 实例代码
  • JSP输出HTML时产生的大量空格和换行的去除方法
  • jsp 页面上图片分行输出小技巧
  • JSP动态输出Excel及中文乱码的解决
  • Jsp结合XML+XSLT将输出转换为Html格式
  • jsp源码实例1(输出)
  • JSP程序运行原理、文档结构及简单输入输出实例分析

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 实例讲解JSP Model2体系结构(中)
本文地址: https://pptw.com/jishu/604527.html
JDBCTM 指南:入门4 - Statement 实例讲解JSP Model2体系结构(下)

游客 回复需填写必要信息