实例讲解JSP Model2体系结构(下)
每次用户在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
ALBUM | ARTIST | COUNTRY | PRICE | QUANTITY |
<%= anOrder.getAlbum() %> | <%= anOrder.getArtist() %> | <%= anOrder.getCountry() %> | <%= anOrder.getPrice() %> | <%= anOrder.getQuantity() %> |
TOTAL | $<%= amount %> |