您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關基于Java Applet繪制拓撲圖是怎樣的,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
使用Java Applet技術開發小應用程序,并最終將其部署到網頁上,使其能夠實現從數據庫中讀取節點、鏈路數據,并根據數據繪制拓撲圖的功能。繪制圖像的過程應用jgraph開源軟件實現。
技術要點:
1、在頁面上部署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應用程序的主機;而修改策略,需要加入數字簽名,并且瀏覽器會提示安全問題。因此在本次開發中,使用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.writeObject(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); //設定頂點大小為自動縮放 DefaultPort p = new DefaultPort(); c.add(p); //為頂點添加一個端口,用以連接連線
如果需要為頂點加入用戶自定義的屬性,可以利用jgraph提供的AttributeMap創建屬性鍵值對,***附加到頂點上:
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)。由于本次開發中只為頂點創建了一個端口,因此只有getChildAt(0)有效。
4、為頂點指定圖標
要為頂點指定圖標,首先要在Java Applet應用程序中成功加載圖標文件。Java Applet僅支持gif/png/jpg格式的圖片文件,其他格式的一概設置ImageIcon對象Image Load Status=4的錯誤,表示Load出錯,但是不會提示具體錯誤。
在Java Applet中調用其他文件,應該將此文件一并封裝在Java Applet應用程序包中,并且遵循Java規范創建標準包的名稱。在此次開發中,Java Applet應用程序本身的包名為org.nlsde.draw.applet,所需要調用的圖片文件的包名為org.nlsde.draw.applet.ico。在調用圖片文件時,只需要使用getCodeBase()方法即可獲得Java Applet應用程序本身的路徑,再加上ico即可找到圖片文件:
URL u = AppletDemo.class.getResource("ico/" + alCell[i].getAttributes().get("OBJECT_ICON") .toString() + ".jpg"); ImageIcon icon = new ImageIcon(u); GraphConstants.setIcon(alCell[i].getAttributes(), icon);
獲取圖片的ImageIcon對象后,使用jgraph內置的方法可以很容易的為頂點設置圖標。
5、定義數據庫連接
本次開發中數據庫連接被封裝在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連接字符串:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.101.32)(PORT=1521))(ADDRESS=(PROTOCOL=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的客戶端,無法使用服務名解析數據庫連接字符串,因此直接將服務名為nmstest的連接字符串寫在這里。
以上就是基于Java Applet繪制拓撲圖是怎樣的,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。