分享
 
 
 

使用JavaServerPages标准标记库来管理XML数据

王朝java/jsp·作者佚名  2008-05-21
窄屏简体版  字體: |||超大  

JavaServer Pages 为在 Web 环境中表示数据提供了一个非常灵活而且强大的工具。在 JSP 中可以使用称为 Scriplet 的 Java 代码来给页面设计人员提供更多的灵活性。标记库为页面设计人员提供了一种方法来隐藏 Java 程序设计语言的复杂性。如果使用可扩展标记语言,数据就可以表示成一种结构化的形式,并通过样式表语言(XSL)的模板文件(XSLT)来呈现给不同的目标。JSP 标准标记库 (Standard Tag Library)提供了一个简单易用的界面,它可以让 JSP 页面设计人员使用 XSL 模板文件来管理 XML 文档和对它们进行转换。

JavaServer Pages 为在 Web 环境中表示数据提供了一个非常灵活而且强大的工具。在 JSP 中可以使用称为 Scriplet 的 Java 代码来给页面设计人员提供更多的灵活性。标记库为页面设计人员提供了一种方法来隐藏 Java 程序设计语言的复杂性。如果使用可扩展标记语言,数据就可以表示成一种结构化的形式,并通过样式表语言(XSL)的模板文件(XSLT)来呈现给不同的目标。JSP 标准标记库 (Standard Tag Library)提供了一个简单易用的界面,它可以让 JSP 页面设计人员使用 XSL 模板文件来管理 XML 文档和对它们进行转换。

引言

XML 在 Web 开发中变得越来越重要,它已经成为开发人员处理 XML 文档必备的工具了。由于 Web 设计人员对 JSP 标记库的 XML句法已经越来越熟悉了,将标记库引入 JSP 规范使得非 Java™ 程序设计人员的 Web 开发人员在建立 Web 页面时可以更方便地使用 Java库。标记库可以让 Java 程序设计人员将 JSP 开发人员需要用到的代码封装在可重用构件中。

JSP Standard Tag Library(JSTL)增加了诸如管理 XML 文档的标记和访问 SQL 数据库的标记这样的功能。JSTL 的引用实现是由 JSR-052 Expert Group开发,在 Java Community Process下运行,并由 Jakarta Taglibs托管的。

JSTL 分成以下四个功能区:核心 XML 处理 I18N 可能的格式化 数据库访问(SQL)。

本文把重点放在允许管理 XML 文档的 JSTL 标记上。要了解 JSP 标准标记库更完整的信息请参考 JSTL 1.0 specification。

要使用 JSTL,您需要一个支持 Java Servlet 2.3 和 JavaServer Pages 1.2 规范的 JSP 容器。WebSphereStudio Application Developer Version 5(以下简称为 Application Developer)所附带的 WebSphere®Test Environment 支持这些规范。Jakarta Tomcat 4 也支持 Java Servlet 2.3 和 JavaServerPages 1.2 规范。Application Developer 可以使 Web 开发人员能够通过 WebSphere ApplicationServer V5 测试和部署 Web 应用程序。要实现本文所介绍的方法,请使用 WebSphere Application Server V5 或 Tomcat 4的最新版本。

样本 JSTL 场景

我们将使用一个简单的场景来说明 JSTL:某个小型组织想要建立一个包含所有Web 页面的具有紧凑外观的 Web 站点。每个页面应该包括以下内容:一个显示当前页面横幅的头部。 一个包含该页面中的特定信息的页面主体。 能够动态显示的菜单导航条。所显示的菜单项取决于登录到这一 Web 页面的用户的权限。Web站点访问者可以不用登录,但这样只能访问该站点的非限制区域。只有具有适当权限的成员才能访问站点的其他区域。指向这些区域的链接只有在登录身份验证有效以后才会显示。 一个包含指向 Web 站点其他页面的链接的页脚,它与菜单组件相类似。

每个菜单链接包含一个按钮,指向某一URL,并具有供替换的文本。这样的菜单的 XML 描述符可能看起来像是这样的:

<mainmenu>

<link>

<url>index.jsp</url>

<image>home.gif</image>

<text>Please click here to go to the main page</text>

</link>

<link>

<url>help.jsp</url>

<image>help.gif</image>

<text>Please click here to see how we can help you</text>

</link>

<link>

<url>schedule.jsp</url>

<image>schedule.gif</image>

<text>Please click here to see the schedules</text>

</link>

<link>

<url>functions.jsp</url>

<image>functions.gif</image>

<text>Please click here to see the functions</text>

</link>

<link>

<url>login.jsp</url>

<image>login.gif</image>

<text>Please click here to login, if you are a member</text>

</link></mainmenu>

该菜单可以通过 servlet 或 JavaBeans或使用 JSTL 来动态地创建。该链接可以根据需要添加或删除。

