JSP高级编程 5

    技术2022-05-11  113

    第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 n1.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:rootxmlns: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 rootPUBLIC"-//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 - 1JSP 元素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:include104第一部分JSP 入门

    |jsp:forward|jsp:useBean|jsp:setProperty|jsp:getProperty|jsp:plugin|jsp:fallback|jsp:params|jsp:param)*"><!ELEMENT jsp:useBean %jsp.body;><!ATTLIST jsp:useBeanid ID #REQUIREDclass CDATA#REQUIREDscope (page|session|request|application) "page"><!ELEMENT jsp:setProperty EMPTY><!ATTLIST jsp:setPropertyname IDREF#REQUIREDpropertyCDATA#REQUIREDvalue CDATA#IMPLIEDparam CDATA#IMPLIED><!ELEMENT jsp:getProperty EMPTY><!ATTLIST jsp:getPropertyname IREF #REQUIREDpropertyCDATA#REQUIRED><!ELEMENTjsp:includeEMPTY><!ATTLISTjsp:includeflush (true|false)"false"page CDATA#REQUIRED><!ELEMENT jsp:forward EMPTY><!ATTLISTjsp:forwardpage CDATA#REQUIRED><!ELEMENT jsp:scriptlet (#PCDATA)><!ELEMENT jsp:declaration (#PCDATA)><!ELEMENT jsp:expression (#PCDATA)><!ELEMENT jsp:directive.page EMPTY><!ATTLIST jsp:directive.pagelanguageCDATA"java"extendsCDATA#IMPLIEDcontentTypeCDATA"text/html; ISO-8859-1"import CDATA#IMPLIEDsession(true|false)"true"buffer CDATA"8kb"autoFlush(true|false)"true"isThreadSafe(true|false)"true"info CDATA#IMPLIEDerrorPageCDATA#IMPLIEDisErrorPage(true|false)"false">第5章作为X M L的J S P1 0 5

    <!ELEMENT jsp:directive.include EMPTY><!ATTLIST jsp:directive.includefile CDATA #REQUIRED><!ELEMENT jsp:root %jsp.body;><!ATTLIST jsp:rootxmlns:jspCDATA#FIXED "http://java.sun.com/products/jsp/dtd/jsp_1_0.dtd">106第一部分JSP 入门

    待续


    最新回复(0)