国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

J2EE的展現層設計:Applets、servlets和XML結合使用

2019-11-18 16:03:07
字體:
來源:轉載
供稿:網友

  使用xml配置applet來增強你的web界面
對一般的基于J2EE的系統,用戶界面(UI)總不是很健壯,這里我們提供了一個使用java Plug-in的解決方案:使用applets來解讀XML文檔中的數據,并按要求顯示出它們,XML文檔由servlet產生

在標準的J2EE展現層設計中,我們會使用Html來包裝servlet和jsp產生的數據,HTML的優勢在于,它易于編寫、美觀

但是當你需要更復雜的GUI時,html就不能滿足要求了,比如使用<table>標簽,你不能在表格中做到滾動、選擇某一行、編輯等操作。你不可能做到讓他看起來就象一個電子表格,用戶可以執行各種復雜的表格操作.還有當你需要一個層次化的樹型列表,可以進行折疊、擴展、拖進、拖出、對節點改名或刪除等操作,這些HTML都做不到

當然你可以使用HTML 或DHTML來實現實現一些簡單表單和樹行為操作,比如使用checkbox來實現行選擇.而DHTML呢,難于編寫和維護,在發布時也會因瀏覽器的不同而產生錯誤.很明顯Java applet應該是最好的選擇,但如何使用它,怎樣把它良好的整合到J2EE的結構中呢?

在J2EE的教程中,SUN公司簡單的提到在web客戶中使用applet,但更多講述的是servlet和JSP,因為它們不需要任何插件,SUN特別指出了使用JSP來產生XML文檔,XML數據是應用于Web serviced的標準的機讀數據,這點很重要.

但是在這篇文章中,我們要介紹的是使用applets來嵌入展現層,它需要使用一個由web 組件(JSP或SERVLET)產生的XML文檔作為資源文件,這樣就不需要你的applet通過RMI/IIOP來訪問遠程的EJB,而是直接訪問本地的XML文檔.

展現層數據:
接下來怎么做呢?,首先讓我來回想什么是展現層數據(PResentation data),presentation data是從你的商業層(或數據層)獲取的、需要被處理顯示的數據,presentation data包含2個部分,一個是要顯示的數據,一個是用于描述GUI組件的結構和狀態的數據,例如,我們考慮一下一個層次化的樹型列表;這里是它需要用到的一些數據

各節點的名稱、節點是否是文件夾、個節點的內容,這些數據多少很象JTree在它的TreeModel所需的數據,你可以把這些數據用XML來表示,如下:


<?xml version="1.0" encoding="UTF-8"?>
<tree title="My Tree Root">
<folder title="My Folder One">
<leaf title="My Leaf One"/>
</folder>
<leaf title="My Leaf Two"/>
</tree>


你可以繼續為各節點添加內容,比如加上節點的圖標、它所代表對象的hyperlink以及它代表的對象類(比如現金或日期)


使用applet
當然光有XML文檔沒甚么用,它主要是服務于applet的.你可以編寫applet來解讀XML中的數據,把它們應用到圖形界面中,例如剛才的用于表述樹型數據的XML文檔解析到DefaultMutableTreeNode對象中,來使JTree顯示數據,圖1 顯示了整個過程的sequence視圖


Figure 1.

在JSP中可以使用標準的HTML標簽<applet>或者JSP中的<jsp:plugin>,后者是使用Plug-in模式運行你的applet,它可以讓你指定特定的JVM,而不是默認的瀏覽器使用的JVM,這樣可以讓瀏覽器應用最新的Java API。(是使用Java Plug-in有一些缺點:用戶不得不下載超過9 MB的插件)


狀態改變:
使用Applet的強大之處在于它可以隨時對狀態改變作出響應,例如,當你對JTree進行增減操作時,要去除了一個文件夾節點(你需要給它分配一個唯一性的ID)

<folder title="My Nice Folder " id="5">

和一個子節點

<leaf title="My Nice Leaf" id="7">

