分享
 
 
 

J2EE的展现层设计:Applets、servlets和XML结合使用

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

使用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://www.knowsky.com)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有