model2 简述什么是jsp_实例讲解JSP Model2体系结构(中)

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

更新时间:2006年10月13日 00:00:00   作者:

理解“音乐无国界”

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

代码清单 1:EShop.jsp

Music Without Borders

Music Without Borders


action="/examples/servlet/ShoppingServlet"

method="POST">

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

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

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

%>

ALBUMARTISTCOUNTRYPRICEQUANTITY

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

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

%>

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;

}

}

相关文章

JSP应用的安全问题...2006-10-10

用js绘图...2006-10-10

这篇文章主要介绍了JSP生成九九乘法表的简单实例,希望通过本文大家不仅实现九九乘法表还有掌握JSP表达式的使用方法,需要的朋友可以参考下2017-09-09

struts1 标签实例,应用。2009-06-06

JAVA/JSP学习系列之四(Orion App Server的安装)...2006-10-10

JAVA/JSP学习系列之五(JDBC-ODBC翻页例子)...2006-10-10

这篇文章主要介绍了jsp页面如何获取服务器时间及简单的调用示例,需要的朋友可以参考下2014-06-06

这篇文章主要为大家详细介绍了EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-11-11

这篇文章主要介绍了Eclipse XSD 生成枚举类型的Schema的实例详解的相关资料,希望通过本能帮助到大家,需要的朋友可以参考下2017-09-09

用jsp编写文件上载...2006-10-10

最新评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值