⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 servlet 和 xml:互为补充(二)(转).txt

📁 我搜集的部分JAVA技术文档学习资料
💻 TXT
字号:
作者:zergman
email: zergman@chinaasp.com
日期:2001-6-15 13:58:03

[b]清单 5. printDOMTree[/b] [TABLE][TR][TD][PRE]    [#993333]if[/#] (requestedSubtree.equalsIgnoreCase([#0000ff]"author"[/#]))      printDOMTree(author, out);    [#993333]else[/#] [#993333]if[/#] (requestedSubtree.equalsIgnoreCase([#0000ff]"lines"[/#]))      printDOMTree(lines, out);    [#993333]else[/#] [#993333]if[/#] (requestedSubtree.equalsIgnoreCase([#0000ff]"title"[/#]))      printDOMTree(title, out);    [#993333]else[/#]       printDOMTree(doc, out);[/PRE][/TD][/TR][/TABLE]
如果 subtree 参数是 author,则结果是:[TABLE][TR][TD][PRE]  <author>[#0000ff]    [/#]<last-name>[#0000ff]Shakespeare[/#]</last-name>[#0000ff]    [/#]<first-name>[#0000ff]William[/#]</first-name>[#0000ff]    [/#]<nationality>[#0000ff]British[/#]</nationality>[#0000ff]    [/#]<year-of-birth>[#0000ff]1564[/#]</year-of-birth>[#0000ff]    [/#]<year-of-death>[#0000ff]1616[/#]</year-of-death>[#0000ff]  [/#]</author>[/PRE][/TD][/TR][/TABLE]
如果 subtree 参数是 title,则结果是:[TABLE][TR][TD][PRE]<title>[#0000ff]Sonnet 130[/#]</title>[/PRE][/TD][/TR][/TABLE]
您可以查看[url href=http://www.cn.ibm.com/developerWorks/java/servlets-and-xml/xmlfromdom-src.html]完整清单的 HTML 视图[/url]或直接查看 [url href=http://www.cn.ibm.com/developerWorks/java/servlets-and-xml/xmlfromdom.java]Java 源文件[/url]。 
[b]与数据库对接[/b] 
我们的最后一个示例是根据数据库查询生成 XML。有许多方法可做到这一点(请参阅 developerWorks 的文章 [url href=http://www-4.ibm.com/software/developer/library/buildappl/genxml.html]Generating XML from a Data Store[/url]);对于本例而言,我们将使用 IBM 的 XML Extender for DB2(请参阅[url href=http://www.cn.ibm.com/developerWorks/java/servlets-and-xml/index.shtml#resources]参考资料[/url])。这个免费产品使您能够在 DB2 中存储 XML 文档。我们的查询从 DB2 中提取这些文档,然后将其传送给用户。
如果您使用 Oracle 8i 代替 DB2,您将会发现它自称具有类似的功能(请参阅[url href=http://www.cn.ibm.com/developerWorks/java/servlets-and-xml/index.shtml#resources]参考资料[/url])。对于不理解 XML 的数据库,您可以将 XML 文档存储为字符大对象 (CLOB),并以文本块的方式检索文档。
但是,在安装数据库以后,您需要完成以下三件事情才能使此代码工作:[OL][LI]首先,将 DbOwner、DbUserid 和 DbPasswd 变量改为适合系统的适当值。
[TABLE][TR][TD][PRE]   [#666666]/////////////////////////////////////////////////////////////////[/#]       [#666666]// 一定要正确更改这三个字符串,否则                            //[/#]   [#666666]// servlet 不会工作。                                          //[/#]   [#666666]/////////////////////////////////////////////////////////////////[/#]       [#006600]DbUserid[/#] = [#0000ff]"xxxxxxxx"[/#];   [#006600]DbPasswd[/#] = [#0000ff]"xxxxxxxx"[/#];   [#006600]DbOwner[/#] = [#0000ff]"xxxxxxxx"[/#];   [/PRE][/TD][/TR][/TABLE]

[LI]下一步,使用适合您的系统的 JDBC 驱动程序。我们在使用 DB2。
[TABLE][TR][TD][PRE]    [#993333]static[/#] [#006600]String[/#] [#006600]JDBCDriver[/#] = [#0000ff]"COM.ibm.db2.jdbc.app.DB2Driver"[/#];    ...    [#993333]try[/#]    {      Class.forName([#0000ff]"COM.ibm.db2.jdbc.app.DB2Driver"[/#]).newInstance();    }    [#993333]catch[/#] ([#006600]Exception[/#] [#000066]e[/#])    {      System.out.println([#0000ff]"Can't get the driver!"[/#]); e.printStackTrace();    }[/PRE][/TD][/TR][/TABLE]

[LI]如果你愿意,可以改掉下面的 SQL 查询语句。为了简化示例,此处仅检索 sales_order_view 表的 order 列中的全部 XML 文档。
[TABLE][TR][TD][PRE]    [#666666]// 我们在此处对 SQL 语句进行硬编码;如果根据用户输入[/#]    [#666666]// 限制查询,则情况会更为复杂。[/#]    [#006600]String[/#] [#000066]query[/#] = [#0000ff]"select order from "[/#] + [#006600]DbOwner[/#] + [#0000ff]".sales_order_view"[/#];[/PRE][/TD][/TR][/TABLE][/LI][/OL]
在 service 方法中,我们的 servlet 连接 DB2,执行一个查询(其结果为一组 XML 文档),分析查询结果,并将分析过的数据写入输出流中。清单 6 显示了与此关系最密切的代码部分: 
[b]清单 6. xmlfromdb2.java[/b] [TABLE][TR][TD][PRE]    [#666666]// 我们在此处对 SQL 语句进行硬编码;如果根据用户输入[/#]    [#666666]// 限制查询,则情况会更为复杂。[/#]    [#006600]String[/#] [#000066]query[/#] = [#0000ff]"select order from "[/#] + [#006600]DbOwner[/#] + [#0000ff]".sales_order_view"[/#];    res.setContentType([#0000ff]"text/xml"[/#]);    [#993333]try[/#]      {        [#006600]ConInfo[/#] [#000066]index[/#] = [#993333]new[/#] [#006600]ConInfo[/#]();        [#006600]Connection[/#] [#000066]con[/#] = getCon(index);        [#006600]Statement[/#] [#000066]stmt[/#] = con.createStatement();        [#006600]ResultSet[/#] [#000066]rs[/#] = stmt.executeQuery(query);        ...        [#666666]// 显示结果集。我们从每行取出 XML 文档,[/#]        [#666666]// 对其进行分析,然后打印 DOM 树。当没有更多的行时,rs.next() 返回[/#]        [#666666]// false。[/#]        [#993333]while[/#] (rs.next())          {             [#006600]String[/#] [#000066]nextOrder[/#] = rs.getString(1).trim();            [#006600]Document[/#] [#000066]doc[/#] = [#990099]null[/#];            [#006600]StringReader[/#] [#000066]sr[/#] = [#993333]new[/#] [#006600]StringReader[/#](nextOrder);            [#006600]InputSource[/#] [#000066]iSrc[/#] = [#993333]new[/#] [#006600]InputSource[/#](sr);                        [#993333]try[/#]              {                parser.parse(iSrc);                doc = parser.getDocument();              }            [#993333]catch[/#] ([#006600]Exception[/#] [#000066]e[/#])              {                System.err.println([#0000ff]"Sorry, an error occurred: "[/#] + e);              }                        [#993333]if[/#] (doc != [#990099]null[/#])              printDOMTree(doc, out);          }[/PRE][/TD][/TR][/TABLE]
要了解全部细节,您可以查看[url href=http://www.cn.ibm.com/developerWorks/java/servlets-and-xml/xmlfromdb2-src.html]完整清单的 HTML 视图[/url]或直接查看[url href=http://www.cn.ibm.com/developerWorks/java/servlets-and-xml/xmlfromdb2.java]Java 源文件[/url]。
[b]小结[/b] 
尽管这些 servlet 示例中没有一个可以改变世界,但它们确实展示了 XML 和 servlet 配合得有多么好。Servlet 是向客户发送内容的一种伟大机制,而 XML 是发送结构化数据的一种完美机制。您还可以使用 servlet 处理服务器上的 XML 文档,并将它们的内容发送给客户机。最重要的是,这两种技术都是跨平台技术,可为您的应用程序带来更大的灵活性和可移值性。
[b]参考资料[/b] 
[UL][LI]了解有关 [url href=http://www-4.ibm.com/software/data/db2/extenders/xmlext/index.html]DB2 XML Extender[/url] 的详细信息。产品附带的文档中有一个深入的教程,它可帮助您将 XML 文档带入关系数据库的世界中。 [LI]了解有关 [url href=http://www.oracle.com/database/oracle8i/]Oracle 数据库产品[/url]的详细信息。 [LI]试用 WebSphere 附带的免费 [url href=http://www.software.ibm.com/webservers/appserv/tutorial.html]servlet 教程[/url]。 [LI]通过 developerWorks 的 [url href=http://www.cn.ibm.com/developerWorks/education/xml/xmljava/index.html]XML programming in Java[/url] 教程深入研究如何分析 XML 文件。 [LI]下载作者为 City Java 用户组制作的演示文稿的 [url href=ftp://www6.software.ibm.com/software/developer/library/xmlservlet.pdf]PDF[/url] 版本。 [LI]在 [url href=http://www.gnu.org/software/emacs/emacs.html]www.gnu.org[/url] 网站学习使用 Emacs 彩色编码代码清单。HTMLize 程序包可从网址 [url href=http://jagor.srce.hr/~hniksic/htmlize.el]jagor.srce.hr[/url] 获得。[/LI][/UL]

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -