|
远程XML编辑器的设计广告 远程XML编辑器的设计 慈轶为 XML提供了一种独立于软硬件的共享数据方式,借助XML,不同平台间的信息可以顺利交换。XML的语法规则简单,并且具有很好的自描述性,这使得XML得到广泛应用,同时也带来了一个需求,用户时常需要管理维护远程的XML文件。为满足这种要求,需要设计一个在网络环境下具有远程编辑能力的XML编辑器。本文所述的XML编辑器用Java语言开发,由客户端Applet和服务器端Servlet共同组成,其Applet主要负责读取远程XML文档、进行XML文档编辑以及向Servlet发送XML文档修改信息,Servlet则负责接收Applet发来的信息,并根据这些信息完成对XML文档的修改。 客户端Applet Applet首先读取远程的XML文件: URL url=new URL(codeBase,“target.xml”); InputStream stream=url.openStream(); 其中的codeBase可通过JApplet类的getCodeBase方法获得。 XML文件中所有元素都从属于一个根元素,而且有的元素可以有自己的子元素,根据这一特点这里采用树结构来显示XML文件,并且可直接在XML树上修改以完成对XML文件的编辑。 下面的代码将XML文件转化为由Node类节点所组成的树(此函数返回XML树的根节点): import org.w3c.dom.*; import javax.xml.parsers.*; public Node XML2Tree(String xml) { DocumentBuilderFactory dbf; DocumentBuilder db; Document doc; ByteArrayInputStream stream=new ByteArrayInputStream(xml.getBytes()); try{dbf = DocumentBuilderFactory.newInstance(); dbf.setValidating( false ); db = dbf.newDocumentBuilder(); doc = db.parse(stream); } catch(Exception e) {...} return (Node)doc.getDocumentElement(); } 接下来利用Node类节点构成的树生成一个由DefaultMutableTreeNode类节点构成的新树,这样就能够使用Swing风格在Applet中显示树结构了。XML文件的编辑可通过对XML树的操作完成,其中用到DefaultTreeModel类和DefaultMutableTreeNode类中的方法。在对XML树的修改过程中,Applet需不断把改动信息发送到Servlet,改动信息主要包括:改动类型,所改动节点在树中的位置,若是修改属性,还需包括变化后的属性信息。为保证数据传输的可靠性,可将信息封装成数据包,利用有效数据传输的一些办法,比如给各数据包加上序号,以防止传输过程中数据包的丢失,数据包丢失时,由服务器端通知客户端重新下载XML文件。 与Servlet进行通信的程序如下(这里的codeBase与前面提到的codeBase指的是同一个URL,yourPacketInfo是一个String类型的有关改动信息的数据包): String hostName=codeBase.getHost(); String hostAddress=InetAddress.getByName(host).getHostAddress(); Socket socket = new Socket(hostAddress,1234); PrintStream out=new PrintStream(socket.getOutputStream(),true); out.println(yourPacketInfo); out.close(); socket.close(); 服务器端Servlet Servlet的主要工作是接受Applet发来的信息,并根据这些信息修改XML文件。以下是Servlet的声明: public class myServlet extends HttpServle{...} 可在myServlet的init函数中启动一个线程来监听端口以获得Applet发送的信息,该线程可参考下面的程序: public class MyListener extends Thread { public void run(){ Socket clientSocket=null; ServerSocket serverSocket = new ServerSocket(1234 ); DataInputStream in; while(true) { try{ clientSocket=serverSocket.accept(); in=new DataInputStream(new BufferedInputStream(clientSocket.getInputStream())); in.close(); clientSocket.close(); } catch(Exception e){...} } } } 在myServlet中的doGet函数中还需写入将在客户端显示的HTML页面,这个页面中包括前面提到的myApplet.class。 运行配置 要使Servlet运行,需要在服务器端启动Tomcat。本文所使用的是jakarta-Tomcat-4.0.1。Servlet存放的位置可自己设定,可将Servlet的全部文件存放在Tomcat的“...\webapps\ROOT\WEB-INF\classes”中,将Applet的全部文件存放在“...\webapps\ROOT”中,并且对“...\webapps\ROOT\WEB-INF\web.xml”进行修改,这样在客户端的浏览器中只要输入“http://*.*.*.*/myServlet”就可使用了。web.xml的修改如下: < web-app > < servlet > < servlet-name >myServlet< /servlet-name > < servlet-class >myServlet< /servlet-class > < /servlet > < servlet-mapping > < servlet-name >myServlet< /servlet-name > < url-pattern >/myServlet< /url-pattern > < /servlet-mapping > < /web-app > 本文原载于计算机世界报 如果您希望与本文章的作者或其所在机构,进一步交流,请联系:畅享网 姜小姐 jill.jiang@amteam.org | 021-51096826-112 | 在线联系 |
节能与优化IT 企业CIO过冬良策当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良…… |
|
|