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

网络营销 2025-04-24 14:04www.168986.cn短视频营销

每次用户在Eshop.jsp页面选购一件商品,页面都会向控制servlet发送一个请求。这个servlet扮演着重要的角色,它根据用户的操作决定采取适当的行动。每当用户选择加入一件物品时,servlet会处理相关的请求参数。

为了表示用户选择的商品,servlet会实例化一个CD Bean(如代码清单4所示)。这个CD Bean包含了商品的详细信息,如专辑名称、艺术家、产地、价格和数量。然后,这个servlet会在会话中更新购物车对象。

让我们关注代码清单4中的CD类。这个类包含了商品的基本属性,如专辑、艺术家、国家、价格和数量。我们还为这个类提供了一系列的方法,用于设置和获取这些属性。

在servlet中,我们增加了额外的智能。这意味着,如果用户在购物车中已经选择了一件CD,servlet只需要增加这个CD Bean在购物车中的计数,而不需要重新添加。这个控制servlet还能处理Cart.jsp页面触发的动作,比如用户从购物车中删除商品或进行结账。

值得注意的是,控制servlet在整个购物过程中拥有对资源的完全控制权。它根据用户的操作决定调用哪些资源。例如,当用户决定添加或删除购物车中的商品时,控制servlet会处理这些请求并将结果发送回Eshop.jsp页面。这促使页面重新显示主视图,此时购物车中显示的数据已经被更新。

这个过程展现了Java Web开发中典型的MVC(Model-View-Controller)模式的应用。在这个模式中,servlet作为控制器接收和处理来自页面的请求,模型(在这里是CD Bean和购物车对象)管理数据,而页面(如Eshop.jsp和Cart.jsp)则作为视图展示数据。这种模式使得代码更加清晰、易于维护,并且有助于提高应用程序的性能和可重用性。当用户决定结账时,这一请求经过处理后,将被导向Checkout.jsp页面。以下是实现的调度程序:

将Checkout.jsp页面的URL定义为一个字符串,然后通过ServletContext对象获取RequestDispatcher。接着,使用forward()方法将请求和响应对象传递给Dispatcher,实现页面跳转。

以下是Checkout.jsp页面的代码示例:

页面头部定义了一些基本元素,包括页面的标题以及背景颜色等。页面主体部分主要展示购物车的结算内容。

代码的具体实现如下:

```jsp

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

Music Without Borders Checkout

Music Without Borders Checkout


<%

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

String amount = (String) request.getAttribute("amount");

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

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

%>

<%

}

sessionvalidate(); // 清除会话信息,以便下次购物重新开始

%>

Shop some more!

图5展示了结账时客户端的视图。在用户完成结账后,及时销毁会话对象至关重要。页面需要调用sessionvalidate()来确保这一点。这一处理是必要的,原因有二:

如果不终止会话,用户的购物车将不会重新初始化。当他试图在未结账的情况下开始新一轮购物时,购物车中仍将显示他已购买的物品。如果用户未结账就离开,会话对象将不会失效,继续占用宝贵的系统资源,直到过期。由于默认的会话有效期通常为30分钟,在高负载的系统上,这种情况可能导致资源迅速耗尽。想象一下,一个应用程序将系统资源消耗殆尽的后果!

图5:音乐无国界结账视图

(图中文字与图4相同)

请注意,在此示例中,所有资源分配都是基于会话的,因为模型存在于会话内部。必须确保控制SERVLET,防止用户(甚至是意外访问)对其进行访问。为解决这个问题,可以在控制servlet检测到非法访问时,自动重定向到错误页面(参见代码清单6)。

代码清单6:error.html

抱歉,出现无法恢复的错误!

请尝试重新操作

配置“音乐无国界”应用程序:

假设您使用的是Sun公司版本的JavaServer Web Development Kit(JSWDK)来开发。假设服务器安装在jswdk-1.0.1目录下——这是Windows中的默认安装路径。“音乐无国界”应用程序的文件应如下配置:

1. 在jswdk-1.0.1/examples/jsp目录下创建shopping目录。

2. 将Eshop.jsp复制到jswdk-1.0.1/examples/jsp/shopping。

3. 将Cart.jsp复制到jswdk-1.0.1/examples/jsp/shopping。

4. 将Check.jsp复制到jswdk-1.0.1/examples/jsp/shopping。

5. 编译.java文件。

6. 将ShoppingServlet.class复制到jswdk-1.0.1/webpages/Web-Infservlets。

7. 在jswdk-1.0.1/examples/Web-Inf/jspbeans目录下创建shopping目录。

8. 将CD.class复制到jswdk-1.0.1/examples/Web-Inf/jspbeans/shopping。

9. 将error.html复制到jswdk-1.0.1/webpages。

一旦服务器启动,您可以通过

在这个例子中,我们深入了JSP Model 2提供的控制水平和灵活性。特别是,我们了解了如何充分利用servlets和JSP的独特功能,最大程度地实现内容和表达的分离。在Model 2体系结构中,所有处理逻辑都可以集中在控制servlet中,而JSP页面只负责表达或视图。虽然Model 2的复杂性可能较高,但在需要高度控制和分离内容的应用程序中,Model 2可能是理想的选择。对于那些简单的应用来说,Model 1可能更为合适。

全文结束。

上一篇:微信小程序-可移动菜单的实现过程详解 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by

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