本章將介紹如何使用標準的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 入門
待續