将这种 XML 文档转换为 HTML 的 XSL 可能看起来像是这样的:

<xsl:template match="mainmenu">

<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" WIDTH="180">

<TBODY>

<TR>

<TD HEIGHT="75"></TD>

</TR>

<xsl:apply-templates select="link"/>

</TBODY>

</TABLE></xsl:template><xsl:template match="link">

<tr>

<td>

<A xsl:use-attribute-sets="anchor">

<IMG xsl:use-attribute-sets="img"/>

</A>

</td>

</tr></xsl:template><xsl:attribute-set name="anchor">

<xsl:attribute name="href">

<xsl:value-of select="url"/>

</xsl:attribute></xsl:attribute-set><xsl:attribute-set name="img">

<xsl:attribute name="src">./images/<xsl:value-of select="image"/>

</xsl:attribute>

<xsl:attribute name="border">0</xsl:attribute>

<xsl:attribute name="width">170</xsl:attribute>

<xsl:attribute name="height">45</xsl:attribute>

<xsl:attribute name="alt"><xsl:value-of select="text"/>

</xsl:attribute></xsl:attribute-set>

站点页面的其他组件可以通过类似方式来构建,使用静态和动态内容相结合的方式。与菜单一样,它们可以通过 servlet 或 JavaBeans 或使用 JSTL来动态地创建。

我们的目标是组合所有这些组件来形成一个单一的页面。XML 和 XSL 的使用可以使它更具灵活性。我们将 XML段组合在一起以形成一个单一的 XML 文档,同时将 XSL 段组合在一起以形成一个单一的 XSL 文档。通过使用所得 XSL 文档的 XSLT 可以将所得的XML 文档转换成 HTML。下一部分将会介绍执行这些任务需要用到的不同的 JSTL 标记。

JSTL XML 操作

在 JSTL的中心是核心标记,其中某些标记使得管理 XML 文档更加方便。这些能够方便管理 XML 文档的核心标记是

import 、 out 和 set 。

<c:import>

XML 文档可能需要从不同的位置和源端收集。import 标记允许导入基于 URL 资源的内容。例如,以下的标记从上下文根导入名为

mainmenu.xml的文档并为导入的文档指派一个名为 menu 的变量。

<c:import url="/xsl/mainmenu.xsl" var="menu"/>

举个例子,如果上下文根是

http://localhost:8080,同样的标记可以等价地写为:

<c:import url="http://localhost:8080/xsl/mainmenu.xsl" var="menu"/>

另一种选择是,可以从本地机器的某一位置提取同样的文档。第一个句法更加灵活,因为它允许更改上下文根,这使得文档的位置可以动态指定。

<c:out>

out 标记用于将变量中的值输出给当前的 JspWriter 对象。一旦 XML文档已经收集,它就可以用作输出。例如,以下标记输出先前导入的文档的内容。

<c:out value="${menu}" escapeXml="false"/>

在上面的标记中,

escapeXml="false"指明字符 <、 >、 &、 '、 "应该转换成它们相应的字符实体代码。如果文档的内容需要发送给页面以供显示(例如上面的例子),那么应该设置

escapeXml="true"。

可变菜单所引用的对象也可以事先通过 servlet 或 JavaBeans 或使用 JSTL 在会话期间动态地创建好。

<c:set>

XML 文档也可能需要动态地创建,这有时是通过将多个文档组合成一个来实现的。set标记用于评估一个表达式,并将评估结果设置在 scoped 变量中。以下的例子导入多个文档并将它们组合成一个文档,所得结果存储在名为 xsl 的变量中。

<c:import url="/xsl/mainscreen.xsl" var="mainscreen"/><c:import url="/xsl/mainmenu.xsl" var="menu"/><c:import url="/xsl/mainbody.xsl" var="body"/><c:import url="/xsl/footer.xsl" var="footer"/><c:import url="/xsl/index.xsl" var="indexpage"/><c:set var="xsl"><?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" indent="yes"/><c:out value="${mainscreen}" escapeXml="false"/><c:out value="${menu}" escapeXml="false"/><c:out value="${body}" escapeXml="false"/><c:out value="${indexpage}" escapeXml="false"/><c:out value="${footer}" escapeXml="false"/></xsl:stylesheet></c:set>

在以上的例子中,为了得到所期望的结果文档,一起使用了 import、set 和 out 标记来组合多个文档。以上变量所引用的对象也可以事先通过 servlet或 JavaBeans 或使用 JSTL 在会话期间动态地创建好。

<x:transform>

transform 标记使得 JSP 开发人员使用 XSL 模板文件将 XML 文档转换成其他格式变得更加方便。以下所示的是导入 XSL文档并用它来转换导入的 XML 文档的 JSTL 片段。转换结果写入该页面中。

