第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 入门
待续