实例讲解JSP Model2体系结构(上)

最近已经有了很多相关的介绍,JSP正在成为一种卓越的Java技术,可用于创建动态Web应用程序。Java程序员之所以喜爱JSP有数不清的理由。有些人喜欢它为交互式页面带来的“一次编写,处处使用”的方式;还有些人欣赏它是因为它容易学习,并且使他们可以把Java作为一种服务器端脚本语言来使用。但更多的还都是因为一个共同原因――使用JSP的最大好处是它能帮助你有效地把表达与内容分离开。在本文中,我对下面的问题作了深入探讨,那就是,如何使用JSP Model 2体系结构获得最佳的表达-内容分离效果。这个模型也可以被看作是通用MVC设计模式在服务器端的一个实现。请注意,在阅读本文之前,你需要熟悉基本的JSP和servlet编程,因为文中将不会涉及到任何语法规则问题。

Servlets有什么问题?
  尽管JSP在动态Web内容服务和分离内容与表达上可以做得非常好,但仍然会有人置疑,为什么要把servlets丢在一边呢?其实servlets的作用不容置疑。它们在服务器端处理上做得很优秀,而且,由于它们已有了坚实的基础,所以仍将被保留。实际上,从结构上讲,你可以把JSP看作是servlets的一种高级抽象,就像Servlet2.1 API的一种扩充一样来实现。然而,你也不应当滥用servlets,它们并非对每个人都适用。举个例子,如果网页设计者能够很容易地用传统HTML或XML工具写出JSP页的话,servlets就更适合那些后台程序的开发者,因为servlets通常是用集成开发环境(IDE)编写的――一般来说这种方式需要更高级的编程技能。在运用servlets时,即使是开发者也必须小心谨慎以确保表达和内容不存在紧密的联系。要做到这一点,你通常可以使用第三方HTML包(比如htmlKona)来混合代码。但即便是这种方法,尽管它通过简单的屏幕变换带来了一些灵活性,却无法帮你避免表达格式本身的改动。例如,如果你的表达格式从HTML变为DHTML,你就必须确保那些语言包适应新的格式。假设一种最坏的情况,如果一个包不可用,你也许将不得不忙于在动态内容中艰难地编写表达,这会把你累死。那么,如何解决这个问题呢?接下来你将看到,使用JSP与servlets技术相结合是构建应用系统地一种好方法。

不同的体系
  早期的JSP规范提出了两种用JSP技术建立应用程序的方式。这两种方式在术语中分别称作JSP Model 1 和JSP Model 2,它们的本质区别在于处理批量请求的位置不同。在Model 1体系中,如图1所示,jsp页面独自响应请求并将处理结果返回客户。这里仍然存在表达与内容的分离,因为所以的数据存取都是由bean来完成的。尽管Model 1体系十分适合简单应用的需要,它却不能满足复杂的大型应用程序的实现。不加选择地随意运用Model 1,会导致JSP页内被嵌入大量的脚本片段或Java代码,特别是当需要处理的请求量很大时,情况更为严重。尽管这对于Java程序员来说可能不是什么大问题,但如果JSP页面是由网页设计人员开发并维护的――通常这是开发大型项目的规范――这就确实是个问题了。从根本上讲,将导致角色定义不清和职责分配不明,给项目管理带来不必要的麻烦。

  图1:JSP Model 1 体系结构

  图中文字:BROWSER:浏览器;Request:请求;Response:响应;Application Server:应用服务器;Enterprise Servers/Data Sources:企业服务器/数据源。

  Model 2体系结构,如图2所示,是一种把JSP与servlets联合使用来实现动态内容服务的方法。它吸取了两种技术各自的突出优点,用JSP生成表达层的内容,让servlets完成深层次的处理任务。在这里,servlets充当控制者的角色,负责管理对请求的处理,创建JSP页需要使用的bean和对象,同时根据用户的动作决定把那个JSP页传给请求者。特别要注意,在JSP页内没有处理逻辑;它仅负责检索原先由servlets创建的对象或beans,从servlet中提取动态内容插入静态模板。在我看来,这是一种有代表性的方法,它清晰地分离了表达和内容,明确了角色的定义以及开发者与网页设计者的分工。事实上,项目越复杂,使用Model 2体系结构的好处就越大。

  图2:JSP Model 2体系结构

  图中文字:instantlate:瞬间延时;Controller、View、Model分别为MVC设计模式中的控制者、试图、模型;其他同图1。

  为了进一步阐明Model 2体系结构的概念,我们来看一个用它实现的例子:一个叫做“音乐无国界”的网上音乐商店。

(0)

