当前位置:文档之家› Java绘网络拓朴图

Java绘网络拓朴图

基于JAvA编程 Applet绘制拓扑图总结时间:2009-11-22 21:01来源: 作者: 点击:94次
本文向您介绍使用Java Applet绘制拓扑图的方法,包括Java Applet的部署、链接数据库等基本操作。
本文向您介绍应用JAvA编程 Applet绘制拓扑图的窍门,包括JAvA编程 Applet的部署、Link数据库等基本操作。

应用JAvA编程 Applet性能DEV小实际运用程序,并最终将其部署到网页上,使其能够出现从数据库中读取节点、链路数据,并根据数据绘制拓扑图的功能。绘制图像的过程实际运用jgraph开源软件出现。

性能要点:

1、在PAGE上部署JAvA编程 Applet实际运用程序,并调用jgraph.jar包

<applet archive="AppletDemo.jar,jgraph.jar" code="org/nlsde/draw/applet/AppletDemo.class"
codebase="./" width="660" height="560">applet>
在此将网页文档和AppletDemo.jar放在同一个的列表下,由于需求引用第三方的jgraph.jar包,因此在archive属性中一并写上jgraph.jar

2、JAvA编程 Applet实际运用程序来访数据库

由于JAvA编程 Applet实际运用程序本身的策略控制,在默认情况下实际运用程序只能以http规则来访运行此JAvA编程 Applet实际运用程序的主机;而改正策略,需求加入数字签名,并且浏览器会提示安全难点。因此在本次DEV中,应用JAvA编程 Applet来访Servlet的时髦窍门来解决读取数据库的难点。

JAvA编程 Applet实际运用程序和Servlet停止交互,没成绩直接在两者间传递支持序列化的对象(Serializable)。在Servlet端,只需求响应doGet事件,并将处理结果以ObjectStream的形式返回即可:

DefaultGraphCell[] alCells = org.nlsde.draw.data.CellHandler.getAllCells();
ObjectOutputStream out = new ObjectOutputStream(response
.getOutputStream());
out.recordObject(alCells);
在JAvA编程 Applet端,发起数据请求和接受结果如下:

URL url = new URL(getCodeBase() + "/servlet/GetAllCells");
URLConnection urlConn = url.openConnection();
InputStream in = urlConn.getInputStream();
ObjectInputStream result = new ObjectInputStream(in);
Object obj = result.readObject();

DefaultGraphCell[] alCell = (DefaultGraphCell[]) obj;
和数据库交互的部份,被封装到另外的类CellHandler中。)

3、利用jgraph绘制拓扑图的过程

在jgraph中,存在顶点(vertice)、连线(edge)、端口(port)的概念,她们的联系如下:

顶点、连线、端口都被以为是GraphCell,只不过连线和端口有自个独特的属性。

利用jgraph绘图的程序如下:

创建顶点集合,并指定各个顶点的属性

DefaultGraphCell c = new DefaultGraphCell(rs.getString("MAIN_IP"));
//创建顶点对象,并指定Label出现文本
GraphConstants.setAutoSize(c

.getAttributes(), true);
//设定顶点大小为自动缩放
Defau
ltPort p = new DefaultPort();
c.add(p);
//为顶点添加一个的端口,用以连接连线
假如需求为顶点加入用户自定义的属性,没成绩利用jgraph帮助的AttributeMap创建属性键value对,最后附加到顶点上:

AttributeMap m = new AttributeMap();
m.applyValue("MAIN IP", rs.getString("MAIN_IP"));
c.getAttributes().applyMap(m);
接着创建连线,并根据规则指定连线的起点和终点:

DefaultEdge e = new DefaultEdge();
AttributeMap m = new AttributeMap();
m.applyValue("OBJECT_INSTANCE",rs.getString("OBJECT_INSTANCE"));
m.applyValue("SOURCE1_INSTANCE",rs.getString("SOURCE1_INSTANCE"));
m.applyValue("SOURCE2_INSTANCE",rs.getString("SOURCE2_INSTANCE"));
m.applyValue("TYPE","LINK");

e.getAttributes().applyMap(m);
在指定连接的起点和终点时,采用比对SOURCE1_INSTANCE和SOURCE2_INSTANCE也许和顶点中的OBJECT_INSTANCE匹对相配的窍门,若匹对相配,则被较量顶点是当前连线的起点或终点:

for (int i = 0; i < alLink.length; i++) {
for (int j = 0; j < alCell.length; j++) {
if (alCell[j].getAttributes().get("OBJECT_INSTANCE")
.toString().equalsIgnoreCase(
alLink[i].getAttributes().get(
"SOURCE1_INSTANCE").toString())) {
alLink[i].setSource(alCell[j].getChildAt(0));
}
if (alCell[j].getAttributes().get("OBJECT_INSTANCE")
.toString().equalsIgnoreCase(
alLink[i].getAttributes().get(
"SOURCE2_INSTANCE").toString())) {
alLink[i].setTarget(alCell[j].getChildAt(0));
}
}
}
设置起点或终点需求调用setSource()或setTarget()窍门,需求留意的是此窍门的参数是顶点的端口,而非顶点本身,因此参数形式是GraphCell.getChildAt(0)。由于本次DEV中只为顶点创建了一个的端口,因此只有getChildAt(0)有效。

4、为顶点指定图标

要为顶点指定图标,首先要在JAvA编程 Applet实际运用程序中胜利加载图标文档。JAvA编程 Applet仅支持gif/png/jpg格式的图片文档,更多相关格式的一概设置ImageIcon对象Image Load Status=4的错误,表明Load出错,但是不会提示具体错误。

在JAvA编程 Applet中调用更多相关文档,应该将此文档一并封装在JAvA编程 Applet实际运用程序包中,并且遵循JAvA编程规则创建达标包的名称。在此次DEV中,JAvA编程 Applet实际运用程序本身的包名为org.nlsde.draw.applet,所需求调用的图片文档的包名为org.nlsde.draw.applet.ico。在调用图片文档时,只需求应用getCodeBase()窍门即可获得JAvA编程 Applet实际运用程序本身的路径,再加上ico即可找到图片文档:

URL u = AppletDemo.class.getRes

ource("ico/"
+ alCell[i].getAttributes().get("OBJECT_ICON")
.toString() + ".jpg");
ImageIcon icon = new ImageIcon(u);

GraphConstants.setIcon(alCell[i].getAttributes(), icon);
获取图片的ImageIcon对象后,应用jgraph内置的窍门没成绩很简易的为顶点设置图标。

5、定义数据库连接

本次DEV中数据库连接被封装在DBHandler类中。另外应用SystemConfig.xml文档来存储连接数据库的消息。在DBHandler类来访SystemConfig.xml文档时,为SystemConfig.xml文档指定了URL路径而非本地路径:

private static final String _configFile = "http://192.168.15.230:8080/draw/SystemConfig.xml";

这是由于JAvA编程 Web App在运行时,默认起始路径是$TOMCAT_HOME/bin,而非Web App本身的根列表,调用较量麻烦。

在SystemConfig.xml文档中,存储的数据库连接消息包括JAvA编程 – Oracle连接char串:

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PageRankOTOCOL=TCP)(HOST=192.168.101.32)(PORT=1521))(ADDRESS=(PageRankOTOCOL=TCP)(HOST=192.168.101.34)(PORT=1521))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=nmstest)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))))

这是由于在Oracle端配置了负载平衡,而互联网所在服务器不安装Oracle数据库10g的客户端,无法应用服务名解析数据库连接char串,因此直接将服务名为nmstest的连接char串写在那里。





相关主题
文本预览
相关文档 最新文档