理解jsp模式2架构:MVC设计模式探险

2008-02-23 07:53:13来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  摘要:通过开发一个熟悉的基于web的购物店,你将学到如何工具化mvc设计模式并且真正地在使用jsp的时候分离内容和表现。Govind Seshadri 会向你展示这是多么的容易(2000字(原文字数))。

  尽管相对抛开最近的相关介绍而言,jsp技术正在很好地以自己的方式成为卓越的创建提供动态web内容的应用程序的java技术。java开发者因为许多不同的理由喜爱jsp。一些人喜欢它给交互式web页面带来了“一次编写,到处运行”的变化这个事实;另一些人欣赏它易学易用并且帮助人们把java作为服务器端脚本使用。但是都公认一件事——使用jsp最大的好处是能够有效地分离内容与表现。在这篇文章里,我来提供一个深入的看法,关于如何使用jsp模式2架构获得最佳的内容与表现的分离。这个模式也可以被看作流行的mvc设计模式在服务端的实现。请注意在开始之前你应该熟悉jsp和servlet编程,因为我不会在这篇文章中讨论语法问题。

  那么,servlet有什么问题?

  既然jsp用来提供动态web内容并且对于从表现层中分离内容很不错,一些人也许想知道为什么servlet要从jsp中脱离出来与它并列。servlet的功用没有问题。它对于服务端处理干得很好,而且,由于它重要的已安装基础,就适合这个。实际上,从结构上说,你可以把jsp看作实现为servlet 2.1 api的扩展的servlet高级抽象。仍然不应该不加区别地使用servlet;它可能不会适用于每一个人。举个例子来说,尽管页面设计者能够很容易地使用常规html或者xml工具编写jsp页面,而servlet通常更适合后台开发者,他们通常使用某种IDE——一个通常需要高层次的编程专门知识的过程。当发布servlet时,即使开发者也必须留意和确认在内容和表现之间没有紧耦合。通常,你可以通过加入第三方的html封装包比如htmlkona来做这个。即使这样做了,尽管带来了一些简单的对于屏幕变化的伸缩性,仍然不能为你防止免受表现格式自身的变化的影响。例如,如果你的表现形式从html转变到dhtml,你将仍然需要确认你的封装包是否兼容这种新格式。在最坏的情况下,如果封装包不能用了,你可能最终会在动态内容内部硬编码表现形式。那么,解决办法是什么?就像你你将要看到的,一个办法将会同时使用jsp和servlet来创建应用系统。

  差异哲学

  早期的jsp规范主张两种使用jsp技术创建应用的哲学思路。这两种思路,用术语来说就是jsp模式1和模式2,本质上的区别在于大部分请求的处理发生的位置。在模式1架构中,如图1所示,jsp页面独立地负责处理请求和发送反馈给客户端。这里仍然有内容和表现的分离,因为所有的数据访问是使用bean完成的。尽管模式1架构应该很适合简单应用,但是对于复杂的实现是不可取的。这种结构的任意使用通常会导致大量的脚本和java代码嵌入到jsp页面中,特别是在有大量的请求需要处理的情况下。尽管这可能对java开发者来说不是一个大问题,但是却无疑是一个问题,如果你的jsp页面是由设计师创建和维护的话——在大项目中通常如此。最终,这个问题甚至会导致角色定义和责任分配的混乱,引起本可以轻松避免的项目管理的麻烦。


图1:jsp模式1结构

  模式2架构如图2所示,是一个为动态内容服务的混合方案,因为它同时使用了servlet和jsp。它利用了两种技术的优势,使用jsp产生表现层而servlet负责执行敏感任务。在这里,servlet扮演控制器的角色,负责请求处理和产生jsp要使用的bean和对象,以及根据客户的动作决定下一步转发到哪一个jsp页面。特别要注意的是jsp页面内部并没有处理逻辑;它只是简单地负责取得可能是servelet事先创建的对象和bean,并为在了静态模版中插入从servlet释放出动态内容。我的观点是,这个办法一般会形成最干净彻底的表现与内容的分离,使得你的开发团队里的开发者和页面设计师的角色与责任能够清晰。实际上,你的应用越复杂,使用模式2带来的好处就越多。


图2:jsp模式2结构

  为了弄清模式2背后的概念,我们来参观一个细化的具体实现:一个叫做音乐无界的在线音乐商店样品。

  了解音乐无界

  主视图,或者说表现层,对于我们的音乐无界由jsp页面EShop.jsp产生(见清单1)。你会注意到这个页面几乎仅仅处理这个应用的主要用户界面,而且没有做任何处理工作——一个最佳的jsp脚本。也注意一下另一个jsp页面,cart.jsp(见清单2),通过指令<jsp:include page="Cart.jsp" flush="true" />包含在EShop.jsp之内。

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:POJO应用架构:Spring与EJB 3.0的对比

下一篇:J2EE MVC模式JSF与Struts的异同

清单1

EShop.jsp

<%@ page session="true" %>
<html>
<head>
<title>Music Without Borders</title>
</head>
<body bgcolor="#33CCFF">
<font face="Times New Roman,Times" size=" 3">
Music Without Borders
</font>
<hr><p>
<center>
<form name="shoppingForm"
action="/examples/servlet/ShoppingServlet"
method="POST">
<b>CD:</b>
<select name=CD>
<option>Yuan | The Guo Brothers | China | $14.95</option>
<option>Drums of Passion | Babatunde Olatunji | Nigeria | $16.95</option>
<option>Kaira | Tounami Diabate| Mali | $16.95</option>
<option>The Lion is Loose | Eliades Ochoa | Cuba | $13.95</option>
<option>Dance the Devil Away | Outback | Australia | $14.95</option>
<option>Record of Changes | Samulnori | Korea | $12.95</option>
<option>Djelika | Tounami Diabate | Mali | $14.95</option>
<option>Rapture | Nusrat Fateh Ali Khan | Pakistan | $12.95</option>
<option>Cesaria Evora | Cesaria Evora | Cape Verde | $16.95</option>
<option>Ibuki | Kodo | Japan | $13.95</option>
</select>
<b>Quantity: </b><input type="text" name="qty" SIZE="3" value=1>
<input type="hidden" name="action" value="ADD">
<input type="submit" name="Submit" value="Add to Cart">
</form>
</center>
<p>
<jsp:include page="Cart.jsp" flush="true" />
</body>
</html>