基于Tiles框架Struts框架的UI 设计—几种组织HTML和JSP视图组件
javaduke 发表于 2003-11-28 15:11:00作者:sunnyrainy 评论数:0 点击数:5,987 投票总得分:14 投票总人次:8
关键字:Tiles Struts
作者:Prakash Malani
原文:http://www.javaworld.com/javaworld/jw-01-2002/jw-0104-tilestrut.html
译者:sunnyrainy
Email: [email protected]
QQ: 273771372
MSN: [email protected]
摘要
每 个web应用开发者一定组织视图组件,例如页首,正文体和页尾。 有许多技术可以组织这些组件, 但每个都有优缺点。这篇文章包括了7个可用的解决方案并让你了解 Tiles框架和Struts框架的灵活性。从一个简单的说明组织视图组件的例子开始,然后使用 JSP内建的机制,像include, 彻底地解决问题。继续看其他的使用Tiles框架的替换方案,然后学会平衡Tiles框架和Struts框架的协作。 (2,000个字;2002 年1月 4 日)
在Web应用软件开发中,一般用户界面负责站点的外观感觉,它可以让人产生真切的感受。通过界面的展现,来展示应用程序功能和导 航。基于Servlet和JSP技术实现用户界面时,当HTML页面被转换为servlets和JSPs时,UI开发人员必须识别哪些是公共的普通 HTML页面,哪些是JSP页面组件,如标题、页脚,主体,菜单和搜索等。这篇文章提供了多种有效的解决方案来组织HTML和JSP视图组件。每个方案都 使用了特定的标准,像页数、编码重复和布局控制等。
为了探究模板和布局方案,我们使用Tiles 框架.Tiles 框架的视图组件叫做tiles。框架 使用XML配置文件来组织这些tiles.框架不仅能让你再次使用tiles,而且还可以对他们进行设计组织。
为了探寻更强大和灵活的方案,我们研究Tiles框架和Struts 框架之间的协作。Struts是一个使用流行的MVC或者Model 2结构模式的用于开发web 应用软件的开源框架.Struts 有着强大标签库,Tile框架的标签库加入使其更加完善。
评价标准
评价每个方案有如下标准。标准是兼容的。对于特定的情况和特殊的应用,必须经常均衡每个方案中这些因素的优势与缺陷。
页数(Page number)
方案必须尽量使HTML and JSP的页数减到最小。因为页数增加,开发、管理、维护一个应用程序的复杂性将会急剧增加。
代码重复(Code repetiton)
在大多数情况下,重复是不好的。HTML and JSP编码越是重复,开发和维护应用程序就越困难。一个简单变化可能在许多不同页面上导致一连串不可预期结果的改变。具体和实际的获得重新使用的方式应避免编码重复。
布局控制(Layout comtrol)
尽管编码重复是不好的,但是布局逻辑和编码重复的会更糟。在几个JSPs中的扩展视图组件结构的逻辑和行为可以是一个解决灾难的方法。获得模板的设计逻辑的重复使用是一种比仅仅重复使用视图组件更好的形式。因此,你可以通过有效的布局控制达到一个更高的重复使用的水平。
耦合(Coupling)
耦 合是个实体间的兼容性的一个度。软件工程师被重复教育要使不相干的类、包等等之间的耦合减到最小。我们可以对视图组件应用相同的原理。尽管从一个使用者角 度讲视图组件之间是有区别的,但在JSP执行中,组建可能被杂乱的连接。一种解决方案使必须减少不相干视图组件之间的耦合.
复杂性(Complexity)
复杂性导致了更多的开发和维护费用,也使得更多的复杂方案不合适。当你增加更多的部分时,复杂性同时也在增加,这将使原本看起来简单的和无害的东西很快转变为大混乱。
解决方案
我将使用基本的JSPs例子。通过像header ,footer这样的普通的视图组件来评价一些方案。我将按增加复杂性的顺序给出这些方案,然后相对于评价标准详细的评价每一个。
方案1:基本的JSP
假如a.jsp如下:
Header
a's body...
Footer
假如b.jsp如下:
Header
b's body...
Footer
在 许多情况,开发者从UI类中直接获取编码,并根据需要直接将他转换成JSP代码。如上所示,每个JSP有重复的HEADER 和FOOTER。方案1是不合需求的,原因是HEADER和 FOOTER视图组件改变,因每页都为所放置的组件负责,所以需要在所有相关页上改变。简单的方案1缺乏远见。有着如此多HTML和JSP 代码重复,我们虽然减少了页的数量,但是需要一个很大的维护费用。就像前面所解释的,不同的视图组件间有着很大的耦合 ,所以这是不合需要的。
方案2:JSP include
假如 a.jsp如下:
<%-- include header --%>
a's body...
<%-- include footer --%>
假如b.jsp如下:
html>
<%-- include header --%>
b's body...
<%-- include footer --%>