對這種改變,使用如下的一個URL調用來通知系統

http://localhost:8080/tree/node-moved?node-id=7&destination-folder-id=5

使用java.net.URL的openStream()方法來請求該URL,該URL然后把請求由servlet轉為session bean的方法調用,進行該刪除操作,如果調用成功后,session bean返回如下的一個文檔:

<?xml version="1.0" encoding="UTF-8"?>
<tree-move>
<sUCcess/>
</tree-move>

在接到該文檔后,客戶端執行操作,把這些節點從TreeModel中刪除,如果服務端調用失敗,則返回下列一個文檔

<?xml version="1.0" encoding="UTF-8"?>
<tree-move>
<failure/>
</tree-move>

客戶端接收次消息后使用狀態消息或對話框報出錯誤,圖2 顯示整個過程


Figure 2. Process of an applet firing state changes

最佳實現
以下介紹一些這種模式的技巧

產生盡可能簡單的XML的格式
XML對傳輸和解析的耗用很大,因此應可能保持最簡單的結構:只加入必須的數據、使用最簡化標簽,對"<", ">", 和 "&" 使用類似 &#xxx 的形式轉換,否則你可得到解析錯誤

使用輕量級的SAX解析器
要加快程序的啟動時間,要使用輕量級的解析器。我知道的最輕量級的解析器是Aelfred(OpenText的 Aelfred 是一種免費的、專門用于applet的輕量級XML解析器),當然你也可以自己構建自己的解析器,但需要注意使用SAX API對節省內存比DOM更佳,因為它是事件驅動的

別去校驗XML
盡量不要直接校驗XML,而是對用于產生XML的數據進行預處理,使用GUI中的回饋元素返回錯誤

只返回你需要的數據 要節省下載時間,你應該只返回一些你需要的數據,比如在返回JTree的數據庫時,不一定要把所有的數據庫都同時下載,對一些較大的描述你可以在展開某個節點時再下載,加上如下的一個data-link:(這樣可以減少加載applet的時間)

<dynamic-folder title="My Dynamic Folder" data-link="http://localhost:8080/tree/url-to-get-more-data?node-id=123"/>

又比如對JTable,你只需要加載現在說需要的數據,比如前50行,如果用戶要求,再加載后50行

只為那些必須使用applet的地方使用它們
applet的加載還是較慢,所以只有在對復雜操作的GUI中我們才采用applet,如果可以使用HTML和javascript解決,還是盡量使用更為輕量級的html編碼


小結:
使用applet作為展現層,有如下的一些優點:對傳統的HTML的一種增強補充,降低了展現層和業務層的過多交互,沒有直接使用applets和EJB直接通訊

請查看本文的范例來增強理解:http://www.javaworld.com/javaworld/jw-05-2002/j2ee/jw-0524-j2ee.zip


About the author
Jeremy Dickson has been writing Java code for the past five years in the domain of bioinformatics and life science. He is currently a senior developer at the life science-solutions provider Viaken Systems, working on enterprise Java solutions to data integration problems. Formerly, he has worked on everything from JavaBean components for displaying genetic maps to EJB-based server-side platforms for project management.

閱讀英文原文 A J2EE presentation pattern: Applets with servlets and XML

轉載自 http://mag.javadigest.net

(出處:http://m.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洛宁县| 长白| 衢州市| 襄樊市| 咸阳市| 天镇县| 抚松县| 房产| 玉田县| 井研县| 巢湖市| 昌江| 阿拉善左旗| 荥阳市| 门源| 天祝| 南康市| 博兴县| 恩施市| 偏关县| 房产| 忻城县| 宁蒗| 沙湾县| 东莞市| 鄂尔多斯市| 馆陶县| 射洪县| 宿松县| 嵊州市| 灵丘县| 遂川县| 翁源县| 城步| 临泉县| 防城港市| 平顶山市| 阿克陶县| 理塘县| 共和县| 河池市|