马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ruby里有这些工具吗?又要简单多少?我没有用过这两门语言,我估计在这些语言力没有很统一的这种标准,或者根本就没有提供。servlet|xmlDownloaditnow![/TR]PDF(79.4KB)
FreeAcrobatReader-->
Servlet和XML:互为增补
DougTidwell
developerWorks人员
2000年4月
内容:我们的第一个servlet示例一个基础的servlet天生XML段与数据库对接小结参考材料作者简介研讨Javaservlet和XML怎样配合天生XML文档和DOM树,和它们怎样与数据库对接。本文包含几项有效的手艺:利用HTTP参数把持DOM树的处置与天生,而无需XML源文档。
对Java程序员来讲,Servlet和XML是最使人奋发的两项手艺。本文是为2000年2月17日旧金山CityJava用户组筹办的演示文稿。在本文中您将看到怎样利用servlet构成一个复杂的XML文档,构建一个DOM树,并将部份内容显现在用户屏幕上,最初您将看到怎样从一个数据库查询天生XML。
关于本文会商的示例来讲,我们将扩大HTTPServlet类。HTTPServlet类供应了一般与CGI程序相干的功效。它撑持put和get,而且使您的代码具有对HTTP哀求标头的完整会见权,包含UserAgent域。我们将创立一些复杂的servlet,并申明它们怎样处置以XML标签标志的信息。在这一过程当中我们还将申明文档对象模子(DOM)的一些办法。这些复杂的使用程序将使您懂得当将servlet和XML组合在一同时您可以做哪些事变。
第一个servlet示例
作为入手下手,我们将编写一个用来天生XML文档的10行servlet。在构建了解XML的servlet时,我们将按以下三个步骤举行:
- 将内容范例设为text/xml。
- 创立XML文档。
- 将XML文档写回客户机。
在我们的年夜多半Servlet中,次要精神放在第二步。我们大概依据数据库查询创立一个XML文档,也大概基于从客户传送来的HTTP参数天生它,大概也大概利用其他范例的数据检索或天生办法。在本文的示例中,将次要思索HTTP参数和数据库查询。
一个基础的servlet
关于第一个示例,第二步“创立XML文档”不是我们所体贴的;我们只想天生一个无效的XML文档。我们已将文档硬编码到源代码中,如清单1所示。Color-codingourcolorfulcoding-->
黑色编码
黑色编码清单是本文的一个特征,我们正在dW举行实验。为了天生我们的黑色编码清单,我正在利用一些开放源代码的工具。起首,我将文档(Java、HTML、XML等)载进Emacs中。Emacs界说了关头字、正文、函数名和其他编程言语构件(约莫有十多种)的色彩。在Emacs载进文件并为其加上色彩今后,我利用HTMLize程序包,这是一种用已经盛行的EmacsLisp言语编写的开放源代码有用工具。HTMLize吸收一个清单(这个清单看起来与在Emacs中完整一样),然后将其转换为HTML。了局将是一个完整黑色编码的文件,它凸起显现关头字、正文、函数名等。
请告拆我们您对这些新的、改善的代码清单的设法。
假如您也想如许做,请参阅参考材料中的响应链接。
清单1.xmlfromscratch.java- publicclassxmlfromscratchextendsHttpServlet{publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{response.setContentType("text/xml");PrintWriterout=response.getWriter();out.println("<?xmlversion="1.0"?>");out.println("<greetinglanguage="en_US">");out.println("Hello,World!");out.println("</greeting>");}}
复制代码 这一段使人镇静的代码天生的了局以下所示:
清单2.xmlfromscratch.java的了局- <?xmlversion="1.0"?><greeting>Hello,World!</greeting>
复制代码 您能够检察完全清单的HTML视图或间接检察Java源文件。
天生XML段
如今,我们已创立了一个servlet,它经由过程硬编码天生一个没成心义的复杂XML文档。鄙人一个servlet中,我们从零入手下手天生一个DOM树,然后将DOM树的一部分显现在哀求者的屏幕上。向哀求者发送回的DOM树部分取决于servlet吸收到的HTTP参数。本例展现了几项有效的手艺:利用HTTP参数把持DOM树的处置与天生,而无需XML源文档。
清单3显现了处置HTTP参数的代码段:
清单3.xmlfromdom.java- publicvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException,ServletException{response.setContentType("text/xml");PrintWriterout=response.getWriter();Enumerationkeys;Stringkey;StringrequestedSubtree="";keys=request.getParameterNames();while(keys.hasMoreElements()){key=(String)keys.nextElement();if(key.equalsIgnoreCase("subtree"))requestedSubtree=request.getParameter(key);}
复制代码 正如在上一个示例中那样,我们将内容范例设置为text/xml。在此以后,我们利用HttpServletRequest.getParameterNames办法从HTTP哀求中检索一切参数。
在处置完这些参数今后,我们必要查找用户所哀求的信息。我们利用的信息从对象中构建DOM树;该DOM树包括了莎士比亚十四行诗的文本,和关于这首十四行诗的其他信息。我们将依据HTTPsubtree参数前往DOM树的一部分。清单4显现了构建DOM树的部分代码:
清单4.构建DOM树- Documentdoc=null;Elementauthor=null;Elementlines=null;Elementtitle=null;publicvoidinitialize(){doc=(Document)Class.forName("org.apache.xerces.dom.DocumentImpl").newInstance();if(doc!=null){Elementroot=doc.createElement("sonnet");root.setAttribute("type","Shakespearean");author=doc.createElement("author");ElementlastName=doc.createElement("last-name");lastName.appendChild(doc.createTextNode("Shakespeare"));author.appendChild(lastName);
复制代码 我们创立了一个Java类的实例,该类完成了DOMDocument接口,然后我们请求谁人节点为我们创立各类节点。您很简单从头编写这个使用程序,使它经由过程剖析XML文件天生DOM树。为了简化这个示例(并削减我的事情量),我们界说了一些实例变量来保留筹办为其供应服务的节点的值。这些值在类声明顶部声明,并在initialize办法中初始化。
最初一步是将被哀求的DOM树部分发送给用户。为了完成这一义务,我们利用一个递回办法,printDOMTree,它处置节点及其一切子节点。由于这个办法是递回的,以是我们从文档根节点仍是从DOM树的其他节点入手下手其实不主要。假如所哀求的是我们晓得的一个节点,则能够将这个节点传送给办法printDOMTree。不然,我们能够传送Document节点。清单5显现了这一步骤。
不得不提一下的是:.net是看到java红,而开发出来的工具。 |