马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
微软什么都提供了。你可以试想一下,如果你是新手,你是希望你点一下按钮程序就能运行那,还是想自己一点一点的组织结构,然后打包发部,调错再打包......servlet|xml清单5.printDOMTree- if(requestedSubtree.equalsIgnoreCase("author"))printDOMTree(author,out);elseif(requestedSubtree.equalsIgnoreCase("lines"))printDOMTree(lines,out);elseif(requestedSubtree.equalsIgnoreCase("title"))printDOMTree(title,out);elseprintDOMTree(doc,out);
复制代码 假如subtree参数是author,则了局是:- <author><last-name>Shakespeare</last-name><first-name>William</first-name><nationality>British</nationality><year-of-birth>1564</year-of-birth><year-of-death>1616</year-of-death></author>
复制代码 假如subtree参数是title,则了局是:您能够检察完全清单的HTML视图或间接检察Java源文件。
与数据库对接
我们的最初一个示例是依据数据库查询天生XML。有很多办法可做到这一点(请参阅developerWorks的文章GeneratingXMLfromaDataStore);关于本例而言,我们将利用IBM的XMLExtenderforDB2(请参阅参考材料)。这个收费产物使您可以在DB2中存储XML文档。我们的查询从DB2中提取这些文档,然后将其传送给用户。
假如您利用Oracle8i取代DB2,您将会发明它自称具有相似的功效(请参阅参考材料)。关于不睬解XML的数据库,您能够将XML文档存储为字符年夜对象(CLOB),并以文本块的体例检索文档。
可是,在安装数据库今后,您必要完成以下三件事变才干使此代码事情:
- 起首,将DbOwner、DbUserid和DbPasswd变量改成合适体系的得当值。
- ///////////////////////////////////////////////////////////////////必定要准确变动这三个字符串,不然////servlet不会事情。///////////////////////////////////////////////////////////////////DbUserid="xxxxxxxx";DbPasswd="xxxxxxxx";DbOwner="xxxxxxxx";
复制代码 - 下一步,利用合适您的体系的JDBC驱动程序。我们在利用DB2。
- staticStringJDBCDriver="COM.ibm.db2.jdbc.app.DB2Driver";...try{Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance();}catch(Exceptione){System.out.println("Cantgetthedriver!");e.printStackTrace();}
复制代码 - 假如你乐意,能够改失落上面的SQL查询语句。为了简化示例,此处仅检索sales_order_view表的order列中的全体XML文档。
- //我们在此处对SQL语句举行硬编码;假如依据用户输出//限定查询,则情形会更加庞大。Stringquery="selectorderfrom"+DbOwner+".sales_order_view";
复制代码
在service办法中,我们的servlet毗连DB2,实行一个查询(其了局为一组XML文档),剖析查询了局,并将剖析过的数据写进输入流中。清单6显现了与此干系最亲切的代码部分:
清单6.xmlfromdb2.java- //我们在此处对SQL语句举行硬编码;假如依据用户输出//限定查询,则情形会更加庞大。Stringquery="selectorderfrom"+DbOwner+".sales_order_view";res.setContentType("text/xml");try{ConInfoindex=newConInfo();Connectioncon=getCon(index);Statementstmt=con.createStatement();ResultSetrs=stmt.executeQuery(query);...//显现了局集。我们从每行掏出XML文档,//对其举行剖析,然后打印DOM树。当没有更多的行时,rs.next()前往//false。while(rs.next()){StringnextOrder=rs.getString(1).trim();Documentdoc=null;StringReadersr=newStringReader(nextOrder);InputSourceiSrc=newInputSource(sr);try{parser.parse(iSrc);doc=parser.getDocument();}catch(Exceptione){System.err.println("Sorry,anerroroccurred:"+e);}if(doc!=null)printDOMTree(doc,out);}
复制代码 要懂得全体细节,您能够检察完全清单的HTML视图或间接检察Java源文件。
小结
只管这些servlet示例中没有一个能够改动天下,但它们的确展现了XML和servlet共同得有何等好。Servlet是向客户发送内容的一种巨大机制,而XML是发送布局化数据的一种完善机制。您还可使用servlet处置服务器上的XML文档,并将它们的内容发送给客户机。最主要的是,这两种手艺都是跨平台手艺,可为您的使用程序带来更年夜的天真性和可移值性。
参考材料
- 懂得有关DB2XMLExtender的具体信息。产物附带的文档中有一个深切的教程,它可匡助您将XML文档带进干系数据库的天下中。
- 懂得有关Oracle数据库产物的具体信息。
- 试用WebSphere附带的收费servlet教程。
- 经由过程developerWorks的XMLprogramminginJava教程深切研讨怎样剖析XML文件。
- 下载作者为CityJava用户组制造的演示文稿的PDF版本。
- 在www.gnu.org网站进修利用Emacs黑色编码代码清单。HTMLize程序包可从网址jagor.srce.hr取得。
进而能拉拢大多数程序员用windows产品。并且从ASP.NETAJAX可以跨平台这一点上,间接证明了我们的推断,至少证明了微软做过这方面的研究。所以如果哪一天突然听说了.net可以跨平台了,那么请不要吃惊,如果这一天真的到来,java就到了真正和.net决战的时刻。因为不到万不得以的时候微软是不会推出跨平台的.net的,如果跨平台的.net还不足以对抗java的话,那么微软还剩的手段就是开源了,呵呵。 |