﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-花-随笔分类-XML Design</title><link>http://www.blogjava.net/hua/category/10658.html</link><description>即使世界明天毁灭，我也要在今天种下我的葡萄树。 </description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 18:48:07 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 18:48:07 GMT</pubDate><ttl>60</ttl><item><title>用于XML的简单API</title><link>http://www.blogjava.net/hua/archive/2007/01/16/94234.html</link><dc:creator>花</dc:creator><author>花</author><pubDate>Tue, 16 Jan 2007 08:26:00 GMT</pubDate><guid>http://www.blogjava.net/hua/archive/2007/01/16/94234.html</guid><wfw:comment>http://www.blogjava.net/hua/comments/94234.html</wfw:comment><comments>http://www.blogjava.net/hua/archive/2007/01/16/94234.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hua/comments/commentRss/94234.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hua/services/trackbacks/94234.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 替换和插入文本										下面要做的事情就是自定义解析器，你可以知道如何得到通常会忽略的信息。但是在这之前，先要学习一些重要的XML概念。本节中，要学习： 										·     处理特殊字符("&lt;", "&amp;",等等)										·   使用XML风格语法处理文本										处理特殊字符 				...&nbsp;&nbsp;<a href='http://www.blogjava.net/hua/archive/2007/01/16/94234.html'>阅读全文</a><img src ="http://www.blogjava.net/hua/aggbug/94234.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hua/" target="_blank">花</a> 2007-01-16 16:26 <a href="http://www.blogjava.net/hua/archive/2007/01/16/94234.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Spring中如何使用Freemarker</title><link>http://www.blogjava.net/hua/archive/2006/12/20/89049.html</link><dc:creator>花</dc:creator><author>花</author><pubDate>Wed, 20 Dec 2006 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/hua/archive/2006/12/20/89049.html</guid><wfw:comment>http://www.blogjava.net/hua/comments/89049.html</wfw:comment><comments>http://www.blogjava.net/hua/archive/2006/12/20/89049.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hua/comments/commentRss/89049.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hua/services/trackbacks/89049.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 在Spring中如何使用Freemarker																																																																																																																																																		...&nbsp;&nbsp;<a href='http://www.blogjava.net/hua/archive/2006/12/20/89049.html'>阅读全文</a><img src ="http://www.blogjava.net/hua/aggbug/89049.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hua/" target="_blank">花</a> 2006-12-20 15:18 <a href="http://www.blogjava.net/hua/archive/2006/12/20/89049.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java中四种操作xml方式的比较</title><link>http://www.blogjava.net/hua/archive/2006/08/16/64006.html</link><dc:creator>花</dc:creator><author>花</author><pubDate>Wed, 16 Aug 2006 14:18:00 GMT</pubDate><guid>http://www.blogjava.net/hua/archive/2006/08/16/64006.html</guid><wfw:comment>http://www.blogjava.net/hua/comments/64006.html</wfw:comment><comments>http://www.blogjava.net/hua/archive/2006/08/16/64006.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hua/comments/commentRss/64006.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hua/services/trackbacks/64006.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New" size="1">1. 介绍</font>
		</p>
		<p>
				<font face="Courier New" size="1">1）DOM(JAXP Crimson解析器) <br />        DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构，然后才能做任何工作。由于它是基于信息层次的，因而DOM被认为是基于树或基于对象的。DOM以及广义的基于树的处理具有几个优点。首先，由于树在内存中是持久的，因此可以修改它以便应用程序能对数据和结构作出更改。它还可以在任何时候在树中上下导航，而不是像SAX那样是一次性的处理。DOM使用起来也要简单得多。</font>
		</p>
		<p>
				<font face="Courier New" size="1">2）SAX</font>
		</p>
		<p>
				<font face="Courier New" size="1">        SAX处理的优点非常类似于流媒体的优点。分析能够立即开始，而不是等待所有的数据被处理。而且，由于应用程序只是在读取数据时检查数据，因此不需要将数据存储在内存中。这对于大型文档来说是个巨大的优点。事实上，应用程序甚至不必解析整个文档；它可以在某个条件得到满足时停止解析。一般来说，SAX还比它的替代者DOM快许多。 <br /> 　　选择DOM还是选择SAX？ 对于需要自己编写代码来处理XML文档的开发人员来说，  选择DOM还是SAX解析模型是一个非常重要的设计决策。 DOM采用建立树形结构的方式访问XML文档，而SAX采用的事件模型。 <br /><br />　　DOM解析器把XML文档转化为一个包含其内容的树，并可以对树进行遍历。用DOM解析模型的优点是编程容易，开发人员只需要调用建树的指令，然后利用navigation APIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档，所以对性能和内存的要求比较高，尤其是遇到很大的XML文件的时候。由于它的遍历能力，DOM解析器常用于XML文档需要频繁的改变的服务中。 <br /><br />　　SAX解析器采用了基于事件的模型，它在解析XML文档的时候可以触发一系列的事件，当发现给定的tag的时候，它可以激活一个回调方法，告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低，因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时，SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难，而且很难同时访问同一个文档中的多处不同数据。 </font>
		</p>
		<p>
				<font face="Courier New" size="1">3）JDOM           http://www.jdom.org</font>
		</p>
		<p>
				<font face="Courier New" size="1">          JDOM的目的是成为Java特定文档模型，它简化与XML的交互并且比使用DOM实现更快。由于是第一个Java特定模型，JDOM一直得到大力推广和促进。正在考虑通过“Java规范请求JSR-102”将它最终用作“Java标准扩展”。从2000年初就已经开始了JDOM开发。 </font>
		</p>
		<p>
				<font face="Courier New" size="1">　　JDOM与DOM主要有两方面不同。首先，JDOM仅使用具体类而不使用接口。这在某些方面简化了API，但是也限制了灵活性。第二，API大量使用了Collections类，简化了那些已经熟悉这些类的Java开发者的使用。 </font>
		</p>
		<p>
				<font face="Courier New" size="1">　　JDOM文档声明其目的是“使用20%(或更少)的精力解决80%(或更多)Java/XML问题”(根据学习曲线假定为20%)。JDOM对于大多数Java/XML应用程序来说当然是有用的，并且大多数开发者发现API比DOM容易理解得多。JDOM还包括对程序行为的相当广泛检查以防止用户做任何在XML中无意义的事。然而，它仍需要您充分理解XML以便做一些超出基本的工作(或者甚至理解某些情况下的错误)。这也许是比学习DOM或JDOM接口都更有意义的工作。 </font>
		</p>
		<p>
				<font face="Courier New" size="1">　　JDOM自身不包含解析器。它通常使用SAX2解析器来解析和验证输入XML文档(尽管它还可以将以前构造的DOM表示作为输入)。它包含一些转换器以将JDOM表示输出成SAX2事件流、DOM模型或XML文本文档。JDOM是在Apache许可证变体下发布的开放源码。</font>
		</p>
		<p>
				<font face="Courier New" size="1">4）DOM4J http://dom4j.sourceforge.net <br />             <br />        虽然DOM4J代表了完全独立的开发结果，但最初，它是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能，包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项，它通过DOM4J API和标准DOM接口具有并行访问功能。从2000下半年开始，它就一直处于开发之中。 </font>
		</p>
		<p>
				<font face="Courier New" size="1">　　为支持所有这些功能，DOM4J使用接口和抽象基本类方法。DOM4J大量使用了API中的Collections类，但是在许多情况下，它还提供一些替代方法以允许更好的性能或更直接的编码方法。直接好处是，虽然DOM4J付出了更复杂的API的代价，但是它提供了比JDOM大得多的灵活性。 </font>
		</p>
		<p>
				<font face="Courier New" size="1">　　在添加灵活性、XPath集成和对大文档处理的目标时，DOM4J的目标与JDOM是一样的：针对Java开发者的易用性和直观操作。它还致力于成为比JDOM更完整的解决方案，实现在本质上处理所有Java/XML问题的目标。在完成该目标时，它比JDOM更少强调防止不正确的应用程序行为。 </font>
		</p>
		<p>
				<font face="Courier New" size="1">　　DOM4J是一个非常非常优秀的Java XML API，具有性能优异、功能强大和极端易用使用的特点，同时它也是一个开放源代码的软件。如今你可以看到越来越多的Java软件都在使用DOM4J来读写XML，特别值得一提的是连Sun的JAXM也在用DOM4J。 <br /></font>
		</p>
		<p>
				<font face="Courier New" size="1">2.. 比较</font>
		</p>
		<p>
				<font face="Courier New" size="1">1）DOM4J性能最好，连Sun的JAXM也在用DOM4J。目前许多开源项目中大量采用DOM4J，例如大名鼎鼎的Hibernate也用DOM4J来读取XML配置文件。如果不考虑可移植性，那就采用DOM4J.</font>
		</p>
		<p>
				<font face="Courier New" size="1">2）JDOM和DOM在性能测试时表现不佳，在测试10M文档时内存溢出。在小文档情况下还值得考虑使用DOM和JDOM。虽然JDOM的开发者已经说明他们期望在正式发行版前专注性能问题，但是从性能观点来看，它确实没有值得推荐之处。另外，DOM仍是一个非常好的选择。DOM实现广泛应用于多种编程语言。它还是许多其它与XML相关的标准的基础，因为它正式获得W3C推荐(与基于非标准的Java模型相对)，所以在某些类型的项目中可能也需要它(如在JavaScript中使用DOM)。</font>
		</p>
		<p>
				<font face="Courier New" size="1">3）SAX表现较好，这要依赖于它特定的解析方式－事件驱动。一个SAX检测即将到来的XML流，但并没有载入到内存(当然当XML流被读入时，会有部分文档暂时隐藏在内存中)。</font>
		</p>
		<p>
				<font face="Courier New" size="1">3. 四种xml操作方式的基本使用方法</font>
		</p>
		<p>
				<font face="Courier New" size="1">xml文件：</font>
		</p>
		<p>
				<font face="Courier New" size="1">＜?xml version="1.0" encoding="GB2312"?＞<br />＜RESULT＞<br />    ＜VALUE＞ <br />　　      ＜NO＞A1234＜/NO＞ <br />　　     ＜ADDR＞四川省XX县XX镇XX路X段XX号＜/ADDR＞<br />    ＜/VALUE＞<br />    ＜VALUE＞ <br />　　      ＜NO＞B1234＜/NO＞ <br />　     　＜ADDR＞四川省XX市XX乡XX村XX组＜/ADDR＞<br />    ＜/VALUE＞<br />＜/RESULT＞ </font>
		</p>
		<p>
				<font face="Courier New" size="1">1）DOM</font>
		</p>
		<p>
				<font face="Courier New" size="1">import java.io.*;<br />import java.util.*;<br />import org.w3c.dom.*;<br />import javax.xml.parsers.*; </font>
		</p>
		<p>
				<font face="Courier New" size="1">public class MyXMLReader{ <br />　public static void main(String arge[]){ </font>
		</p>
		<p>
				<font face="Courier New" size="1">　　long lasting =System.currentTimeMillis(); <br />　　try{  <br />　　　File f=new File("data_10k.xml"); <br />　　　DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); <br />　　　DocumentBuilder builder=factory.newDocumentBuilder(); <br />　　　Document doc = builder.parse(f); <br />　　　NodeList nl = doc.getElementsByTagName("VALUE"); <br />　　　for (int i=0;i＜nl.getLength();i++){ <br />　　　　System.out.print("车牌号码:" + doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue()); <br />　　　　System.out.println("车主地址:" + doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue()); <br />　 　} <br />　　}catch(Exception e){ <br />　　　e.printStackTrace(); <br />} </font>
		</p>
		<p>
				<font face="Courier New" size="1">2）SAX</font>
		</p>
		<p>
				<font face="Courier New" size="1">import org.xml.sax.*;<br />import org.xml.sax.helpers.*;<br />import javax.xml.parsers.*; </font>
		</p>
		<p>
				<font face="Courier New" size="1">public class MyXMLReader extends DefaultHandler { </font>
		</p>
		<p>
				<font face="Courier New" size="1">　java.util.Stack tags = new java.util.Stack(); <br />　public MyXMLReader() { <br />　　super();<br />   } </font>
		</p>
		<p>
				<font face="Courier New" size="1">　public static void main(String args[]) { <br />　　long lasting = System.currentTimeMillis(); <br />　　try { <br />　　　SAXParserFactory sf = SAXParserFactory.newInstance(); <br />　　　SAXParser sp = sf.newSAXParser(); <br />　　　MyXMLReader reader = new MyXMLReader(); <br />　　　sp.parse(new InputSource("data_10k.xml"), reader); <br />　　} catch (Exception e) { <br />　　　e.printStackTrace(); <br />　　} </font>
		</p>
		<p>
				<font face="Courier New" size="1">　　System.out.println("运行时间：" + (System.currentTimeMillis() - lasting) + "毫秒");} <br />　　public void characters(char ch[], int start, int length) throws SAXException { <br />　　String tag = (String) tags.peek(); <br />　　if (tag.equals("NO")) {  <br />　　　System.out.print("车牌号码：" + new String(ch, start, length));<br />    }<br />    if (tag.equals("ADDR")) { <br />　　System.out.println("地址:" + new String(ch, start, length));<br />    }<br />   } </font>
		</p>
		<p>
				<font face="Courier New" size="1">　　public void startElement(String uri,String localName,String qName,Attributes attrs) { <br />　　tags.push(qName);}<br />}  </font>
		</p>
		<p>
				<font face="Courier New" size="1">3） JDOM</font>
		</p>
		<p>
				<font face="Courier New" size="1">import java.io.*;<br />import java.util.*;<br />import org.jdom.*;<br />import org.jdom.input.*; </font>
		</p>
		<p>
				<font face="Courier New" size="1">public class MyXMLReader { </font>
		</p>
		<p>
				<font face="Courier New" size="1">　public static void main(String arge[]) { <br />　　long lasting = System.currentTimeMillis(); <br />　　try { <br />　　　SAXBuilder builder = new SAXBuilder();  <br />　　　Document doc = builder.build(new File("data_10k.xml"));  <br />　　　Element foo = doc.getRootElement();  <br />　　　List allChildren = foo.getChildren();  <br />　　　for(int i=0;i＜allChildren.size();i++) {  <br />　　　　System.out.print("车牌号码:" + ((Element)allChildren.get(i)).getChild("NO").getText()); <br />　　　　System.out.println("车主地址:" + ((Element)allChildren.get(i)).getChild("ADDR").getText()); <br />　　　} <br />　　} catch (Exception e) { <br />　　　e.printStackTrace(); <br />} </font>
		</p>
		<p>
				<font face="Courier New" size="1">}</font>
		</p>
		<p>
				<font face="Courier New" size="1">4）DOM4J</font>
		</p>
		<p>
				<font face="Courier New" size="1">import java.io.*;<br />import java.util.*;<br />import org.dom4j.*;<br />import org.dom4j.io.*; </font>
		</p>
		<p>
				<font face="Courier New" size="1">public class MyXMLReader { </font>
		</p>
		<p>
				<font face="Courier New" size="1">　public static void main(String arge[]) { <br />　　long lasting = System.currentTimeMillis(); <br />　　try { <br />　　　File f = new File("data_10k.xml"); <br />　　　SAXReader reader = new SAXReader(); <br />　　　Document doc = reader.read(f); <br />　　　Element root = doc.getRootElement(); <br />　　　Element foo; <br />　　　for (Iterator i = root.elementIterator("VALUE"); i.hasNext();) { <br />　　　　foo = (Element) i.next(); <br />　　　　System.out.print("车牌号码:" + foo.elementText("NO")); <br />　　　　System.out.println("车主地址:" + foo.elementText("ADDR")); <br />　　　} <br />　　} catch (Exception e) { <br />　　　e.printStackTrace(); <br />    } <br />}</font>
		</p>
<img src ="http://www.blogjava.net/hua/aggbug/64006.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hua/" target="_blank">花</a> 2006-08-16 22:18 <a href="http://www.blogjava.net/hua/archive/2006/08/16/64006.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat中用web.xml控制Web应用详解(1) </title><link>http://www.blogjava.net/hua/archive/2006/07/20/59179.html</link><dc:creator>花</dc:creator><author>花</author><pubDate>Thu, 20 Jul 2006 06:17:00 GMT</pubDate><guid>http://www.blogjava.net/hua/archive/2006/07/20/59179.html</guid><wfw:comment>http://www.blogjava.net/hua/comments/59179.html</wfw:comment><comments>http://www.blogjava.net/hua/archive/2006/07/20/59179.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hua/comments/commentRss/59179.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hua/services/trackbacks/59179.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New">1 定义头和根元素</font>
		</p>
		<p>
				<font face="Courier New">部署描述符文件就像所有XML文件一样，必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码。<br />DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本（如2.2或2.3）并指定管理此文件其余部分内容的语法的DTD(Document Type Definition，文档类型定义)。<br />所有部署描述符文件的顶层（根）元素为web-app。请注意，XML元素不像HTML，他们是大小写敏感的。因此，web-App和WEB-APP都是不合法的，web-app必须用小写。</font>
		</p>
		<p>
				<font face="Courier New">2 部署描述符文件内的元素次序</font>
		</p>
		<p>
				<font face="Courier New">XML元素不仅是大小写敏感的，而且它们还对出现在其他元素中的次序敏感。例如，XML头必须是文件中的第一项，DOCTYPE声明必须是第二项，而web-app元素必须是第三项。在web-app元素内，元素的次序也很重要。服务器不一定强制要求这种次序，但它们允许（实际上有些服务器就是这样做的）完全拒绝执行含有次序不正确的元素的Web应用。这表示使用非标准元素次序的web.xml文件是不可移植的。<br />下面的列表给出了所有可直接出现在web-app元素内的合法元素所必需的次序。例如，此列表说明servlet元素必须出现在所有servlet-mapping元素之前。请注意，所有这些元素都是可选的。因此，可以省略掉某一元素，但不能把它放于不正确的位置。<br />l icon icon元素指出IDE和GUI工具用来表示Web应用的一个和两个图像文件的位置。<br />l display-name display-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称。<br />l description description元素给出与此有关的说明性文本。<br />l context-param context-param元素声明应用范围内的初始化参数。<br />l filter 过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。<br />l filter-mapping 一旦命名了一个过滤器，就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。<br />l listener servlet API的版本2.3增加了对事件监听程序的支持，事件监听程序在建立、修改和删除会话或servlet环境时得到通知。Listener元素指出事件监听程序类。<br />l servlet 在向servlet或JSP页面制定初始化参数或定制URL时，必须首先命名servlet或JSP页面。Servlet元素就是用来完成此项任务的。<br />l servlet-mapping 服务器一般为servlet提供一个缺省的URL：</font>
				<a href="http://host/webAppPrefix/servlet/ServletName">
						<font face="Courier New">http://host/webAppPrefix/servlet/ServletName</font>
				</a>
				<font face="Courier New">。但是，常常会更改这个URL，以便servlet可以访问初始化参数或更容易地处理相对URL。在更改缺省URL时，使用servlet-mapping元素。<br />l session-config 如果某个会话在一定时间内未被访问，服务器可以抛弃它以节省内存。可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值，或者可利用session-config元素制定缺省超时值。<br />l mime-mapping 如果Web应用具有想到特殊的文件，希望能保证给他们分配特定的MIME类型，则mime-mapping元素提供这种保证。<br />l welcom-file-list welcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URL时，使用哪个文件。<br />l error-page error-page元素使得在返回特定HTTP状态代码时，或者特定类型的异常被抛出时，能够制定将要显示的页面。<br />l taglib taglib元素对标记库描述符文件（Tag Libraryu Descriptor file）指定别名。此功能使你能够更改TLD文件的位置，而不用编辑使用这些文件的JSP页面。<br />l resource-env-ref resource-env-ref元素声明与资源相关的一个管理对象。<br />l resource-ref resource-ref元素声明一个资源工厂使用的外部资源。<br />l security-constraint security-constraint元素制定应该保护的URL。它与login-config元素联合使用<br />l login-config 用login-config元素来指定服务器应该怎样给试图访问受保护页面的用户授权。它与sercurity-constraint元素联合使用。<br />l security-role security-role元素给出安全角色的一个列表，这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。分别地声明角色可使高级IDE处理安全信息更为容易。<br />l env-entry env-entry元素声明Web应用的环境项。<br />l ejb-ref ejb-ref元素声明一个EJB的主目录的引用。<br />l ejb-local-ref ejb-local-ref元素声明一个EJB的本地主目录的应用。</font>
		</p>
		<p>
				<font face="Courier New">3 分配名称和定制的UL</font>
		</p>
		<p>
				<font face="Courier New">在web.xml中完成的一个最常见的任务是对servlet或JSP页面给出名称和定制的URL。用servlet元素分配名称，使用servlet-mapping元素将定制的URL与刚分配的名称相关联。<br />3.1 分配名称<br />为了提供初始化参数，对servlet或JSP页面定义一个定制URL或分配一个安全角色，必须首先给servlet或JSP页面一个名称。可通过servlet元素分配一个名称。最常见的格式包括servlet-name和servlet-class子元素（在web-app元素内），如下所示：<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.TestServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt; </font>
		</p>
		<p>
				<font face="Courier New">这表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已经得到了注册名Test。给servlet一个名称具有两个主要的含义。首先，初始化参数、定制的URL模式以及其他定制通过此注册名而不是类名引用此servlet。其次,可在URL而不是类名中使用此名称。因此，利用刚才给出的定义，URL </font>
				<a href="http://host/webAppPrefix/servlet/Test">
						<font face="Courier New">http://host/webAppPrefix/servlet/Test</font>
				</a>
				<font face="Courier New"> 可用于 </font>
				<a href="http://host/webAppPrefix/servlet/moreservlets.TestServlet">
						<font face="Courier New">http://host/webAppPrefix/servlet/moreservlets.TestServlet</font>
				</a>
				<font face="Courier New"> 的场所。<br />请记住：XML元素不仅是大小写敏感的，而且定义它们的次序也很重要。例如，web-app元素内所有servlet元素必须位于所有servlet-mapping元素（下一小节介绍）之前，而且还要位于5.6节和5.11节讨论的与过滤器或文档相关的元素（如果有的话）之前。类似地，servlet的servlet-name子元素也必须出现在servlet-class之前。5.2节"部署描述符文件内的元素次序"将详细介绍这种必需的次序。<br />例如，程序清单5-1给出了一个名为TestServlet的简单servlet，它驻留在moreservlets程序包中。因为此servlet是扎根在一个名为deployDemo的目录中的Web应用的组成部分，所以TestServlet.class放在deployDemo/WEB-INF/classes/moreservlets中。程序清单5-2给出将放置在deployDemo/WEB-INF/内的web.xml文件的一部分。此web.xml文件使用servlet-name和servlet-class元素将名称Test与TestServlet.class相关联。图5-1和图5-2分别显示利用缺省URL和注册名调用TestServlet时的结果。</font>
		</p>
		<p>
				<font face="Courier New">程序清单5-1 TestServlet.java<br />package moreservlets;</font>
		</p>
		<p>
				<font face="Courier New">import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;</font>
		</p>
		<p>
				<font face="Courier New">/** Simple servlet used to illustrate servlet naming<br />* and custom URLs.<br />* &lt;P&gt;<br />* Taken from More Servlets and JavaServer Pages<br />* from Prentice Hall and Sun Microsystems Press,<br />* </font>
				<a href="http://www.moreservlets.com/">
						<font face="Courier New">http://www.moreservlets.com/</font>
				</a>
				<font face="Courier New">.<br />* &amp;copy; 2002 Marty Hall; may be freely used or adapted.<br />*/</font>
		</p>
		<p>
				<font face="Courier New">public class TestServlet extends HttpServlet {<br />public void doGet(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />String uri = request.getRequestURI();<br />out.println(ServletUtilities.headWithTitle("Test Servlet") +<br />"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<br />"&lt;H2&gt;URI: " + uri + "&lt;/H2&gt;\n" +<br />"&lt;/BODY&gt;&lt;/HTML&gt;");<br />}<br />}</font>
		</p>
		<p>
				<br />
				<font face="Courier New">程序清单5-2 web.xml（说明servlet名称的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
				<a href="http://java.sun.com/dtd/web-app_2_3.dtd">
						<font face="Courier New">http://java.sun.com/dtd/web-app_2_3.dtd</font>
				</a>
				<font face="Courier New">"&gt;</font>
		</p>
		<p>
				<font face="Courier New">&lt;web-app&gt;<br />&lt;!-- … --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.TestServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;!-- … --&gt;<br />&lt;/web-app&gt;</font>
		</p>
		<p>
				<font face="Courier New">3.2 定义定制的URL<br />大多数服务器具有一个缺省的serlvet URL：<br /></font>
				<a href="http://host/webAppPrefix/servlet/packageName.ServletName">
						<font face="Courier New">http://host/webAppPrefix/servlet/packageName.ServletName</font>
				</a>
				<font face="Courier New">。虽然在开发中使用这个URL很方便，但是我们常常会希望另一个URL用于部署。例如，可能会需要一个出现在Web应用顶层的URL（如，</font>
				<a href="http://host/webAppPrefix/Anyname">
						<font face="Courier New">http://host/webAppPrefix/Anyname</font>
				</a>
				<font face="Courier New">），并且在此URL中没有servlet项。位于顶层的URL简化了相对URL的使用。此外，对许多开发人员来说，顶层URL看上去比更长更麻烦的缺省URL更简短。<br />事实上，有时需要使用定制的URL。比如，你可能想关闭缺省URL映射，以便更好地强制实施安全限制或防止用户意外地访问无初始化参数的servlet。如果你禁止了缺省的URL，那么你怎样访问servlet呢？这时只有使用定制的URL了。<br />为了分配一个定制的URL，可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet-name元素提供了一个任意名称，可利用此名称引用相应的servlet；url-pattern描述了相对于Web应用的根目录的URL。url-pattern元素的值必须以斜杠（/）起始。<br />下面给出一个简单的web.xml摘录，它允许使用URL </font>
				<a href="http://host/webAppPrefix/UrlTest">
						<font face="Courier New">http://host/webAppPrefix/UrlTest</font>
				</a>
				<font face="Courier New">而不是</font>
				<a href="http://host/webAppPrefix/servlet/Test">
						<font face="Courier New">http://host/webAppPrefix/servlet/Test</font>
				</a>
				<font face="Courier New">或<br /></font>
				<a href="http://host/webAppPrefix/servlet/moreservlets.TestServlet">
						<font face="Courier New">http://host/webAppPrefix/servlet/moreservlets.TestServlet</font>
				</a>
				<font face="Courier New">。请注意，仍然需要XML头、DOCTYPE声明以及web-app封闭元素。此外，可回忆一下，XML元素出现地次序不是随意的。特别是，需要把所有servlet元素放在所有servlet-mapping元素之前。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.TestServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/UrlTest&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />URL模式还可以包含通配符。例如，下面的小程序指示服务器发送所有以Web应用的URL前缀开始，以..asp结束的请求到名为BashMS的servlet。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;BashMS&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;msUtils.ASPTranslator&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;BashMS&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/*.asp&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />3.3 命名JSP页面<br />因为JSP页面要转换成sevlet，自然希望就像命名servlet一样命名JSP页面。毕竟，JSP页面可能会从初始化参数、安全设置或定制的URL中受益，正如普通的serlvet那样。虽然JSP页面的后台实际上是servlet这句话是正确的，但存在一个关键的猜疑：即，你不知道JSP页面的实际类名（因为系统自己挑选这个名字）。因此，为了命名JSP页面，可将jsp-file元素替换为servlet-calss元素，如下所示：<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Test&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/TestPage.jsp&lt;/jsp-file&gt;<br />&lt;/servlet&gt;<br />命名JSP页面的原因与命名servlet的原因完全相同：即为了提供一个与定制设置（如，初始化参数和安全设置）一起使用的名称，并且，以便能更改激活JSP页面的URL（比方说，以便多个URL通过相同页面得以处理，或者从URL中去掉.jsp扩展名）。但是，在设置初始化参数时，应该注意，JSP页面是利用jspInit方法，而不是init方法读取初始化参数的。<br />例如，程序清单5-3给出一个名为TestPage.jsp的简单JSP页面，它的工作只是打印出用来激活它的URL的本地部分。TestPage.jsp放置在deployDemo应用的顶层。程序清单5-4给出了用来分配一个注册名PageName，然后将此注册名与</font>
				<a href="http://host/webAppPrefix/UrlTest2/anything">
						<font face="Courier New">http://host/webAppPrefix/UrlTest2/anything</font>
				</a>
				<font face="Courier New"> 形式的URL相关联的web.xml文件（即，deployDemo/WEB-INF/web.xml）的一部分。</font>
		</p>
		<p>
				<font face="Courier New">程序清单5-3 TestPage.jsp<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;<br />&lt;TITLE&gt;<br />JSP Test Page<br />&lt;/TITLE&gt;<br />&lt;/HEAD&gt;<br />&lt;BODY BGCOLOR="#FDF5E6"&gt;<br />&lt;H2&gt;URI: &lt;%= request.getRequestURI() %&gt;&lt;/H2&gt;<br />&lt;/BODY&gt;<br />&lt;/HTML&gt;</font>
		</p>
		<p>
				<br />
				<font face="Courier New">程序清单5-4 web.xml（说明JSP页命名的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
				<a href="http://java.sun.com/dtd/web-app_2_3.dtd">
						<font face="Courier New">http://java.sun.com/dtd/web-app_2_3.dtd</font>
				</a>
				<font face="Courier New">"&gt;</font>
		</p>
		<p>
				<font face="Courier New">&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/TestPage.jsp&lt;/jsp-file&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt; PageName &lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/UrlTest2/*&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;</font>
		</p>
		<p>
				<br />
				<font face="Courier New">4 禁止激活器servlet</font>
		</p>
		<p>
				<font face="Courier New">对servlet或JSP页面建立定制URL的一个原因是，这样做可以注册从init（servlet）或jspInit（JSP页面）方法中读取得初始化参数。但是，初始化参数只在是利用定制URL模式或注册名访问servlet或JSP页面时可以使用，用缺省URL </font>
				<a href="http://host/webAppPrefix/servlet/ServletName">
						<font face="Courier New">http://host/webAppPrefix/servlet/ServletName</font>
				</a>
				<font face="Courier New"> 访问时不能使用。因此，你可能会希望关闭缺省URL，这样就不会有人意外地调用初始化servlet了。这个过程有时称为禁止激活器servlet，因为多数服务器具有一个用缺省的servlet URL注册的标准servlet，并激活缺省的URL应用的实际servlet。<br />有两种禁止此缺省URL的主要方法：<br />l 在每个Web应用中重新映射/servlet/模式。<br />l 全局关闭激活器servlet。<br />重要的是应该注意到，虽然重新映射每个Web应用中的/servlet/模式比彻底禁止激活servlet所做的工作更多，但重新映射可以用一种完全可移植的方式来完成。相反，全局禁止激活器servlet完全是针对具体机器的，事实上有的服务器（如ServletExec）没有这样的选择。下面的讨论对每个Web应用重新映射/servlet/ URL模式的策略。后面提供在Tomcat中全局禁止激活器servlet的详细内容。<br />4.1 重新映射/servlet/URL模式<br />在一个特定的Web应用中禁止以</font>
				<a href="http://host/webAppPrefix/servlet/">
						<font face="Courier New">http://host/webAppPrefix/servlet/</font>
				</a>
				<font face="Courier New"> 开始的URL的处理非常简单。所需做的事情就是建立一个错误消息servlet，并使用前一节讨论的url-pattern元素将所有匹配请求转向该servlet。只要简单地使用：<br />&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br />作为servlet-mapping元素中的模式即可。<br />例如，程序清单5-5给出了将SorryServlet servlet（程序清单5-6）与所有以</font>
				<a href="http://host/webAppPrefix/servlet/">
						<font face="Courier New">http://host/webAppPrefix/servlet/</font>
				</a>
				<font face="Courier New"> 开头的URL相关联的部署描述符文件的一部分。</font>
		</p>
		<p>
				<font face="Courier New">程序清单5-5 web.xml（说明JSP页命名的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
				<a href="http://java.sun.com/dtd/web-app_2_3.dtd">
						<font face="Courier New">http://java.sun.com/dtd/web-app_2_3.dtd</font>
				</a>
				<font face="Courier New">"&gt;</font>
		</p>
		<p>
				<font face="Courier New">&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Sorry&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.SorryServlet&lt;/servlet-class&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt; Sorry &lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;</font>
		</p>
		<p>
				<br />
				<font face="Courier New">程序清单5-6 SorryServlet.java<br />package moreservlets;</font>
		</p>
		<p>
				<font face="Courier New">import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;</font>
		</p>
		<p>
				<font face="Courier New">/** Simple servlet used to give error messages to<br />* users who try to access default servlet URLs<br />* (i.e., </font>
				<a href="http://host/webAppPrefix/servlet/ServletName">
						<font face="Courier New">http://host/webAppPrefix/servlet/ServletName</font>
				</a>
				<font face="Courier New">)<br />* in Web applications that have disabled this<br />* behavior.<br />* &lt;P&gt;<br />* Taken from More Servlets and JavaServer Pages<br />* from Prentice Hall and Sun Microsystems Press,<br />* </font>
				<a href="http://www.moreservlets.com/">
						<font face="Courier New">http://www.moreservlets.com/</font>
				</a>
				<font face="Courier New">.<br />* &amp;copy; 2002 Marty Hall; may be freely used or adapted.<br />*/</font>
		</p>
		<p>
				<font face="Courier New">public class SorryServlet extends HttpServlet {<br />public void doGet(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />String title = "Invoker Servlet Disabled.";<br />out.println(ServletUtilities.headWithTitle(title) +<br />"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<br />"&lt;H2&gt;" + title + "&lt;/H2&gt;\n" +<br />"Sorry, access to servlets by means of\n" +<br />"URLs that begin with\n" +<br />"</font>
				<a href="http://host/webAppPrefix/servlet/\n">
						<font face="Courier New">http://host/webAppPrefix/servlet/\n</font>
				</a>
				<font face="Courier New">" +<br />"has been disabled.\n" + <br />"&lt;/BODY&gt;&lt;/HTML&gt;");<br />}</font>
		</p>
		<p>
				<font face="Courier New">public void doPost(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />doGet(request, response);<br />}<br />}</font>
		</p>
		<p>
				<br />
				<font face="Courier New">4.2 全局禁止激活器：Tomcat<br />Tomcat 4中用来关闭缺省URL的方法与Tomcat 3中所用的很不相同。下面介绍这两种方法：<br />1．禁止激活器： Tomcat 4<br />Tomcat 4用与前面相同的方法关闭激活器servlet，即利用web.xml中的url-mapping元素进行关闭。不同之处在于Tomcat使用了放在install_dir/conf中的一个服务器专用的全局web.xml文件，而前面使用的是存放在每个Web应用的WEB-INF目录中的标准web.xml文件。<br />因此，为了在Tomcat 4中关闭激活器servlet，只需在install_dir/conf/web.xml中简单地注释出/servlet/* URL映射项即可，如下所示：<br />&lt;!-- <br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;invoker&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/servlet/*&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />--&gt;<br />再次提醒，应该注意这个项是位于存放在install_dir/conf的Tomcat专用的web.xml文件中的，此文件不是存放在每个Web应用的WEB-INF目录中的标准web.xml。<br />2．禁止激活器：Tomcat3<br />在Apache Tomcat的版本3中，通过在install_dir/conf/server.xml中注释出InvokerInterceptor项全局禁止缺省servlet URL。例如，下面是禁止使用缺省servlet URL的server.xml文件的一部分。<br />&lt;!-- <br />&lt;RequsetInterceptor <br />className="org.apache.tomcat.request.InvokerInterceptor"<br />debug="0" prefix="/servlet/" /&gt;<br />--&gt;</font>
		</p>
		<p>
				<font face="Courier New">5 初始化和预装载servlet与JSP页面</font>
		</p>
		<p>
				<font face="Courier New">这里讨论控制servlet和JSP页面的启动行为的方法。特别是，说明了怎样分配初始化参数以及怎样更改服务器生存期中装载servlet和JSP页面的时刻。<br />5.1 分配servlet初始化参数<br />利用init-param元素向servlet提供初始化参数，init-param元素具有param-name和param-value子元素。例如，在下面的例子中，如果initServlet servlet是利用它的注册名（InitTest）访问的，它将能够从其方法中调用getServletConfig().getInitParameter("param1")获得"Value 1"，调用getServletConfig().getInitParameter("param2")获得"2"。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;InitTest&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.InitServlet&lt;/servlet-class&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;param1&lt;/param-name&gt;<br />&lt;param-value&gt;value1&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;param2&lt;/param-name&gt;<br />&lt;param-value&gt;2&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/servlet&gt;<br />在涉及初始化参数时，有几点需要注意：<br />l 返回值。GetInitParameter的返回值总是一个String。因此，在前一个例子中，可对param2使用Integer.parseInt获得一个int。<br />l JSP中的初始化。JSP页面使用jspInit而不是init。JSP页面还需要使用jsp-file元素代替servlet-class。<br />l 缺省URL。初始化参数只在通过它们的注册名或与它们注册名相关的定制URL模式访问Servlet时可以使用。因此，在这个例子中，param1和param2初始化参数将能够在使用URL </font>
				<a href="http://host/webAppPrefix/servlet/InitTest">
						<font face="Courier New">http://host/webAppPrefix/servlet/InitTest</font>
				</a>
				<font face="Courier New"> 时可用，但在使用URL </font>
				<a href="http://host/webAppPrefix/servlet/myPackage.InitServlet">
						<font face="Courier New">http://host/webAppPrefix/servlet/myPackage.InitServlet</font>
				</a>
				<font face="Courier New"> 时不能使用。<br />例如，程序清单5-7给出一个名为InitServlet的简单servlet，它使用init方法设置firstName和emailAddress字段。程序清单5-8给出分配名称InitTest给servlet的web.xml文件。<br />程序清单5-7 InitServlet.java<br />package moreservlets;</font>
		</p>
		<p>
				<font face="Courier New">import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;</font>
		</p>
		<p>
				<font face="Courier New">/** Simple servlet used to illustrate servlet<br />* initialization parameters.<br />* &lt;P&gt;<br />* Taken from More Servlets and JavaServer Pages<br />* from Prentice Hall and Sun Microsystems Press,<br />* </font>
				<a href="http://www.moreservlets.com/">
						<font face="Courier New">http://www.moreservlets.com/</font>
				</a>
				<font face="Courier New">.<br />* &amp;copy; 2002 Marty Hall; may be freely used or adapted.<br />*/</font>
		</p>
		<p>
				<font face="Courier New">public class InitServlet extends HttpServlet {<br />private String firstName, emailAddress;</font>
		</p>
		<p>
				<font face="Courier New">public void init() {<br />ServletConfig config = getServletConfig();<br />firstName = config.getInitParameter("firstName");<br />emailAddress = config.getInitParameter("emailAddress");<br />}</font>
		</p>
		<p>
				<font face="Courier New">public void doGet(HttpServletRequest request,<br />HttpServletResponse response)<br />throws ServletException, IOException {<br />response.setContentType("text/html");<br />PrintWriter out = response.getWriter();<br />String uri = request.getRequestURI();<br />out.println(ServletUtilities.headWithTitle("Init Servlet") +<br />"&lt;BODY BGCOLOR=\"#FDF5E6\"&gt;\n" +<br />"&lt;H2&gt;Init Parameters:&lt;/H2&gt;\n" +<br />"&lt;UL&gt;\n" +<br />"&lt;LI&gt;First name: " + firstName + "\n" +<br />"&lt;LI&gt;Email address: " + emailAddress + "\n" +<br />"&lt;/UL&gt;\n" + <br />"&lt;/BODY&gt;&lt;/HTML&gt;");<br />}<br />}</font>
		</p>
		<p>
				<br />
				<font face="Courier New">程序清单5-8 web.xml（说明初始化参数的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
				<a href="http://java.sun.com/dtd/web-app_2_3.dtd">
						<font face="Courier New">http://java.sun.com/dtd/web-app_2_3.dtd</font>
				</a>
				<font face="Courier New">"&gt;</font>
		</p>
		<p>
				<font face="Courier New">&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;InitTest&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;moreservlets.InitServlet&lt;/servlet-class&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;firstName&lt;/param-name&gt;<br />&lt;param-value&gt;Larry&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;emailAddress&lt;/param-name&gt;<br />&lt;param-value&gt;Ellison@Microsoft.com&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;</font>
		</p>
		<p>
				<font face="Courier New">5.2 分配JSP初始化参数<br />给JSP页面提供初始化参数在三个方面不同于给servlet提供初始化参数。<br />1）使用jsp-file而不是servlet-class。因此，WEB-INF/web.xml文件的servlet元素如下所示：<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/RealPage.jsp&lt;/jsp-file&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;...&lt;/param-name&gt;<br />&lt;param-value&gt;...&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />...<br />&lt;/servlet&gt;<br />2)几乎总是分配一个明确的URL模式。对servlet，一般相应地使用以</font>
				<a href="http://host/webAppPrefix/servlet/">
						<font face="Courier New">http://host/webAppPrefix/servlet/</font>
				</a>
				<font face="Courier New"> 开始的缺省URL。只需记住，使用注册名而不是原名称即可。这对于JSP页面在技术上也是合法的。例如，在上面给出的例子中，可用URL </font>
				<a href="http://host/webAppPrefix/servlet/PageName">
						<font face="Courier New">http://host/webAppPrefix/servlet/PageName</font>
				</a>
				<font face="Courier New"> 访问RealPage.jsp的对初始化参数具有访问权的版本。但在用于JSP页面时，许多用户似乎不喜欢应用常规的servlet的URL。此外，如果JSP页面位于服务器为其提供了目录清单的目录中（如，一个既没有index.html也没有index.jsp文件的目录），则用户可能会连接到此JSP页面，单击它，从而意外地激活未初始化的页面。因此，好的办法是使用url-pattern（5.3节）将JSP页面的原URL与注册的servlet名相关联。这样，客户机可使用JSP页面的普通名称，但仍然激活定制的版本。例如，给定来自项目1的servlet定义，可使用下面的servlet-mapping定义：<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/RealPage.jsp&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />3）JSP页使用jspInit而不是init。自动从JSP页面建立的servlet或许已经使用了inti方法。因此，使用JSP声明提供一个init方法是不合法的，必须制定jspInit方法。<br />为了说明初始化JSP页面的过程，程序清单5-9给出了一个名为InitPage.jsp的JSP页面，它包含一个jspInit方法且放置于deployDemo Web应用层次结构的顶层。一般，</font>
				<a href="http://host/deployDemo/InitPage.jsp">
						<font face="Courier New">http://host/deployDemo/InitPage.jsp</font>
				</a>
				<font face="Courier New"> 形式的URL将激活此页面的不具有初始化参数访问权的版本，从而将对firstName和emailAddress变量显示null。但是，web.xml文件（程序清单5-10）分配了一个注册名，然后将该注册名与URL模式/InitPage.jsp相关联。</font>
		</p>
		<p>
				<font face="Courier New">程序清单5-9 InitPage.jsp<br />&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"&gt;<br />&lt;HTML&gt;<br />&lt;HEAD&gt;&lt;TITLE&gt;JSP Init Test&lt;/TITLE&gt;&lt;/HEAD&gt;<br />&lt;BODY BGCOLOR="#FDF5E6"&gt;<br />&lt;H2&gt;Init Parameters:&lt;/H2&gt;<br />&lt;UL&gt;<br />&lt;LI&gt;First name: &lt;%= firstName %&gt;<br />&lt;LI&gt;Email address: &lt;%= emailAddress %&gt;<br />&lt;/UL&gt;<br />&lt;/BODY&gt;&lt;/HTML&gt;<br />&lt;%!<br />private String firstName, emailAddress;</font>
		</p>
		<p>
				<font face="Courier New">public void jspInit() {<br />ServletConfig config = getServletConfig();<br />firstName = config.getInitParameter("firstName");<br />emailAddress = config.getInitParameter("emailAddress");<br />}<br />%&gt;</font>
		</p>
		<p>
				<br />
				<font face="Courier New">程序清单5-10 web.xml（说明JSP页面的init参数的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
				<a href="http://java.sun.com/dtd/web-app_2_3.dtd">
						<font face="Courier New">http://java.sun.com/dtd/web-app_2_3.dtd</font>
				</a>
				<font face="Courier New">"&gt;</font>
		</p>
		<p>
				<font face="Courier New">&lt;web-app&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;InitPage&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/InitPage.jsp&lt;/jsp-file&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;firstName&lt;/param-name&gt;<br />&lt;param-value&gt;Bill&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;init-param&gt;<br />&lt;param-name&gt;emailAddress&lt;/param-name&gt;<br />&lt;param-value&gt;gates@oracle.com&lt;/param-value&gt;<br />&lt;/init-param&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt; <br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt; InitPage&lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/InitPage.jsp&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;</font>
		</p>
		<p>
				<br />
				<font face="Courier New">5.3 提供应用范围内的初始化参数<br />一般，对单个地servlet或JSP页面分配初始化参数。指定的servlet或JSP页面利用ServletConfig的getInitParameter方法读取这些参数。但是，在某些情形下，希望提供可由任意servlet或JSP页面借助ServletContext的getInitParameter方法读取的系统范围内的初始化参数。<br />可利用context-param元素声明这些系统范围内的初始化值。context-param元素应该包含param-name、param-value以及可选的description子元素，如下所示：<br />&lt;context-param&gt;<br />&lt;param-name&gt;support-email&lt;/param-name&gt;<br />&lt;param-value&gt;blackhole@mycompany.com&lt;/param-value&gt;<br />&lt;/context-param&gt;<br />可回忆一下，为了保证可移植性，web.xml内的元素必须以正确的次序声明。但这里应该注意，context-param元素必须出现任意与文档有关的元素（icon、display-name或description）之后及filter、filter-mapping、listener或servlet元素之前。<br />5.4 在服务器启动时装载servlet<br />假如servlet或JSP页面有一个要花很长时间执行的init（servlet）或jspInit（JSP）方法。例如，假如init或jspInit方法从某个数据库或ResourceBundle查找产量。这种情况下，在第一个客户机请求时装载servlet的缺省行为将对第一个客户机产生较长时间的延迟。因此，可利用servlet的load-on-startup元素规定服务器在第一次启动时装载servlet。下面是一个例子。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt; … &lt;/servlet-name&gt;<br />&lt;servlet-class&gt; … &lt;/servlet-class&gt; &lt;!-- Or jsp-file --&gt;<br />&lt;load-on-startup/&gt;<br />&lt;/servlet&gt;<br />可以为此元素体提供一个整数而不是使用一个空的load-on-startup。想法是服务器应该在装载较大数目的servlet或JSP页面之前装载较少数目的servlet或JSP页面。例如，下面的servlet项（放置在Web应用的WEB-INF目录下的web.xml文件中的web-app元素内）将指示服务器首先装载和初始化SearchServlet，然后装载和初始化由位于Web应用的result目录中的index.jsp文件产生的servlet。<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Search&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;myPackage.SearchServlet&lt;/servlet-class&gt; &lt;!-- Or jsp-file --&gt;<br />&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />&lt;/servlet&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;Results&lt;/servlet-name&gt;<br />&lt;servlet-class&gt;/results/index.jsp&lt;/servlet-class&gt; &lt;!-- Or jsp-file --&gt;<br />&lt;load-on-startup&gt;2&lt;/load-on-startup&gt;<br />&lt;/servlet&gt;</font>
		</p>
		<p>
				<font face="Courier New">6 声明过滤器</font>
		</p>
		<p>
				<font face="Courier New">servlet版本2.3引入了过滤器的概念。虽然所有支持servlet API版本2.3的服务器都支持过滤器，但为了使用与过滤器有关的元素，必须在web.xml中使用版本2.3的DTD。<br />过滤器可截取和修改进入一个servlet或JSP页面的请求或从一个servlet或JSP页面发出的相应。在执行一个servlet或JSP页面之前，必须执行第一个相关的过滤器的doFilter方法。在该过滤器对其FilterChain对象调用doFilter时，执行链中的下一个过滤器。如果没有其他过滤器，servlet或JSP页面被执行。过滤器具有对到来的ServletRequest对象的全部访问权，因此，它们可以查看客户机名、查找到来的cookie等。为了访问servlet或JSP页面的输出，过滤器可将响应对象包裹在一个替身对象（stand-in object）中，比方说把输出累加到一个缓冲区。在调用FilterChain对象的doFilter方法之后，过滤器可检查缓冲区，如有必要，就对它进行修改，然后传送到客户机。<br />例如，程序清单5-11帝国难以了一个简单的过滤器，只要访问相关的servlet或JSP页面，它就截取请求并在标准输出上打印一个报告（开发过程中在桌面系统上运行时，大多数服务器都可以使用这个过滤器）。</font>
		</p>
		<p>
				<font face="Courier New">程序清单5-11 ReportFilter.java<br />package moreservlets;</font>
		</p>
		<p>
				<font face="Courier New">import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />import java.util.*;</font>
		</p>
		<p>
				<font face="Courier New">/** Simple filter that prints a report on the standard output <br />* whenever the associated servlet or JSP page is accessed.<br />* &lt;P&gt;<br />* Taken from More Servlets and JavaServer Pages<br />* from Prentice Hall and Sun Microsystems Press,<br />* </font>
				<a href="http://www.moreservlets.com/">
						<font face="Courier New">http://www.moreservlets.com/</font>
				</a>
				<font face="Courier New">.<br />* &amp;copy; 2002 Marty Hall; may be freely used or adapted.<br />*/</font>
		</p>
		<p>
				<font face="Courier New">public class ReportFilter implements Filter {<br />public void doFilter(ServletRequest request,<br />ServletResponse response,<br />FilterChain chain)<br />throws ServletException, IOException {<br />HttpServletRequest req = (HttpServletRequest)request;<br />System.out.println(req.getRemoteHost() +<br />" tried to access " +<br />req.getRequestURL() +<br />" on " + new Date() + ".");<br />chain.doFilter(request,response);<br />}</font>
		</p>
		<p>
				<font face="Courier New">public void init(FilterConfig config)<br />throws ServletException {<br />}</font>
		</p>
		<p>
				<font face="Courier New">public void destroy() {}<br />}</font>
		</p>
		<p>
				<font face="Courier New">一旦建立了一个过滤器，可以在web.xml中利用filter元素以及filter-name（任意名称）、file-class（完全限定的类名）和（可选的）init-params子元素声明它。请注意，元素在web.xml的web-app元素中出现的次序不是任意的；允许服务器（但不是必需的）强制所需的次序，并且实际中有些服务器也是这样做的。但这里要注意，所有filter元素必须出现在任意filter-mapping元素之前，filter-mapping元素又必须出现在所有servlet或servlet-mapping元素之前。<br />例如，给定上述的ReportFilter类，可在web.xml中作出下面的filter声明。它把名称Reporter与实际的类ReportFilter（位于moreservlets程序包中）相关联。<br />&lt;filter&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;filter-class&gt;moresevlets.ReportFilter&lt;/filter-class&gt;<br />&lt;/filter&gt;<br />一旦命名了一个过滤器，可利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。关于此项工作有两种选择。<br />首先，可使用filter-name和servlet-name子元素把此过滤器与一个特定的servlet名（此servlet名必须稍后在相同的web.xml文件中使用servlet元素声明）关联。例如，下面的程序片断指示系统只要利用一个定制的URL访问名为SomeServletName的servlet或JSP页面，就运行名为Reporter的过滤器。<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;servlet-name&gt;SomeServletName&lt;/servlet-name&gt;<br />&lt;/filter-mapping&gt;<br />其次，可利用filter-name和url-pattern子元素将过滤器与一组servlet、JSP页面或静态内容相关联。例如，相面的程序片段指示系统只要访问Web应用中的任意URL，就运行名为Reporter的过滤器。<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />&lt;/filter-mapping&gt;<br />例如，程序清单5-12给出了将ReportFilter过滤器与名为PageName的servlet相关联的web.xml文件的一部分。名字PageName依次又与一个名为TestPage.jsp的JSP页面以及以模式</font>
				<a href="http://host/webAppPrefix/UrlTest2/">
						<font face="Courier New">http://host/webAppPrefix/UrlTest2/</font>
				</a>
				<font face="Courier New"> 开头的URL相关联。TestPage.jsp的源代码已经JSP页面命名的谈论在前面的3节"分配名称和定制的URL"中给出。事实上，程序清单5-12中的servlet和servlet-name项从该节原封不动地拿过来的。给定这些web.xml项，可看到下面的标准输出形式的调试报告（换行是为了容易阅读）。<br />audit.irs.gov tried to access <br /></font>
				<a href="http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html">
						<font face="Courier New">http://mycompany.com/deployDemo/UrlTest2/business/tax-plan.html</font>
				</a>
				<br />
				<font face="Courier New">on Tue Dec 25 13:12:29 EDT 2001.</font>
		</p>
		<p>
				<font face="Courier New">程序清单5-12 Web.xml（说明filter用法的摘录）<br />&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;<br />&lt;!DOCTYPE web-app<br />PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />"</font>
				<a href="http://java.sun.com/dtd/web-app_2_3.dtd">
						<font face="Courier New">http://java.sun.com/dtd/web-app_2_3.dtd</font>
				</a>
				<font face="Courier New">"&gt;</font>
		</p>
		<p>
				<font face="Courier New">&lt;web-app&gt;<br />&lt;filter&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;filter-class&gt;moresevlets.ReportFilter&lt;/filter-class&gt;<br />&lt;/filter&gt;<br />&lt;!-- ... --&gt;<br />&lt;filter-mapping&gt;<br />&lt;filter-name&gt;Reporter&lt;/filter-name&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;/filter-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet&gt;<br />&lt;servlet-name&gt;PageName&lt;/servlet-name&gt;<br />&lt;jsp-file&gt;/RealPage.jsp&lt;/jsp-file&gt;<br />&lt;/servlet&gt;<br />&lt;!-- ... --&gt;<br />&lt;servlet-mapping&gt;<br />&lt;servlet-name&gt; PageName &lt;/servlet-name&gt;<br />&lt;url-pattern&gt;/UrlTest2/*&lt;/url-pattern&gt;<br />&lt;/servlet-mapping&gt;<br />&lt;!-- ... --&gt;<br />&lt;/web-app&gt;</font>
		</p>
<img src ="http://www.blogjava.net/hua/aggbug/59179.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hua/" target="_blank">花</a> 2006-07-20 14:17 <a href="http://www.blogjava.net/hua/archive/2006/07/20/59179.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML 教程 - XML精华学习入门  </title><link>http://www.blogjava.net/hua/archive/2006/05/15/46260.html</link><dc:creator>花</dc:creator><author>花</author><pubDate>Mon, 15 May 2006 10:07:00 GMT</pubDate><guid>http://www.blogjava.net/hua/archive/2006/05/15/46260.html</guid><wfw:comment>http://www.blogjava.net/hua/comments/46260.html</wfw:comment><comments>http://www.blogjava.net/hua/archive/2006/05/15/46260.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hua/comments/commentRss/46260.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hua/services/trackbacks/46260.html</trackback:ping><description><![CDATA[
		<font face="Courier New">1、前言<br />本贴绝大部分资源均转自www.xml.org.cn<br />声明先，免得有人说偶盗链<br />2、黄金装备<br />XML Explorer简体中文正式版（免费）XML.ORG.CN下载<br />（推荐这个，简单易用，比冰火双剑还要牛X）<br />介绍<br />XML Explorer是一个XML和schema编辑器。它简单易用，可以展现多个窗口。可从树状图、列表、表格、文字模式和跳出式编辑区等方式操作任何XML资料。<br />* 它的copy and paste功能可以让使用者复制任何XML 文字到系统剪贴簿上，然后贴到任何XML Explorer窗口。<br />* 它支持双向xpath，所以只要点任何XML节点或属性，一个标准的Xpath就出来了。<br />* 它两栏的文字展现方式方便比较和编辑。<br />* 它的schema完全支持树状图、列表、集合观看模式、文字模式。<br />* 有了它，你还能轻易把微软Excel、Access和任何ODBC资料转成XML格式。<br />* 新版本在表格模式包含了XML资料分析功能。<br />Special Thanks: 感谢David Ren(mergesoft.com)免费为本站提供正式版本和注册码。<br />注意：该版本和注册码只限于在中国大陆地区使用。<br />注册码：1096DFDE-1962-43A0-0000-005DXBDIPKSD<br />英文版：http://download.xml.org.cn/XMLExplorer.msi<br />中文版：http://download.xml.org.cn/XMLExplorerCN.msi<br />中文版补丁：http://download.xml.org.cn/xmlexplorer268cn.rar<br />其他工具下载：<br />bbs.xml.org.cn/dispbbs.asp?boardID=35andamp;ID=6191<br />其他资源下载：<br />bbs.xml.org.cn/resource.asp<br />以下将采用作者“小鞋子”的入门教程，某些部分略有修改<br />3、定义标记<br />＜?xml version=\"1.0\"?&gt;<br />＜book&gt;<br />＜title&gt;XML＜/title&gt;<br />＜author&gt;lisongtao＜/author&gt;<br />＜/book&gt;<br />如果文档中包含中文，就要加入编码<br />＜?xml version=\"1.0\" encoding=\"GB2312\"?&gt;<br />关于编码，参见“无废话XML”的相关魔鬼教程。。。<br />4、使用CSS样式<br />＜?xml version=\"1.0\"?&gt;<br />＜?xml-stylesheet type=\"text/css\" href=\"1.css\"?&gt;<br />＜lisongtao&gt;<br />Hello the world!<br />＜/lisongtao&gt;<br />---------------------------------------------<br />1.CSS<br />----------------------------------------<br />lisongtao {display: block; font-size: 48pt; font-weight: bold;}<br />5、用XSL定义<br />什么叫“XSL”，你可以暂且看作一个类似CSS，但比CSS更强的东西。XML语法参见其它教程，不废话这里。<br />1.XML<br />--------------------------------------------<br />＜?xml version=\"1.0\"?&gt;<br />＜?xml-stylesheet type=\"text/xsl\" href=\"2.xsl\"?&gt;<br />＜lisongtao&gt;<br />Hello the world!<br />＜/lisongtao&gt;<br />---------------------------------------------<br />2.xsl<br />----------------------------------------<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜xsl:stylesheet xmlns:xsl=\"http://www.w3.org/TR/WD-xsl\"&gt;<br />＜xsl:template match=\"/\"&gt;<br />＜html&gt;<br />＜head&gt;<br />＜title&gt;hello the world＜/title&gt;<br />＜/head&gt;<br />＜body bgcolor=\"#CCCCFF\"&gt;<br />＜h1 align=\"center\"&gt;＜xsl:value-of select=\"lisongtao\"/&gt;＜/h1&gt;<br />＜/body&gt;<br />＜/html&gt;<br />＜/xsl:template&gt;<br />＜/xsl:stylesheet&gt;<br />6、注释<br />没什么好多讲的，和JS一样<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜!--<br />这是一些有关书的信息<br />--&gt;<br />＜books&gt;<br />＜book&gt;<br />＜name&gt;xml应用＜/name&gt;<br />＜author&gt;list1＜/author&gt;<br />＜price&gt;55.00＜/price&gt;<br />＜/book&gt;<br />＜/books&gt;<br />7、节点的属性<br />＜?xml version=\"1.0\"?&gt;<br />＜books title=\"list\"&gt;<br />＜book&gt;<br />＜name&gt;xml and asp＜/name&gt;<br />＜price&gt;45.00＜/price&gt;<br />＜publisher&gt;tsinghua ＜/publisher&gt;<br />＜/book&gt;<br />＜/books&gt;<br />8、特殊标记<br />XML中，＜ &gt; \" \' andamp;特殊标记时，应当用＜ &gt; \"l ' andamp;表示<br />＜?xml version=\"1.0\"?&gt;<br />＜books height=\"6'5'\"&gt;<br />＜book width=\"6\"5\"\"&gt;<br />＜name&gt;list andamp;lisongtao＜/name&gt;<br />＜author&gt;lisongtao ＜ list@263.net&gt;＜/author&gt;<br />＜/book&gt;<br />＜/books&gt;<br />9、中文标记<br />汗。。。。又一个XLTXLM性的自恋狂。。<br />虽然XML支持中文标签，但不建议使用。<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜好人 &gt;<br />＜name&gt;小鞋子＜/name&gt;<br />＜/好人&gt;<br />10、DTD数据格式<br />你可以暂且把DTD看作一种规则，它保证xml按照这些规则来定义数据格式。<br />1.DTD<br />=====================<br />＜?xml version=\"1.0\"?&gt;<br />＜!ELEMENT book (price,name)&gt;<br />＜!ELEMENT name (#PCDATA)&gt;<br />＜!ELEMENT price (#PCDATA)&gt;<br />查资料：如果同一节点含有多个字节点，应该如何定义了？<br />=====================<br />DTD.XML<br />==================<br />＜?xml version=\"1.0\"?&gt;<br />＜!DOCTYPE book SYSTEM \"1.dtd\"&gt;<br />＜book&gt;<br />＜name&gt;lisongtao＜/name&gt;<br />＜price&gt;11.2＜/price&gt;<br />＜/book&gt;<br />11、DTD直接写在XML里面<br />＜?xml version=\"1.0\"?&gt;<br />＜!DOCTYPE book [<br />＜!ELEMENT book (price,name)&gt;<br />＜!ELEMENT name (#PCDATA)&gt;<br />＜!ELEMENT price (#PCDATA)&gt;<br />]&gt;<br />＜book&gt;<br />＜price&gt;11.2＜/price&gt;<br />＜name&gt;lisongtao＜/name&gt;<br />＜/book&gt;<br />12、节点的多属性<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜books&gt;<br />＜book name=\" xml应用\" author=\"list1\" price=\"55.00\"&gt;<br />＜/book&gt;<br />＜/books&gt;<br />13、结束标记另一种方法<br />不推荐。。。<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜books&gt;<br />＜book name=\" xml应用\" author=\"list1\" price=\"55.00\"[color]/[/color]&gt;<br />＜/books&gt;<br />14、直接显示包含特殊字符<br />前面我们看到了，＜ &gt; \" \' andamp;等特殊字符须手动修改后才能显示，如果大量了？。。。就用CDATA<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜books&gt;<br />＜![CDATA[<br />＜book&gt;<br />＜name&gt;xml应用＜/name&gt;<br />＜author&gt;list1＜/author&gt;<br />＜price&gt;55.00＜/price&gt;<br />＜/book&gt;<br />]&gt;<br />＜book&gt;<br />＜name&gt;xml应用＜/name&gt;<br />＜author&gt;list1＜/author&gt;<br />＜price&gt;55.00＜/price&gt;<br />＜/book&gt;<br />＜/books&gt;<br />15、小结，一个完整的XML<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜!--这是一个学生选课系统的所有数据--&gt;<br />＜choose_system&gt;<br />＜students&gt;<br />＜student id=\"984610\" lesson_id=\"11\"&gt;<br />＜name&gt;咚咚＜/name&gt;<br />＜age&gt;２５＜/age&gt;<br />＜sex&gt;男＜/sex&gt;<br />＜department&gt;自动化＜/department&gt;<br />＜/student&gt;<br />＜student id=\"984611\" lesson_id=\"12\"&gt;<br />＜name&gt;矿哥＜/name&gt;<br />＜age&gt;２６＜/age&gt;<br />＜sex&gt;男＜/sex&gt;<br />＜department&gt;自动化＜/department&gt;<br />＜/student&gt;<br />＜student id=\"984612\" lesson_id=\"11\"&gt;<br />＜name&gt;欢迎新村民＜/name&gt;<br />＜age&gt;２３＜/age&gt;<br />＜sex&gt;男＜/sex&gt;<br />＜department&gt;自动化＜/department&gt;<br />＜/student&gt;<br />＜student id=\"984613\" lesson_id=\"12\"&gt;<br />＜name&gt;张明＜/name&gt;<br />＜age&gt;２５＜/age&gt;<br />＜sex&gt;男＜/sex&gt;<br />＜department&gt;自动化＜/department&gt;<br />＜/student&gt;<br />＜/students&gt;<br />＜lessons&gt;<br />＜lesson id=\"11\"&gt;<br />＜name&gt;控制原理＜/name&gt;<br />＜num&gt;12＜/num&gt;<br />＜les_start&gt;99.2＜/les_start&gt;<br />＜les_end&gt;99.7＜/les_end&gt;<br />＜end_method&gt;考试＜/end_method&gt;<br />＜/lesson&gt;<br />＜lesson id=\"12\"&gt;<br />＜name&gt;网络原理＜/name&gt;<br />＜num&gt;11＜/num&gt;<br />＜les_start&gt;99.3＜/les_start&gt;<br />＜les_end&gt;99.6＜/les_end&gt;<br />＜end_method&gt;通过＜/end_method&gt;<br />＜/lesson&gt;<br />＜/lessons&gt;<br />＜teachers&gt;<br />　　　＜teacher id=\"1122\" lesson_id=\"11\"&gt;<br />＜name&gt;开心啊＜/name&gt;<br />＜age&gt;33＜/age&gt;<br />＜tea_age&gt;3＜/tea_age&gt;<br />＜rank&gt;教授＜/rank&gt;<br />＜publish&gt;控制原理＜/publish&gt;<br />＜sex&gt;男＜/sex&gt;<br />＜/teacher&gt;<br />　　　＜teacher id=\"1123\" lesson_id=\"12\"&gt;<br />＜name&gt;还是开心啊＜/name&gt;<br />＜age&gt;40＜/age&gt;<br />＜tea_age&gt;7＜/tea_age&gt;<br />＜rank&gt;副教授＜/rank&gt;<br />＜publish&gt;网络原理＜/publish&gt;<br />＜sex&gt;男＜/sex&gt;<br />＜/teacher&gt;<br />＜/teachers&gt;<br />＜/choose_system&gt;<br />16、CSS样式定义节点<br />＜?xml version=\"1.0\"?&gt;<br />＜?xml-stylesheet type=\"text/css\" href=\"1.css\"?&gt;<br />＜books&gt;<br />＜book&gt;<br />＜author&gt;lisongtao＜/author&gt;<br />＜name&gt;the application of ASP＜/name&gt;<br />＜/book&gt;<br />＜/books&gt;<br />---------------------------------------------------------<br />1.css<br />-----------------------------------------------------------<br />books<br />{<br />display:block;<br />}<br />book<br />{<br />display:block;<br />background-color:#aabbcc<br />}<br />---------------------------------------------<br />心得：以上的定义方法和重定义HTML的标签样式一样，如对CSS不熟者，推荐用DW生成后再对应一下效果。很易就可以学会的。<br />17、样式类定义XML<br />＜?xml version=\"1.0\" standalone=\"yes\"?&gt;<br />＜?xml-stylesheet type=\"text/css\" href=\"3.css\"?&gt;<br />＜list class=\"listclass\"&gt;<br />＜sublist class=\"listsmall\"&gt;lisongtao＜/sublist&gt;<br />＜sublist&gt;zhongguo＜/sublist&gt;<br />＜/list&gt;<br />----------------------------------------------------------<br />3.css<br />.listclass {color: red; font-size:26pt}<br />.listsmall {color:blue; font-size:15pt}<br />18、类的ID定义XML<br />＜?xml version=\"1.0\" standalone=\"yes\"?&gt;<br />＜?xml-stylesheet type=\"text/css\" href=\"ID.css\"?&gt;<br />＜school&gt;<br />＜class id=\"list\"&gt;lisongtao＜/class&gt;<br />＜monitor id=\"list1\"&gt;lisongtao＜/monitor&gt;<br />＜/school&gt;<br />---------------------------------<br />ID.CSS<br />--------------------------------------------------<br />#list {font-size:28pt; color:red; display: block}<br />#list1 {font-size:14pt; color:blue display: block }<br />19、XML中直接使用CSS<br />＜?xml version=\"1.0\" standalone=\"yes\"?&gt;<br />＜?xml-stylesheet type=\"text/css\" href=\"sevil.txt\"?&gt;<br />＜!--这句一定要有,而SEVIL.TXT可以换别的名字,不过中文好像这里不行.--&gt;<br />＜FOO STYLE=\"font-weight: bold;color:red\"&gt;<br />Hello XML!<br />＜/FOO&gt;<br />20、在一个样式表中合并引用另一个样式表的方法<br />@import url(\"sevil.css\");<br />21、用CSS定制个节点的块状显示<br />XML.XML<br />--------------------------------------------------------------------------------<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜?xml-stylesheet type=\"text/css\" href=\"CSS.css\"?&gt;<br />＜books xmlns:HTML=\"http://www.w3.org/Profiles/XHTML-transitional\"&gt;<br />＜HTML:style&gt;<br />books<br />{<br />display:block;<br />width:30em;<br />}<br />＜/HTML:style&gt;<br />＜book&gt;<br />＜author&gt;list ＜/author&gt;<br />＜name&gt; ASP及其应用＜/name&gt;<br />＜publisher&gt;Tsinghua University＜/publisher&gt;<br />＜price&gt;12.30＜/price&gt;<br />＜/book&gt;<br />＜book&gt;<br />＜author&gt;James ＜/author&gt;<br />＜name&gt; XML及其应用＜/name&gt;<br />＜publisher&gt;Tsinghua University＜/publisher&gt;<br />＜price&gt;15.30＜/price&gt;<br />＜/book&gt;<br />＜book&gt;<br />＜author&gt;John ＜/author&gt;<br />＜name&gt; CSS及其应用＜/name&gt;<br />＜publisher&gt;Peiking University＜/publisher&gt;<br />＜price&gt;16.30＜/price&gt;<br />＜/book&gt;<br />＜/books&gt;<br />---------------------------------------------------------------<br />CSS.CSS<br />---------------------------------------------------------------<br />book<br />{<br />display:block;<br />background-color:#AABBCC;<br />padding:1.2em;<br />margin-bottom:1em;<br />}<br />author<br />{<br />display:block;<br />font-size:16pt;<br />color:red;<br />}<br />22、在同一个XML文件内引用多个CSS样式表的方法<br />＜?xml version=\"1.0\" standalone=\"yes\"?&gt;<br />＜?xml-stylesheet type=\"text/css\" href=\"1.css\"?&gt;<br />＜?xml-stylesheet type=\"text/css\" href=\"2.css\"?&gt;<br />23、在XML中使用HTML标记的方法,例插入图片<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜?xml-stylesheet type=\"text/css\"?&gt;<br />＜books xmlns:HTML=\"http://www.w3.org/Profiles/XHTML-transitional\"&gt;<br />＜book&gt;<br />＜author&gt;list ＜/author&gt;<br />＜name&gt; ASP及其应用＜/name&gt;<br />＜publisher&gt;Tsinghua University＜/publisher&gt;<br />＜price&gt;12.30＜/price&gt;<br />＜HTML:img src=\"suzh1.jpg\" /&gt;<br />＜/book&gt;<br />＜/books&gt;<br />24、在XML中使用HTML标记的方法(2),使用超连接<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜?xml-stylesheet type=\"text/css\"?&gt;<br />＜books xmlns:HTML=\"http://www.w3.org/Profiles/XHTML-transitional\"&gt;<br />＜book&gt;<br />＜author&gt;list ＜/author&gt;<br />＜name&gt; ASP及其应用＜/name&gt;<br />＜publisher&gt;Tsinghua University＜/publisher&gt;<br />＜price&gt;12.30＜/price&gt;<br />[colorred]＜from&gt;＜HTML:a href=\"http://www.263.net\"&gt;263中国在线＜/HTML:a&gt;＜/from&gt;[/color]<br />＜/book&gt;<br />＜/books&gt;<br />25、在XML中使用HTML标记(3),使用＜BR&gt;＜p&gt;等标记<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜?xml-stylesheet type=\"text/css\"?&gt;<br />＜books xmlns:HTML=\"http://www.w3.org/Profiles/XHTML-transitional\"&gt;<br />＜book&gt;<br />＜HTML:P&gt;<br />＜author&gt;list ＜/author&gt;<br />＜/HTML:P&gt;<br />＜name&gt; ASP及其应用＜/name&gt;<br />＜publisher&gt;Tsinghua University＜/publisher&gt;<br />＜HTML:br/&gt;<br />＜price&gt;12.30＜/price&gt;<br />＜/book&gt;<br />＜/books&gt;<br />26、在XML中使用HTML标记的方法(4),使用表格标签<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜?xml-stylesheet type=\"text/css\"?&gt;<br />＜books xmlns:HTML=\"http://www.w3.org/Profiles/XHTML-transitional\"&gt;<br />＜book&gt;<br />＜HTML:TABLE border=\"1.0\" align=\"center\"&gt;<br />＜HTML:TR&gt;<br />＜HTML:TD&gt;LIST＜/HTML:TD&gt;<br />＜HTML:TD&gt;ASP PROGRAMING＜/HTML:TD&gt;<br />＜HTML:TD&gt;TSINGHUA UNIVERSITY＜/HTML:TD&gt;<br />＜/HTML:TR&gt;<br />＜/HTML:TABLE&gt;<br />＜/book&gt;<br />＜/books&gt;<br />27、在XML中使用HTML标记的方法(5),使用表单<br />汗。。。。这样子就没意思了，仅供参考<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜?xml-stylesheet type=\"text/css\"?&gt;<br />＜books xmlns:HTML=\"http://www.w3.org/Profiles/XHTML-transitional\"&gt;<br />＜book&gt;<br />＜HTML:TABLE border=\"0\" align=\"center\"&gt;<br />＜HTML:TR&gt;<br />＜HTML:TD&gt;NAME＜/HTML:TD&gt;<br />＜HTML:TD&gt;＜HTML:INPUT TYPE=\"TEXT\"/&gt;＜/HTML:TD&gt;<br />＜/HTML:TR&gt;<br />＜HTML:TR&gt;<br />＜HTML:TD&gt;NAME＜/HTML:TD&gt;<br />＜HTML:TD&gt;＜HTML:INPUT TYPE=\"TEXT\"/&gt;＜/HTML:TD&gt;<br />＜/HTML:TR&gt;<br />＜HTML:TR&gt;<br />＜HTML:TD&gt;NAME＜/HTML:TD&gt;<br />＜HTML:TD&gt;＜HTML:INPUT TYPE=\"TEXT\"/&gt;＜/HTML:TD&gt;<br />＜/HTML:TR&gt;<br />＜/HTML:TABLE&gt;<br />＜HTML:CENTER&gt;<br />＜HTML:INPUT TYPE=\"SUBMIT\"/&gt;＜HTML:INPUT TYPE=\"RESET\"/&gt;<br />＜/HTML:CENTER&gt;<br />＜/book&gt;<br />＜/books&gt;<br />28、在XML中使用HTML标记的方法(6),使用JS脚本<br />＜?xml version=\"1.0\" encoding=\"gb2312\"?&gt;<br />＜?xml-stylesheet type=\"text/css\"?&gt;<br />＜books xmlns:HTML=\"http://www.w3.org/Profiles/XHTML-transitional\"&gt;<br />＜HTML:SCRIPT language=\"javascript\"&gt;<br />var fRunning = 0<br />function startTrans()<br />{<br />if (fRunning == 0)<br />{<br />fRunning = 1<br />SampleID.filters.revealTrans.Apply();<br />SampleID.src = \"suzh1.jpg\";<br />SampleID.filters.revealTrans.Play()<br />}<br />else<br />{<br />fRunning = 0<br />SampleID.filters.revealTrans.Apply();<br />SampleID.src = \"suzh2.jpg\";<br />SampleID.filters.revealTrans.Play()<br />}<br /><br />}<br />＜/HTML:SCRIPT&gt;<br />＜HTML:IMG id=\"SampleID\" src=\"suzh2.jpg\" width=\"200\" <br /></font>
<img src ="http://www.blogjava.net/hua/aggbug/46260.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hua/" target="_blank">花</a> 2006-05-15 18:07 <a href="http://www.blogjava.net/hua/archive/2006/05/15/46260.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>技巧：引用 XML 模式</title><link>http://www.blogjava.net/hua/archive/2006/05/15/46208.html</link><dc:creator>花</dc:creator><author>花</author><pubDate>Mon, 15 May 2006 06:19:00 GMT</pubDate><guid>http://www.blogjava.net/hua/archive/2006/05/15/46208.html</guid><wfw:comment>http://www.blogjava.net/hua/comments/46208.html</wfw:comment><comments>http://www.blogjava.net/hua/archive/2006/05/15/46208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hua/comments/commentRss/46208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hua/services/trackbacks/46208.html</trackback:ping><description><![CDATA[
		<blockquote>
				<font face="Courier New">请开始使用 XML 模式来约束 XML 文档。这篇简短的技巧说明会告诉您如何从 XML 文档中引用 XML 模式。五段样本代码将显示如何实现。</font>
		</blockquote>
		<!--START RESERVED FOR FUTURE USE INCLUDE FILES-->
		<!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters -->
		<!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
		<p>
				<font face="Courier New">随着 W3C 最近确定了 XML 模式规范，您可能应开始使用模式了。与使用 DTD（文档类型定义）定义约束相比，模式可以给您更好的灵活性和确定性。本技巧说明演示了使用模式的一个重要部分：如何在文档中引用它们。即使其他人正在编写模式，您可能需要知道如何在 XML 文档中引用它们。</font>
		</p>
		<p>
				<a name="N10048">
						<span class="atitle">
								<strong>
										<font face="Courier New">早期的 DTD</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<font face="Courier New">首先，让我简要地比较一下以供参考。在 XML 模式之前，每个人都使用 DTD 来进行约束，而且很多人现在仍这么做。要使用 DTD 进行约束，应在 XML 文档中使用 <code>DOCTYPE</code> 声明来引用 DTD，如“清单 1”所示： </font>
		</p>
		<br />
		<a name="code1">
				<b>
						<font face="Courier New">清单 1. 引用 DTD</font>
				</b>
		</a>
		<br />
		<font face="Courier New">&lt;?xml version="1.0"?&gt;<br />&lt;DOCTYPE hockeyTeam SYSTEM "dtd/hockeyTeam.dtd"&gt;<br /><br />&lt;hockeyTeam&gt;<br /> &lt;team name="Dallas Stars"&gt;<br />  &lt;!-- More XML Content --&gt;<br /> &lt;/team&gt;<br />&lt;/hockeyTeam&gt;<br /></font>
		<p>
				<font face="Courier New">在“清单 1”的文档中，所引用的 DTD 名叫 <code>hockeyTeam.xml</code> ，它在目录 <code>dtd</code> 中。可以在 XML 文档的 <code>DOCTYPE</code> 标记中指定约束，以代替在独立的 DTD 文档中指定约束。对于这个示例，我使用了一个拥有 XML 约束的独立 DTD 文档，因为这是一个更好的设计，而且因为它与需要使用 XML 模式的方法类似。 <br /></font>
		</p>
		<p>
				<a name="N1006F">
						<span class="atitle">
								<strong>
										<font face="Courier New">名称……空间中有什么？</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<font face="Courier New">除了理解 XML 的基础，您还需要掌握 XML 名称空间规范的一些知识（请参阅 </font>
				<a href="http://www-128.ibm.com/developerworks/cn/xml/tips/x-tipsch/index.html#resources">
						<font face="Courier New" color="#996699">参考资料</font>
				</a>
				<font face="Courier New">）。该规范的优点超出了本篇技巧说明的范围，但您需要知道的是名称空间基本上是将一个前缀（如 <code>nhl</code> ）绑定到某个特定 URI（如 http://www.nhl.com）。可以将前缀添加到元素名称的开头（例如， <code>nhl:hockeyTeam</code> ），以便将该元素放到相关 URL 标识的名称空间中。如果指定了 URL，但是 <i>没有</i>指定前缀，那么该名称空间会成为 <i>缺省名称空间</i>；没有前缀的元素将落入缺省名称空间。“将缺省名称空间看作是带有空的前缀的名称空间”可能会对理解它有所帮助。名称空间声明的使用及其前缀让您可以在一个模式使用多个名称空间中的元素定义。 </font>
		</p>
		<p>
				<font face="Courier New">一个 XML 模式可以对一个名称空间设置约束。因此，如果在一个 XML 文档中有 4 个名称空间，而且您要约束所有名称空间中的所有元素，通常需要 4 个 XML 模式。对于每个名称空间，都需要指定约束该名称空间的模式。再次声明，名称空间在内容和功能之间提供了一种很好的分离方法。<br /></font>
		</p>
		<p>
				<a name="N1008D">
						<span class="atitle">
								<strong>
										<font face="Courier New">切入正题</font>
								</strong>
						</span>
				</a>
		</p>
		<p>
				<font face="Courier New">好，基础知识已经介绍得足够多了；现在切入正题。</font>
		</p>
		<p>
				<font face="Courier New">首先需要在文档中声明“XML 模式实例”名称空间，以授予您对引用 XML 模式时需要的属性的访问权。当然，要添加前缀映射（ <code>xsi</code> ）和相关 URI，如“清单 2”中所示。我还添加了一个缺省名称空间 http://www.nhl.com，以便为文档中的所有无前缀元素提供驻留地（在本示例中，所有元素都是无前缀元素）。 </font>
		</p>
		<p>
				<br />
				<a name="code2">
						<b>
								<font face="Courier New">清单 2. 定义“XML 模式实例”名称空间</font>
						</b>
				</a>
				<br />
				<font face="Courier New">&lt;?xml version="1.0"?&gt;<br /><br />&lt;hockeyTeam xmlns="http://www.nhl.com"<br />            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&gt;<br /> &lt;team name="Dallas Stars"&gt;<br />  &lt;!-- More XML Content --&gt;<br /> &lt;/team&gt;<br />&lt;/hockeyTeam&gt;<br /></font>
		</p>
		<p>
				<font face="Courier New">一旦“XML 模式实例”名称空间可用，就可以使用其内部的 <code>schemaLocation</code> 属性了。该属性的值其实是 <i>两个</i>值。第一值，或自变量，是要约束的名称空间。在本示例中，这个值是 <code>http://www.nhl.com</code> ，即缺省名称空间。第二个值，或自变量，是用于名称空间约束的 XML 模式的位置。要查看这个值，请参考“清单 3”： </font>
		</p>
		<p>
				<br />
				<a name="code3">
						<b>
								<font face="Courier New">清单 3. 引用 XML 模式</font>
						</b>
				</a>
				<br />
				<font face="Courier New">&lt;?xml version="1.0"?&gt;<br /><br />&lt;hockeyTeam xmlns="http://www.nhl.com"<br />            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />            xsi:schemaLocation="http://www.nhl.com schemas/hockeyTeam.xsd"&gt;<br /> &lt;team name="Dallas Stars"&gt;<br />  &lt;!-- More XML Content --&gt;<br /> &lt;/team&gt;<br />&lt;/hockeyTeam&gt;<br /></font>
		</p>
		<p>
				<font face="Courier New">请注意名称空间 URI 和模式之间的空格。 <i>插入该空格需小心</i>；省去这个空格会给您带来各种麻烦！此外，请注意，模式位置可以就是一个 URI，如“清单 4”所示： </font>
		</p>
		<p>
				<br />
				<a name="code4">
						<b>
								<font face="Courier New">清单 4. 使用 URI 作为模式位置</font>
						</b>
				</a>
				<br />
				<font face="Courier New">&lt;?xml version="1.0"?&gt;<br /><br />&lt;hockeyTeam xmlns="http://www.nhl.com"<br />            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />            xsi:schemaLocation="http://www.nhl.com <br />                                http://www.nhl.com/hockeyTeam.xsd"&gt;<br /> &lt;team name="Dallas Stars"&gt;<br />  &lt;!-- More XML Content --&gt;<br /> &lt;/team&gt;<br />&lt;/hockeyTeam&gt;<br /></font>
		</p>
		<p>
				<font face="Courier New">好了。添加新的名称空间和模式很简单，只涉及到将 <i>第二</i>（或第三或第四）对值添加到 <code>schemaLocation</code> 属性。清单 5 将一个新的名称空间添加到 XML 文档中，并且添加了另一个与其相关的模式。 </font>
		</p>
		<p>
				<br />
				<a name="code5">
						<b>
								<font face="Courier New">清单 5. 引用多个模式</font>
						</b>
				</a>
				<br />
				<font face="Courier New">&lt;?xml version="1.0"?&gt;<br /><br />&lt;hockeyTeam xmlns="http://www.nhl.com"<br />            xmlns:stars="http://www.dallasstars.com"<br />            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"<br />            xsi:schemaLocation="http://www.nhl.com <br />http://www.nhl.com/hockeyTeam.xsd<br />http://www.dallasstars.com http://www.dallasstars.com/stars.xsd""&gt;<br /> &lt;team name="Dallas Stars" stars:logo="http://www.dallasstars.com/logo.jpg"&gt;<br />  &lt;!-- More XML Content --&gt;<br /> &lt;/team&gt;<br />&lt;/hockeyTeam&gt;<br />如果您正在使用模式或者打算使用它们，那么您一定要掌握 XML 模式规范（从第 0 部分开始），因为在引用模式、使用模式（无论带不带名称空间）和设计文档约束时有许多选项。无论您使用这些特性的哪种组合，请明智地约束 XML，玩得开心点！<br /></font>
		</p>
		<p>
				<a name="resources">
						<span class="atitle">
								<strong>
										<font face="Courier New">参考资料 </font>
								</strong>
						</span>
				</a>
		</p>
		<ul>
				<li>
						<font face="Courier New">您可以参阅本文在 developerWorks 全球站点上的 </font>
						<a href="http://www.ibm.com/developerworks/library/x-tipsch.html">
								<font face="Courier New" color="#5c81a7">英文原文</font>
						</a>
						<font face="Courier New">. <br /><br /></font>
				</li>
				<li>
						<font face="Courier New">请在 </font>
						<a href="http://www.ibm.com/developerworks/xml/library/xml-schema/index.html">
								<font face="Courier New" color="#5c81a7">The Basics of using XML Schema to define elements</font>
						</a>
						<font face="Courier New">中快速学习如何使用 XML 模式。 <br /><br /></font>
				</li>
				<li>
						<font face="Courier New">请在 W3C 站点上完整地复习 XML 模式： </font>
						<ul>
								<li>
										<a href="http://www.w3.org/TR/xmlschema-0/">
												<font face="Courier New" color="#5c81a7">XML Schema Part 0: Primer</font>
										</a>
										<font face="Courier New">，一个好去处，包含了如何应用 XML 的详细概述和一些说明 </font>
								</li>
								<li>
										<a href="http://www.w3.org/TR/xmlschema-1/">
												<font face="Courier New" color="#5c81a7">XML Schema Part 1: Structures</font>
										</a>
										<font face="Courier New">
										</font>
								</li>
								<li>
										<a href="http://www.w3.org/TR/xmlschema-2/">
												<font face="Courier New" color="#5c81a7">XML Schema Part 2: Datatypes</font>
										</a>
										<font face="Courier New">
										</font>
								</li>
						</ul>
						<br />
				</li>
				<li>
						<font face="Courier New">请研究 </font>
						<a href="http://www.w3.org/TR/REC-xml-names/">
								<font face="Courier New" color="#5c81a7">XML Namespaces specification</font>
						</a>
						<font face="Courier New">。 <br /><br /></font>
				</li>
				<li>
						<font face="Courier New">请阅读两个开发者对 XML 模式的观点：David Mertz 在 </font>
						<a href="http://www-128.ibm.com/developerworks/cn/xml/x-matters/part7/index.html">
								<font face="Courier New" color="#5c81a7">XML 问题专栏</font>
						</a>
						<font face="Courier New">中比较了 DTD 和 XML 模式，并推荐了一些更适合使用 DTD 的情况。在 XML 专区 </font>
						<a href="http://www.ibm.com/developerworks/xml/library/x-sbsch.html">
								<font face="Courier New" color="#5c81a7">Soapbox opinion piece</font>
						</a>
						<font face="Courier New">中，信息管理开发者兼作家 Kevin Williams 讲述了对于使用 XML 的数据库开发者来说，XML 模式为什么是一种极为方便的方式。 <br /><br /></font>
				</li>
				<li>
						<font face="Courier New">dW XML 专区专栏作家 Kevin Williams 刊登了两篇讨论 XML 模式问题的专栏文章，这两篇文章以建立原型为目的，以便处理结构化数据： </font>
						<a href="http://www.ibm.com/developerworks/xml/library/x-xdarch.html">
								<font face="Courier New" color="#5c81a7">Using XML Schema archetypes</font>
						</a>
						<font face="Courier New">描述了概念， </font>
						<a href="http://www.ibm.com/developerworks/xml/library/x-xdxlnk/index.html">
								<font face="Courier New" color="#5c81a7">XLink and data</font>
						</a>
						<font face="Courier New">演示了实际应用程序。 <br /><br /></font>
				</li>
				<li>
						<font face="Courier New">请了解 </font>
						<a href="http://www.ibm.com/software/webservers/appserv/">
								<font face="Courier New" color="#5c81a7">IBM WebSphere Application Server</font>
						</a>
						<font face="Courier New">及其对 XML 模式支持的更多信息。 <br /><br /></font>
				</li>
				<li>
						<font face="Courier New">如果您不能理解这些内容，请在 developerWorks </font>
						<a href="http://www.ibm.com/developerworks/education.nsf/xml-onlinecourse-bytitle/8C8A8628B3DD7EDB852567BD000A8A64?OpenDocument">
								<font face="Courier New" color="#5c81a7">Intro to XML tutorial</font>
						</a>
						<font face="Courier New">中专心学习 XML 基础知识。 </font>
				</li>
		</ul>
<img src ="http://www.blogjava.net/hua/aggbug/46208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hua/" target="_blank">花</a> 2006-05-15 14:19 <a href="http://www.blogjava.net/hua/archive/2006/05/15/46208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何在HTML中引用XML数据</title><link>http://www.blogjava.net/hua/archive/2006/05/15/46207.html</link><dc:creator>花</dc:creator><author>花</author><pubDate>Mon, 15 May 2006 06:15:00 GMT</pubDate><guid>http://www.blogjava.net/hua/archive/2006/05/15/46207.html</guid><wfw:comment>http://www.blogjava.net/hua/comments/46207.html</wfw:comment><comments>http://www.blogjava.net/hua/archive/2006/05/15/46207.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hua/comments/commentRss/46207.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hua/services/trackbacks/46207.html</trackback:ping><description><![CDATA[
		<div class="code">
				<font face="Courier New">&lt;html&gt; <br />&lt;head&gt; <br />&lt;meta http-equiv="Content-Type" content="text/html;charset=gb2312"&gt; <br />&lt;title&gt;第一次亲密接触(非痞子蔡版,请不要理解为侵权)&lt;/title&gt; <br />&lt;/head&gt; <br />&lt;body&gt; <br />&lt;xml id="第一次亲密接触"&gt; <br />&lt;第一次亲密接触&gt; <br />&lt;对象&gt;xml&lt;/对象&gt; <br />&lt;亲密程度&gt;接触到XML稍微宝贵的地方---数据岛&lt;/亲密程度&gt; <br />&lt;结论&gt;感觉不错,是个好东东&lt;/结论&gt; <br />&lt;/第一次亲密接触&gt; <br />&lt;/xml&gt; <br />&lt;center&gt;&lt;h1&gt;第一次亲密接触&lt;/h1&gt;&lt;/center&gt; <br />&lt;table border="0" datasrc="#第一次亲密接触" align="center" width="443"&gt; <br />&lt;tr&gt; <br />&lt;td bgcolor="#99FF99"&gt;对象: &lt;span datafld="对象"&gt;&lt;/span&gt;&lt;/td&gt; <br />&lt;td bgcolor="#3399CC"&gt;亲密程度:&lt;span datafld="亲密程度"&gt;&lt;/span&gt;&lt;/td&gt; <br />&lt;td bgcolor="#CC99CC"&gt;结论: &lt;span datafld="结论"&gt;&lt;/span&gt;&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;/body&gt; <br />&lt;/html&gt; </font>
		</div>
		<p>
				<br />
				<font face="Courier New">e.g:</font>
		</p>
		<p>
				<font face="Courier New">
						<strong>2.外部xml文件的引用</strong>
				</font>
		</p>
		<p>
				<font face="Courier New">　　首先利用以前的知识建立一个XML文件(不是我懒,给你们一个机会锻炼^^) </font>
		</p>
		<p>
				<font face="Courier New">　　涉及到以下&lt;xml&gt;&lt;/xml&gt;中的数据内容 <br /></font>
		</p>
		<div class="code">
				<font face="Courier New">&lt;html&gt; <br />&lt;head&gt; <br />&lt;meta http-equiv="Content-Type" content="text/html;charset=gb2312"&gt;<br />&lt;title&gt;第一次亲密接触(非痞子蔡版,请不要理解为侵权)&lt;/title&gt; <br />&lt;/head&gt; <br />&lt;body&gt; <br />&lt;xml id="第一次亲密接触" src="firstlove.xml"&gt; <br />&lt;第一次亲密接触&gt; <br />&lt;对象&gt;xml&lt;/对象&gt; <br />&lt;亲密程度&gt;接触到XML稍微宝贵的地方数据岛&lt;/亲密程度&gt; <br />&lt;结论&gt;感觉不错,是个好东东&lt;/结论&gt; <br />&lt;/第一次亲密接触&gt; <br />&lt;/xml&gt; <br />&lt;center&gt;&lt;h1&gt;第一次亲密接触&lt;/h1&gt;&lt;/center&gt; <br />&lt;table border="0" datasrc="#第一次亲密接触" align="center"&gt; <br />&lt;tr&gt; <br />&lt;td bgcolor="#99FF99"&gt;对象: &lt;span datafld="对象"&gt;&lt;/span&gt;&lt;/td&gt; <br />&lt;td bgcolor="#3399CC"&gt;亲密程度:&lt;span datafld="亲密程度"&gt;&lt;/span&gt;&lt;/td&gt; <br />&lt;td bgcolor="#CC99CC"&gt;结论: &lt;span datafld="结论"&gt;&lt;/span&gt;&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;/body&gt; <br />&lt;/html&gt;</font>
		</div>
		<p>
				<font face="Courier New">　　我们可以通过指定XML文件位置来引用她,一般通过src=＂XXX.xml＂引用. </font>
		</p>
<img src ="http://www.blogjava.net/hua/aggbug/46207.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hua/" target="_blank">花</a> 2006-05-15 14:15 <a href="http://www.blogjava.net/hua/archive/2006/05/15/46207.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SMIL</title><link>http://www.blogjava.net/hua/archive/2006/05/12/45853.html</link><dc:creator>花</dc:creator><author>花</author><pubDate>Fri, 12 May 2006 07:29:00 GMT</pubDate><guid>http://www.blogjava.net/hua/archive/2006/05/12/45853.html</guid><wfw:comment>http://www.blogjava.net/hua/comments/45853.html</wfw:comment><comments>http://www.blogjava.net/hua/archive/2006/05/12/45853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hua/comments/commentRss/45853.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hua/services/trackbacks/45853.html</trackback:ping><description><![CDATA[
		<p>
				<font face="Courier New">http://chinaunix.net/jh/13/246914.html</font>
		</p>
		<p>
				<font face="Courier New">SMIL是同步多媒体集成语言（Synchronized Multimedia Integration Language）的缩写<br />它用来规定多媒体片断(这里多媒体的包括的范围有：声音文件、视频文件、动画、图片、文字等)在什么时候、在什么地方、以什么样的方式播放。<br />（1） 避免使用统一的包容文件格式 <br />（2）同时播放在不同地方（服务器上）的多媒体片断 <br />（3）时间控制 <br />（4）对整个演示进行布局 <br />（5）多语言选择支持 <br />（6）多带宽选择支持 </font>
		</p>
		<p>
				<font face="Courier New">1、 多媒体片断结构组织<br />（1）&lt; seq&gt;&lt; /seq&gt;标记：媒体片断顺序播放<br />例如:<br />&lt; smil&gt; <br />&lt; head&gt; &lt; /head&gt; <br />&lt; body&gt;<br />&lt; seq&gt;&lt; img src="image1.jpg"/&gt;&lt; img src="image2.jpg"/&gt;&lt; /seq&gt; &lt; /body&gt;<br />&lt; /smil&gt;<br />（2） <par>&lt; /par&gt;标记 ：媒体片断协同播放<br />例如：<br />&lt; smil&gt; <br />&lt; head&gt; &lt; /head&gt;<br />&lt; body&gt;<br />&lt; par&gt;&lt; img src="image1.jpg"/&gt;&lt; img src="image2.jpg"/&gt;&lt; /par&gt; &lt; /body&gt;<br />&lt; /smil&gt;<br />（3）&lt; seq&gt;&lt; /seq&gt;和&lt; par&gt;&lt; /par&gt;标记协同使用分析<br />&lt; smil&gt;<br />&lt; head&gt; &lt; /head&gt; <br />&lt; body&gt;<br />&lt; seq&gt; <br />&lt; img src="image1.jpg"/&gt; <br />&lt; par&gt; &lt; img src="image2.jpg"/&gt;&lt; img src="image3.jpg"/&gt;&lt; /par&gt;<br />&lt; img src="image4.jpg"/&gt;<br />&lt; /seq&gt; <br />&lt; /body&gt;<br />&lt; /smil&gt; </par></font>
		</p>
		<p>
				<font face="Courier New">2、 时间控制 <br />（1）dur属性 ：媒体片断持续时间<br />&lt; smil&gt; <br />&lt; head&gt; <br />&lt; /head&gt; <br />&lt; body&gt; <br />&lt; seq&gt; <br />&lt; img src="image1.jpg" dur="5s"/&gt; <br />&lt; img src="image2.jpg" dur="10s"/ &gt; <br />&lt; /seq&gt; <br />&lt; /body&gt; <br />&lt; /smil&gt; </font>
		</p>
		<p>
				<font face="Courier New">（2）begin和end属性 <br />&lt; smil&gt; <br />&lt; head&gt; <br />&lt; /head&gt; <br />&lt; body&gt; <br />&lt; img src="image1.jpg" begin="2" dur="5s"/&gt; <br />&lt; /body&gt; <br />&lt; /smil&gt;<br />（3）clip-begin和clip-end属性 <br />（4）fill （remove、freeze）<br />（5）repeat（数字或 indefinite）</font>
		</p>
		<p>
				<font face="Courier New">3.布局设置<layout></layout><br />（1）定义基本显示窗口 <root-layout width="" height="" background-color="" /><br />&lt; smil&gt; <br />&lt; head&gt; <br />&lt; layout&gt; <br />&lt; root-layout width="300" height="200" background-color="white" /&gt; <br />&lt; /layout&gt; <br />&lt; /head&gt; <br />&lt; body&gt; <br />&lt; /body&gt; <br />&lt; /smil&gt; <br />（2）定义多媒体片断显示窗口 <br />&lt; smil&gt; <br />&lt; head&gt; <br />&lt; layout&gt; <br />&lt; root-layout width="300" height="300" background-color="yellow" /&gt; <br />&lt; region id="vedio_region" left="5" top="5" width="290" height="260" /&gt; <br />&lt; region id="text_region" left="5" top="270" width="290" height="25" background-color="white"/&gt; <br />&lt; /layout&gt; <br />&lt; /head&gt; <br />&lt; body&gt; <br />&lt; par&gt; <br />&lt; vedio src="test.rm" region="vedio_region" /&gt; <br />&lt; text src="test.txt" region="text_region"/&gt; <br />&lt; /par&gt; <br />&lt; /body&gt; <br />&lt; /smil&gt; </font>
		</p>
		<p>
				<font face="Courier New">（3）fit属性 :fit属性的属性值有hidden、meet、fill、scroll和slice四个。其中hidden是默认的属性值。 <br />&lt; region id="vedio_region" width="80%" height="80%" fit="meet"/&gt; <br />（4）z-index属性 <br />z-index属性规定相互重叠的窗口的显示次序。数字大那么显示就在上面。这个很容易理解，我们就不说太多。但是以下几点要注意： <br />a、root层窗口总是在最后一层，并且不用z-index属性。 <br />b、z-index属性值可以是负数。当然它就的排在0以后。 <br />c、 没有重叠的窗口可以使用同一z-index属性值。 </font>
		</p>
		<p>
				<font face="Courier New">&lt; smil&gt; <br />&lt; head&gt; <br />&lt; layout&gt; <br />&lt; root-layout width="300" height="300" /&gt; <br />&lt; region id="vedio1_region" width="300" height="300" z-index="0"/&gt; <br />&lt; region id="vedio2_region" left="270" top="270" width="30" height="30" z-index="1" /&gt; <br />&lt; /layout&gt; <br />&lt; /head&gt; <br />&lt; body&gt; <br />&lt; par&gt; <br />&lt; vedio src="testone.rm" region="vedio1_region"/&gt; <br />&lt; vedio src="testtwo.rm" region="vedio2_region" /&gt; <br />&lt; /par&gt; <br />&lt; /body&gt; <br />&lt; /smil&gt; </font>
		</p>
		<p>
				<font face="Courier New">4、链接制作 <br />（1）&lt; a&gt;&lt; /a&gt;标记 <br />&lt; smil&gt; <br />&lt; head&gt; <br />&lt; layout&gt; <br />&lt; root-layout width="300" height="300"/&gt; <br />&lt; region id="videoregion" top="0" left="0" width="300" height="300"/&gt; <br />&lt; layout&gt; <br />&lt; /head&gt; <br />&lt; body&gt; <br />（2）&lt; anchor&gt;属性 <br />a、 分时断链接 <br />考虑这样一个问题：我们要在0~10秒链到一个文件，10~20秒链到另一个文件，该怎么办？看我们的： <br />&lt; body&gt; <br />&lt; video src="1.avi" region="videoregion"&gt; <br />&lt; anchor href="1.jpg" begin="0s" end="10s" &gt; <br />&lt; anchor href="videotest.rm" begin="10s" end="20s" /&gt; <br />&lt; /video&gt; <br />B、链接部分SMIL <br />我们的链接可以链接的文件很多，几乎所用的多媒体片断都可以。*.smil和*.html也可以。但是，下面我们要讨论的是如何链接部分SMIL。<br />第一个SMIL文件，取名test11.smil <br />&lt; smil&gt; <br />&lt; head&gt; <br />&lt; layout&gt; <br />&lt; root-layout width="400" height="300"/&gt; <br />&lt; region id="videoregion" top="0" left="0" width="400" height="300" fit="meet"/&gt; <br />&lt; /layout&gt; <br />&lt; /head&gt; <br />&lt; body&gt; <br />&lt; video src="1.avi" region="videoregion"&gt; <br />&lt; anchor href="test11app.smil#testlink"/&gt; <br />&lt; /video&gt; <br />&lt; /body&gt; <br />&lt; /smil&gt; <br />第一个SMIL文件，取名test11app.smil <br />&lt; smil&gt; <br />&lt; head&gt; <br />&lt; layout&gt; <br />&lt; root-layout width="400" height="300"/&gt; <br />&lt; region id="videoregion" top="0" left="0" width="400" height="300" fit="meet"/&gt; <br />&lt; /layout&gt; <br />&lt; /head&gt; <br />&lt; body&gt; <br />&lt; video id="testlink" src="1.avi" clip-begin="150" region="videoregion"/&gt; <br />&lt; /body&gt; <br />&lt; /smil&gt; <br />或<br />&lt; par id="testlink"&gt; <br />&lt; video src="1.avi" clip-begin="150" region="videoregion"/&gt; <br />&lt; /par&gt; </font>
		</p>
		<p>
				<br />
				<font face="Courier New">&lt; a href="1.rm"&gt; <br />&lt; video src="videotest.rm" region="videoregion"/&gt; <br />&lt; /a&gt; <br />&lt; /body&gt; <br />&lt; /smil&gt; <br />（3）coords属性 </font>
		</p>
		<p>
				<font face="Courier New">&lt; anchor href="1.rm" coords="0， 0，150，300"/&gt; <br />或者： <br />&lt; anchor href="1.rm" coords="0％， 0％，50％，100％"/&gt; </font>
		</p>
<img src ="http://www.blogjava.net/hua/aggbug/45853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hua/" target="_blank">花</a> 2006-05-12 15:29 <a href="http://www.blogjava.net/hua/archive/2006/05/12/45853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>