|
(2) 替代 HTML 模板语法 HTML 标准不允许在 HTML 标记中嵌入 HTML 标记。因而,就无法在另一个 HTML 标记中嵌入 <INSERT> 标记。作为代替,请使用 HTML 模板替代语法。要使用替代语法: = 请使用 <INSERT> 和 </INSERT> 来包含 HTML 标记,在该标记中指出替代内容。
= 指定 Bean 和 property 属性: ¾ 要指定 Bean 和属性特性,请使用下列格式: $(bean=b property=p default=d) ,其中 b 、 p 和 d 作为描述基本语法的值。 ¾ 要指定 requestparm 属性,请使用下列格式: $(requestparm=r default=d) ,其中 r 和 d 作为 描述基本语法的值。 ¾ 要指定 requestattr 属性,请使用下列格式: $(requestattr=r default=d) ,其中 r 和 d 作为描述 基本语法的值。 替代 HTML 模板语法的示例如下: <insert> <img src=$(bean=productAds property=sale default=default.gif)> </insert> <insert> <a href="/http://www.myserver.com/map/showmap.cgi?country=$(requestparm=country default=usa) &city$(requestparm=city default="Research Triangle Park")&email= $(bean=userInfo property=email)>Show map of city</a> </insert> (3) <REPEAT> 标记 <REPEAT> 标记的语法为: <repeat index=name start=starting_index end=ending_index> </repeat> 其中: = index :是用于标识该重复数据块的一个可选的名称。该值是分大小写的。 = Start :是用于该重复数据块的一个可选的开始索引值。缺省值为 0 。 = End :是用于该重复数据块的一个可选的结束索引值。最大值是 2,147,483,647 。如果结束属性的值小于开始属性的值,则忽略结束属性。 下面的示例 1 、 2 和 3 显示了如何使用 <REPEAT> 标记。如果所有的索引属性拥有 300 个或更少的元素,则这些示例将产生相同的输出。如果拥有的元素多于 300 个,示例 1 和示例 2 将显示所有的元素,而示例 3 将只显示前 300 个元素。示例 1 用缺省开始和结束索引显示了隐式索引:使用最小索引属性数的 bean 限制了循环重复的次数。 <table> <repeat> <tr><td><insert bean=serviceLocationsQuery property=city></insert></tr></td> <tr><td><insert bean=serviceLocationsQuery property=address></insert></tr></td> <tr><td><insert bean=serviceLocationsQuery property=telephone></insert></tr></td> </repeat> </table> 示例 2 显示了索引、开始索引和结束索引: <table> <repeat index=myIndex start=0 end=2147483647> <tr><td><insert bean=serviceLocationsQuery property=city(myIndex)></insert></tr></td> <tr><td><insert bean=serviceLocationsQuery property=address(myIndex)></insert></tr></td> <tr><td><insert bean=serviceLocationsQuery property=telephone(myIndex)></insert></tr></td> </repeat> </table> 示例 3 用隐式开始索引显示了显式索引和结束索引。虽然指定了索引属性,仍可对索引过的属性城市进行隐式索引,因为不需要( i )。 <table> <repeat index=myIndex end=299> <tr><td><insert bean=serviceLocationsQuery property=city></insert></tr></td> <tr><td><insert bean=serviceLocationsQuery property=address(myIndex)></insert></tr></td> <tr><td><insert bean=serviceLocationsQuery property=telephone(myIndex)></insert></tr></td> </repeat> </table> 可以嵌套 <REPEAT> 数据块。独立索引每个数据块。该能力对交叉两个 bean 上的交错属性或含有子属性的属性非常有用。在示例中,将两个 <REPEAT> 数据块嵌套,用以显示用户购物手推车上每一张压缩光盘上的歌曲列表。 <repeat index=cdindex> <h1><insert bean=shoppingCart property=cds.title></insert></h1> <table> <repeat> <tr><td><insert bean=shoppingCart property=cds(cdindex).playlist></insert> </td></tr> </table> </repeat> </repeat> · 6.变量数据的 Java 表达式 当处理 JSP 文件时,要指定分解一个 Java 语言表达式,请使用 JSP 表达式标记 <%= 和 %> 。该表达式被评估和转换成一个字符串,并加以显示。原语类型,如 int 和 float 都自动转换成字符串表示法。在该示例中, foo 是在 <SCRIPT> 中加以说明的 class-wide 变量,示例请见 Class-wide 变量和方法: <p> 翻译欢迎辞 <%= foo %>.</p> 当获得 JSP 文件时,文本为:翻译欢迎辞 Hello 。 · 5.4 JSP API 有两种接口支持 JSP 技术。这些 API 提供了一种将内容生成(业务逻辑)从内容演示( HTML 格式)中分离出来的方法。这种分离使 Servlet 能生成内容并将它(如在 Bean 中)存储在请求的上下文中。生成上下文的 Servlet 通过将请求的上下文传递至 JSP 文件来生成一个响应,该 JSP 文件包含 HTML 格式。 <BEAN> 标记便提供了对业务逻辑的访问。支持 JSP 的接口有: = com.sun.server.http.HttpServiceRequest :该类实现了 javax.servlet.http.HttpServletRequest 接口和用于设置根据名称定义的属性的方法 setAttribute() 。 = com.sun.server.http.HttpServiceResponse :该类实现了 javax.servlet.http.HttpServletResponse 接口,并添加了一个使 Servlet 能调用 JSP 文件和可选地传递上下文的 callPage() 方法。 · 1.callPage() 方法 用 callPage() 方法在 Servlet 中对 JSP 进行服务。所服务的页面(一个 JSP 文件)作为响应返回到浏览器中。调用 Servlet 还可以通过请求对象传递某些上下文。应该对所服务的页面标题进行编码,以将用于告诉浏览器不要对文件执行高速缓存的指令包含在内。 callPage() 方法的语法如下: public void callPage(String fileName, HttpServletRequest req) throws ServletException, IOException 其中: = fileName :用于标识文件(该文件用于生成输出并表示内容)的 URL 名。如果文件名以斜杠( / )开头,则可以假设文件位置与文档根目录有关。如果文件名不是以斜杠开头,则可假设文件位置与当前调用的请求有关。 callPage() 方法不支持调用文件扩展名为 .html 的页面。如果需要使用 callPage() 方法来调用 HTML 页面,则必须首先将 HTML 文件重命名成扩展名为 .jsp 的文件。 = Req :调用该方法的是 Servlet 的 HttpServletRequest 对象。最通常的是,将上下文作为 Bean ,在请求对象的上下文中进行传递。 要使用 callPage() 方法,必须将响应对象造型成 com.sun.server.http.HttpServiceResponse 类型。 · 2.使用 setAttribute() 方法 用 setAttribute() 方法来将一个特性存储在请求的上下文中。语法是: public void setAttribute(String key, Object o), 其中, key 代表存储的特性名,而 o 表示用 key 来存储的上下文对象。要使用 setAttribute() 方法,必须将请求对象造型成 com.sun.server.http.HttpServiceRequest 类型。
|