<c:import url="/xml/document.xml" var="xml"/><c:import url="/xsl/document.xsl" var="xsl"/><x:transform xml="${xml}" xslt="${xsl}"/>

这里是一个带有 Java scriplets 的样本 JSP,它与上面的 JSTL 片段所做的事情是一样的。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@ page language="java" import="java.lang.*"

contentType="text/html; charset=WINDOWS-1252"

autoFlush="true" session="true"%><%@ page import="javax.xml.transform.*,

javax.xml.transform.stream.*,

java.io.*,

org.w3c.dom.*"%><META http-equiv="Content-Type"content="text/html; charset=WINDOWS-1252"><META name="GENERATOR" content="IBM WebSphere Studio"><META http-equiv="Content-Style-Type" content="text/css"><%// Get the servlet contextServletContext context = getServletContext();// Initialize the variables that we need for this process.String docBody = null;StreamSource xmlSource = null;StreamSource xslSource = null;// Get the true location of the xml documentdocBody = "/xml/document.xml";String xmlDoc = context.getRealPath(docBody);// Load the XML document from the file locationxmlSource = new StreamSource(new File(xmlDoc));// If we have a valid XML document then attempt to parse it with the// needed xsl template.if (xmlSource != null) {

// Get the true location of the xsl document.

docBody = "/xsl/document.xsl";

String xslDoc = context.getRealPath(docBody);

// Load the XSL document from the file location

xslSource = new StreamSource(new File(xslDoc));}// If we have the xml and xsl documents then do the transformationif (xmlSource != null && xslSource != null) {

// Prepare the output stream

StreamResult xsltOutput = new StreamResult(out);

// Set up the transformer factory for the XSLT transform.

TransformerFactory transformerFactory = TransformerFactory.newInstance();

Transformer transformer = transformerFactory.newTransformer(xslSource);

// Transform the XML document using the XSLT template.

transformer.transform(xmlSource, xsltOutput);}%>

很显然,这一个更加棘手,它要求有 Java 程序设计的知识,然而前面例子中的transform 标记隐藏了实现的复杂性,使得它对页面设计者来说是不可见的。

JSTL 与 Application Developer

WebSphereStudio Application Developer 提供了对 JSTL 的支持。通过 Web Project 向导,ApplicationDeveloper 提供了一种很简单的方法来实现这一支持,并使得 JSTL JAR 文件和标记库描述符(tlds)对 Web 应用程序可用。JAR文件被添加到 Web 应用程序的

WEB-INFlib子目录下。

Application Developer中的 JSTL 包所附带的一些 JAR 文件是:

dom.jar

jaxen-full.jar

jaxp-api.jar

jdbc2_0-stdext.jar

jstl.jar

sax.jar

saxpath.jar

standard.jar

xalan.jar

xercesImpl.jar.

本文使用的标记库描述符是:

c.tld

x.tld.

创建一个 JSTL 可用的 Web 项目和 JSP 页面首先,Web 项目必须创建为支持 JSTL。为了创建这样的项目,请在 Application Developer 的主菜单中选择 File => New => Web Project。 在“Define the Web Project”对话框(图 1)中,在 Project name 字段中键入项目的名称,在 New projectlocation 字段中指定目录路径。在 Web Project features 中选取 Include the JSP Standard Tag library, 然后选择 Next。

图 1. 定义 Web 项目

在“J2EE Settings Page”对话框(图 2)中,键入 Enterprise 应用项目名字和新项目路径以及 Web应用程序的上下文根。确保选取的 J2EE Level 是 1.3。单击 Finish。

图 2. J2EE 设置页面

定位到 Web Content 下您想要存储该 JSP 文件的文件夹。右键单击并选择 New => JSP File。 在“New JSP File”对话框(图 3)中,键入新 JSP 文件的 File Name,然后单击 Next。

图 3. 新的 JSP 文件

现在您需要确定要包含在 Web 项目中的标记库。我们要使用的是具有 JSTL 核心标记的

c.tld标记库以及有助于管理XML 文档的

x.tld标记库。单击 Add Tag Library...按钮(图 4)。

图 4. 添加标记库

在标记库列表(图 5)中选中 c.tld和 x.tld,然后单击 OK。

图 5. 选择标记库

系统会弹出显示选中的标记库的“New JSP File”对话框(图 6)。单击 Finish来生成 JSP 文件。(您也可以单击 Next来选择 JSP 文件的其他选项。)

图 6. 标记库选择

这样就创建了一个与下面类似的

index.jsp文件: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><HTML><HEAD><%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %><%@ pagelanguage="java"contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"autoFlush="true"%><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><META name="GENERATOR" content="IBM WebSphere Studio"><META http-equiv="Content-Style-Type" content="text/css"><LINK href="theme/Master.css" rel="stylesheet" type="text/css"><TITLE>index.jsp</TITLE></HEAD><BODY><P>Place index.jsp's content here.</P></BODY></HTML>

