a.Inventory.jsp代码段 下面的JSP片段用来声明局部变量保存当前购物篮(BasketBean的实例)和产品目录。
<%
BasketBean basket;
Product[] catalogue;
%>
从上面可以看出,JSP 声明必须以一个分号结束,并且这个声明的范围是整个JSP页。声明这些局部变量以后,Inventory.jsp 使用一段小脚本从session对象中取回购物车对象(BasketBean)和商名目录,如下。
<%
basket =(BasketBean) session.getAttribute( BasketBean.BASKET);
catalogue = InventoryBean.getCatalogue();
%>
由上可以看出,JSP 声明和JSP小脚本只是放在特定的JSP标记之间的
Java代码,当JSP引擎把一个JSP
程序翻译成一个servlet时,它就把这些Java代码内嵌到新的Servlet代码中去。
如前所述,程序从一个session对象中取得购物车对象,这个session对象是一个内部物体。JSP引擎提供一些内部隐含对象,这些对象可以直接被引用,我们可以不事先声明,也不需要专门的代码来创建他们的实例。它们在小脚本和表达式中总是可以使用的,而不需要预先声明。JSP1.1规范中列出内部隐含对象完整的集合。在程序中,另一个象这样的对象就是HttpServletRequest对象(request),它在CustomerServlet类中作为一个参数被传递到doPost()方法中,这就意味着Inventory.jsp能够通过调用request.getSession(true).getAttribute(BasketBean.BASKET)来取回购物车的信息了。
在JSP中表达式和小脚本为JSP动态生成
网页提供一个强有力的工具。从下面的Inventory.jsp程序中可以看出,JSP代码段循环访问商品目录并且动态地为每个产品产生HTML表格,代码使用小脚本编写循环,然后在每一行中都混合使用HTML和JSP表达式。
(注:JSP引擎把小脚本标记之间的Java代码直接插入引擎内部产生的servlet代码。JSP引擎对待JSP表达式也是不同的。它先把JSP表达式变换成字符串,然后在内部产生的servlet中把它们包入一个out.println()调用中。)
b.Receipt.jsp代码段 Receipt.jsp程序中,使用了JSP动作,来处理顾客发送来请求的参数值。因此本节将简要的介绍一下JSP中的动作元素。除了指令和脚本元素外,JSP动作也是JSP页面不可缺少的一部分,一个动作元素有两种基本的语法形式:
<prefix:tag attr_list />
<prefix:tag attr_list>
<body>
</prefix:tag>
当动作有语句体时,必须使用后一种表式方法。动作背后基本的概念就是与特定的JSP标签联系的"标签处理器"。这些处理器是基于标签的一些代码段,用来执行某些操作。JSP引擎提供了一些标准的动作,所有的这些动作都要以" jsp "为前缀。例如,电子商店使用一个助手Bean来简化请求参数分析,就要使用<jsp:useBean>元素声明这样一个Bean:<jsp:useBean id="receiptBean" scope="request" class="shoppingcart.ReceiptBean" /> JSP声明了一个对象变量,取名为receiptBean,作为 ReceiptBean 的一个实例,在当前请求完成时就会被释放。使用Bean的主要优点就是它分析并且返回 HTML请求参数的简洁性。
在声明完Bean以后,就可以使用<jsp:setProperty>元素从HTML请求中获取参数,来设置它的属性值。可以显式的指出属性和HTML 参数的名字,来设置属性值。例如,下面是Receipt.jsp中用来设置我们的ReceiptBean实例的属性的一些语句:
<jsp:setProperty name="receipt_bean" property="name" param="name" />
如果属性名和相应的参数名相同,可以指示用一个JSP元素来设置所有的属性:
<jsp:setProperty name="receipt_bean" property="*" />
这个单独的元素告诉引擎,使用 Java映像来匹配所有的JSP参数和JavaBean属性名,然后使用HTML请求信息中的值来设置JavaBean的属性值。同样,使用<jsp:getProperty>元素从助手Bean中返回属性值。例如,下面是返回属性的语句:
<jsp:getProperty name="receipt_bean" property="name" />
在ReceiptBean类的代码中,每个在Receipt.jsp中被分析的参数,在程序Bean中都有一个相关联的用来设置了取得的方法:例如,<jsp:setProperty name="receipt_bean" property="name" param="name" />有一个相关联的设置方法:void setName(String phone);
同样,<jsp:getProperty name="receipt_bean" property="name" />也有一个相关联的取得方法:String getName()。
c.Confirm.jsp代码段 Confiormljsp主要用来让顾客确认自己购买的商品,并显示应付帐单,相对来说比较简单。
d.Error.jsp代码段 Error.jsp是一个通用的错误处理页面,当购物车程序任何不分出现错误时,系统都会自动跳跃到本页面来。
