远程XML编辑器的设计

2002-10-28 16:00:14【作者】 畅享网 【进入论坛】
广告

远程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运维管理之道[原创]用户的BSM用户的IT业务管..

从企业实际的IT运营角度来看,BSM是推动IT与业务融合,实现、改善WCNG司IT管理和治理的最佳实践之一。

吕建伟 专栏和CIO问答软件项目实施管理

现实中很少能按照正规流程来的,所以只能把流程中的各个环节拆开,个个击破,以后就可以见招拆招了。

ITIL实施:CIO时刻准备着

千军易得,一将难求,要推进ITIL实施,CIO扮演的角色不容忽视。吹响集结号,CIO出击的时刻已经来到。

节能与优化IT 企业CIO过冬良策

当前金融危机的影响还在继续漫延,很多企业都在苦寻过冬的良策,在这种情况下,节能与优化技术与产品无疑成为CIO们关注的首要对象,本次选题就是针对节能与优化IT来为CIO们提供过冬的良……