使用 JSTL 可用的 Web 项目来创建样本场景

我们将在这个简单的例子中使用上面提到的场景。XML 和 XSL 在此用于说明如何通过 JSTL 将文档片段放置在一起。

对于这个例子,在项目的 Web Content 文件夹中新创建了三个文件夹。它们是:

images

xml

xsl.

图像文件与 XML 和 XSL 片段分别地放在这些子文件夹中。上面创建的

index.jsp文件在此需要稍做修改以便使用JSTL 来将 XML 和 XSL 片段组合成一个单一的文档。所得的 XML 文档通过组合的 XSL 文档来转换。更新后的

index.jsp文件看起来像是这样的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><HTML><HEAD><%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jstl/xml" prefix="x" %><%@ pagelanguage="java"contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"autoFlush="true"%><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><META name="GENERATOR" content="IBM WebSphere Studio"><META http-equiv="Content-Style-Type" content="text/css"><LINK href="theme/Master.css" rel="stylesheet" type="text/css"><TITLE>Welcome to our organization</TITLE></HEAD><BODY><c:import url="/xsl/footer.xslpart" var="footer"/><c:import url="/xsl/mainscreen.xslpart" var="mainscreen"/><c:import url="/xsl/mainmenu.xslpart" var="menu"/><c:import url="/xsl/mainbody.xslpart" var="body"/><c:import url="/xsl/index.xslpart" var="indexpage"/><c:set var="xsl"><?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:output method="html" indent="yes"/><c:out value="${mainscreen}" escapeXml="false"/><c:out value="${menu}" escapeXml="false"/><c:out value="${body}" escapeXml="false"/><c:out value="${indexpage}" escapeXml="false"/><c:out value="${footer}" escapeXml="false"/></xsl:stylesheet></c:set><c:import url="/xml/mainmenu.xmlpart" var="mainmenu"/><c:import url="/xml/mainbody.xmlpart" var="mainbody"/><c:import url="/xml/footer.xmlpart" var="footerdata"/><c:set var="xml"><?xml version="1.0"?><mainscreen><c:out value="${mainmenu}" escapeXml="false"/><c:out value="${mainbody}" escapeXml="false"/><c:out value="${footerdata}" escapeXml="false"/></mainscreen></c:set><x:transform xml="${xml}" xslt="${xsl}"/></BODY></HTML>

将 JSTL Web 应用程序部署到 WebSphere Test Environment 中

如果在 Application Developer 中没有创建 WebSphere Application Server 实例,您可以让Application Developer 自动地为您创建一个:在 Web 透视图中打开您刚创建的 Web 项目。 右键单击 index.jsp文件,然后选择 Run on Server。 Application Developer创建一个新的 WebSphere Application Server V5 实例,启动它,然后打开一个内部 Web 浏览器窗口来测试 JSTL应用程序。

如果 WebSphere Application Server 实例已经存在并且已经配置在Application Developer 中,您需要将 Web 应用程序添加到服务器配置中:如果 WebSphere Test Environment 已经在运行,则停止它。 在 Web 或服务器透视图中,右键单击Server Configuration 窗口中的 WebSphere Application Server 实例并选择包含上面创建的 Web应用程序的 Enterprise 项目。 在 Application Developer 中右键单击 index.jsp文件,然后选择 Run on Server。如果服务器并没有启动,则 Application Developer 会启动它;或者您可以启动 WebSphereApplication Server,打开一个外部 Web 浏览器,然后键入 URL:

http://localhost:9080/project/index.jsp

将 JSTL Web 应用程序部署到 Tomcat 4.0 中

另外,还可以在 Application Developer 外使用 Tomcat 4 来部署 Web 应用程序。要想这样做,您需要将 Web项目作为一个 Web 档案(WAR)文件导出,并将它添加到 Tomcat 4.0 Web apps 中。

如果您是使用 Tomcat 4.0来这样做,请确保 Apache Xerces 和 Apache Xalan 在 Tomcat 4 服务器实例类路径中。您可以将变量 WAS_XERCES 和 WAS_XALAN添加到 Tomcat 4 服务器实例类路径中,这样就可以使用 Application Developer 附带的 Xerces 和 Xalan 版本了。

在 WebSphere Application Server 中部署 JSTLWeb 应用程序

要想将 JSTL Web 应用程序安装到 WebSphere Application Server,您需要执行以下操作:启动 WebSphere Application Server。WebSphere Application Server V5 有一个缺省的配置称为server1。通过选择 Start => Programs => IBM WebSphere => Application Server v5.0 => Start the Server来启动该服务器。另一种选择是从命令提示符启动服务器。要想这样做,您应该首先检查服务器的状态,如果该服务器停止了就启动它(图 7): 在命令提示符中键入

serverstatus server1

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有