相关推荐

  • 实例讲解JSP Model2体系结构(下)

    每次用户在Eshop.jsp页内加入一件物品,页面就向控制servlet发送一个请求.由servlet依次决定适当的动作,然后处理要加入的物品的请求参数.然后它例示一个新的CD Bean(见代码清单4)表示所选物品,并在会话内更新购物车对象. 代码清单 4:CD.java package shopping; public class CD { String album; String artist; String country; float price; int quantity; publi

  • JSP程序运行原理、文档结构及简单输入输出实例分析

    本文实例讲述了JSP程序运行原理.文档结构及简单输入输出.分享给大家供大家参考.具体如下: 目标: 掌握Web应用的文档结构: 掌握JSP的运行原理: 掌握JSP的简单输入和输出. 主要内容: 通过一个简单实例介绍Web应用的文档结构和运行原理: 通过一个简单的注册功能介绍基本的输入输出. 实现内容:客户端验证. 1. 文档结构 每个应用都有一个根目录,例如ch2:理论上可以放在任何地方,但是需要配置,简单的做法,直接放在了webapps这个目录下,在这个目录的应用会被自动加载. 在根目录下会有

  • JSP动态输出Excel及中文乱码的解决

    最近在网上看到一个用java来操纵excel的open source,在weblogic上试用了一下,觉得很不错,特此向大家推荐一下. 首先去http://www.andykhan.com/jexcelapi/index.html下载最新的JExcelApi,把jxl.jar置于你的classpath中. 写一个javaBean,利用JExcelApi来动态生成excel文档,我这里写一个最简单的,示意性的.复杂的你可能还要查询数据库什么的. //////////////////////////

  • jsp源码实例1(输出)

    package coreservlets; import java.io.*;import javax.servlet.*;import javax.servlet.http.*; /** Simple servlet that generates HTML.* <P>* Taken from Core Servlets and JavaServer Pages* from Prentice Hall and Sun Microsystems Press,* http://www.corese

  • JSP输出HTML时产生的大量空格和换行的去除方法

    这个问题当年也困扰了我比较长的时间.因为在jsp内使用的EL标签和其他标签时,会产生大量的空格和换行符.例如: 复制代码 代码如下: ------- start ---------- <c:choose> <c:when test="${fn:length(mainPageList)>1&}"> Something </c:when> <c:otherwise> Others </c:otherwise> <

  • jsp 页面上图片分行输出小技巧

    <table border="0" cellpadding="2"> <c:forEach items="${pics}" var="pic" varStatus="status"> <c:if test="${((status.index)%3)==0}"><tr></c:if> <td> <input cl

  • 实例讲解JSP Model2体系结构(中)

    理解"音乐无国界" "音乐无国界"的主界面是JSP页 Eshop.jsp(见代码清单1).你会注意到,这个页面几乎只作为专门的用户界面,不承担任何处理任务――是一个最理想的JSP方案.另外,请注意另一个JSP页Cart.jsp(见代码清单2)被Eshop.jsp通过指令<jsp:include page="Cart.jsp" flush="true" />包含于其中. 代码清单 1:EShop.jsp <%@

  • Jsp结合XML+XSLT将输出转换为Html格式

    我们知道 XML+XSLT就可以直接输出到支持XML的浏览器上,如IE 5.0以上,但是,我们还要考虑到有不少浏览器不直接支持XML,在这种情况下,我们需要在服务器上进行转换成html输出到浏览器,这种临时过渡办法恐怕要在一段时间内一直要使用. 使用Jsp 加上tablib标识库,我们可以完成这种转换. 著名open source项目组jakarta.apache.org推出的系列标识库中,就有这个功能的tanglib:http://jakarta.apache.org/taglibs/doc/

  • JSP运行原理和九大隐式对象说明

    每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet) ,然后按照servlet的调用方式进行调用. 由于JSP第一次访问时会翻译成servlet,所以第一次访问通常会比较慢,但第二次访问,JSP引擎如果发现JSP没有变化,就不再翻译,而是直接调用,所以程序的执行效率不会受到影响. JSP引擎在调用JSP对应的_jspServlet时,会传递或创建9个与web开发相关的

  • JSP + ajax实现输入框自动补全功能 实例代码

    下面是我用ajax实现的输入框自动补全功能,数据库数据很少,大体模仿出了百度首页的提示功能,当然,人家百度的东西不只是这么简单的!先看运行效果: index.jsp(包含主要的js代码) 复制代码 代码如下: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath();

  • JSP中使用JavaScript动态插入删除输入框实现代码

    JavaScript代码: 复制代码 代码如下: <script language="javascript"> function addrows(){ var len = optionlist.rows.length; //得到table的行数 var obj = optionlist.insertRow(len);//在最后一行插入 /**插入第一列**/ obj.insertCell(0); obj.cells(0).innerHTML="选项" +

随机推荐