第5章作为XML的JSP 本章将介绍如何使用标准的X M L语法来书写一个J S P页面,上一章介绍的非X M L语法在本 章中都可以找到对应的X M L形式的语法格式。注意, J S P在将来的发展中无疑将越来越强调 X M L的语法格式,读者可以从最新的J S P语法规范----JavaServer Pages(tm) Specification Ve r s i o n 1.2 - public draft 1 (PD1,也就是公开测试版)中发现这一变化趋势。 5.1 为什么要使用X M L相容的语法形式 为什么要使用X M L相容语法来构架J S P呢?当然不是因为X M L是一个时髦的事物,而是作 为X M L文档的J S P将会得到许多的好处。 例如,一个标准的X M L相容的J S P语法将有助于J S P的开发。 J S P文件的X M L语法使得J S P文件的内容很容易被组织和管理。 可以使用X M L的开发和分析工具来开发和分析J S P,仅仅需要更换D T D文件就可以升级到最 新版本的J S P。 X M L格式统一的语法更容易学习和使用。 5.2 关于文本类型的语法 5.2.1 jsp:root元素 作为X M L文档的J S P文件,有一个< j s p : r o o t >元素作为其根元素,这个根元素同时也是标签 库(t a g l i b)设置命名域的地方。在< j s p : r o o t >中使用x m l n s属性来设置当前使用的J S P版本(通过 D T D文件)。 例如: <jsp:root xmlns:jsp="http://java.sun.com/products/jsp/dtd/jsp_1_0.dtd"> remainder of transformed JSP page </jsp:root> 5.2.2 公共标识符 作为X M L文档的J S P文件建议使用如下形式的文档类型声明: <! DOCTYPE root PUBLIC"-//Sun Microsystems Inc.//DTD JavaServer Pages Version 1.1//EN" "http://java.sun.com/products/jsp/dtd/jspcore_1_0.dtd"> 5.3 指令 一般的J S P指令具有如下的形式: <%@ directive { attr="value" }* %> 可以翻译为如下的X M L语法形式: <jsp:directive.directive { attr="value" }* /> 5.3.1 page指令 作为X M L文档的p a g e指令: <jsp:directive.page page_directive_attr_list /> 举例如下 一般的“p a g e”指令: <%@ page info="my latest JSP Example V1.1" %> 相应的X M L相容语法: <jsp:directive.page info="my latest JSP Example V1.1" /> 5.3.2 include指令 作为X M L文档的i n c l u d e指令: <jsp:directive.include file=" relativeURLspec" flush="true|false" /> 举例如下 一般的i n c l u d e指令: <%@ include file="copyright.hmtl" %> 相应的X M L相容语法: <jsp:directive.include file="htmldocs/logo.html" /> 5.3.1 taglib指令 t a g l i b指令如前所述,是被包含在< j s p : r o o t >元素中,以x m l n s属性的形式被定义的。 5.3.1 page指示 作为X M L文档的p a g e指为: <jsp:directive.page page_directive_attr_list /> 举例如下。 一般的p a g e指为: <%@ page info="my latest JSP Example V1.1" %> 相应的X M L相容语法: 102第一部分JSP 入门
<jsp:directive.page info="my latest JSP Example V1.1" /> 5.3.2 include指示 作为X M L文档的i n c l u d e指为: <jsp:directive.include file=" relativeURLspec" flush="true|false" /> 举例如下。 一般的i n c l u d e指令: <%@ include file="copyright.hmtl" %> 相应的X M L相容语法: <jsp:directive.include file="htmldocs/logo.html" /> 5.3.3 taglib指令 t a g l i b指令如前所述,是被包含在< j s p : r o o t >元素中,以x m l n s属性的形式被定义的。 5.4 脚本元素 J S P的脚本元素包含声明、脚本代码、表达式三个部分,下面分别讲述其相应的X M L语法形式。 5.4.1 声明 声明的X M L形式语法为: <jsp:declaration> declaration goes here </jsp:declaration> 举例如下: <%! public String f(int i) { if (i<3) return("..."); ... } %> 相应的X M L语句为: <jsp:declaration> <![CDATA[ public String f(int i) { if (i<3) return("..."); } ]]> </jsp:declaration> 下面是相关的D T D文件片断: <!ELEMENT jsp:declaration (#PCDATA) > 5.4.2 脚本代码 声明的X M L形式语法为: <jsp:scriptlet> code fragment goes here </jsp:scriptlet> 下面是相关的D T D文件片断: <!ELEMENT jsp:scriptlet (#PCDATA) > 5.4.3 表达式 声明的X M L形式语法为: 第5章作为X M L的J S P1 0 3
<jsp:expression> expression goes here </jsp:expression> 举例如下: <%= str + i + " " + date%> 相应的X M L语句为: <jsp:expression> String str ="aasasda"; int i = 5; java.util.Date date = new Date(); </jsp:expression> 下面是相关的D T D文件片断: <!ELEMENT jsp:expression (#PCDATA) > 5.5 如何将一个普通的J S P文件转换为一个X M L文档 使用下面的方法可以将一个普通的J S P文件转换为一个X M L文件: 首先,在文本中加入< j s p : r o o t >,在这个元素中使命名前缀“ j s p”成为文本中标准元素的前 缀。 然后,将所有的“< %”按照前面介绍的方法转换为X M L的相容语法形式。 接着,将“ t a g l i b”指示转化为使用< j s p : r o o t >中的“x m l n s”属性来指示。 最后,为每一个非J S P元素的部分建立一个C D ATA元素。 利用表5 - 1可以快速地将一个J S P文件转化成一个X M L文件。 表5 - 1 JSP 元素X M L相应元素 <%@ page ... %> <jsp:directive.page ... /> <%@ taglib ... %> 使用< j s p : r o o t >设定 <%@ include ... %> <jsp:directive.include .../> <%! ... %> <jsp:scriptlet> .... </jsp:scriptlet> <% ... %> <jsp:scriptlet> .... </jsp:scriptlet> <%= .... %> <jsp:expression> .... </jsp:expression> 5.6 JSP1.1的D T D文件 这里是J S P 1 . 1的D T D文件,从中可以对J S P的语法有一个完整的理解。 <!ENTITY % jsp.body " (#PCDATA |jsp:directive.page |jsp:directive.include |jsp:scriptlet |jsp:declaration |jsp:expression |jsp:include 104第一部分JSP 入门
|jsp:forward |jsp:useBean |jsp:setProperty |jsp:getProperty |jsp:plugin |jsp:fallback |jsp:params |jsp:param)* "> <!ELEMENT jsp:useBean %jsp.body;> <!ATTLIST jsp:useBean id ID #REQUIRED class CDATA#REQUIRED scope (page|session|request|application) "page"> <!ELEMENT jsp:setProperty EMPTY> <!ATTLIST jsp:setProperty name IDREF#REQUIRED propertyCDATA#REQUIRED value CDATA#IMPLIED param CDATA#IMPLIED> <!ELEMENT jsp:getProperty EMPTY> <!ATTLIST jsp:getProperty name IREF #REQUIRED propertyCDATA#REQUIRED> <!ELEMENTjsp:includeEMPTY> <!ATTLISTjsp:include flush (true|false)"false" page CDATA#REQUIRED> <!ELEMENT jsp:forward EMPTY> <!ATTLISTjsp:forward page CDATA#REQUIRED> <!ELEMENT jsp:scriptlet (#PCDATA)> <!ELEMENT jsp:declaration (#PCDATA)> <!ELEMENT jsp:expression (#PCDATA)> <!ELEMENT jsp:directive.page EMPTY> <!ATTLIST jsp:directive.page languageCDATA"java" extendsCDATA#IMPLIED contentTypeCDATA"text/html; ISO-8859-1" import CDATA#IMPLIED session(true|false)"true" buffer CDATA"8kb" autoFlush(true|false)"true" isThreadSafe(true|false)"true" info CDATA#IMPLIED errorPageCDATA#IMPLIED isErrorPage(true|false)"false"> 第5章作为X M L的J S P1 0 5
<!ELEMENT jsp:directive.include EMPTY> <!ATTLIST jsp:directive.include file CDATA #REQUIRED> <!ELEMENT jsp:root %jsp.body;> <!ATTLIST jsp:root xmlns:jspCDATA#FIXED "http://java.sun.com/products/jsp/dtd/ jsp_1_0.dtd"> 106第一部分JSP 入门
待续 |