JSP 概览_第1页
JSP 概览_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

JSP 概览 JSP是一种用于Web应用程序开发的最新的Java技术,它是建立在servlet 技术基础之上的。尽管servlet 的功能在很多方面来说都很强大,但它通常属于程序员专有的领域。在本章中,我们将介绍JSP 技术可以解决哪些问题,对JSP 页面的剖析,servlet 和JSP 之间的关系,以及服务器处理JSP 页面的方式等。在任何Web 应用程序中,都有一个服务器上的程序来处理请求并产生应答。对于简单的单页式应用程序,例如一个在线公告牌,你并不需要过多地考虑代码的设计,而且所有的逻辑都可以堆在一个程序中。但当应用程序变得越来越大时(如跨越了多个页面,使用数据库之类的外部资源,并为更多类型的客户提供了更多的选项和支持),情况就完全不一样了。站点的设计方式直接关系到它适应新需求的能力以及继续改进的能力。令人高兴的是,JSP 技术可以作为所有类型Web 应用程序的一个重要部分,从最简单的到最复杂的应用程序都是如此。因此,本章还将介绍推荐使用的Web应用程序设计模型的基本概念,以及JSP和其他Java 技术在这个模型中所扮演的不同角色。servlet 所带来的问题在许多基于Java servlet 的应用程序中,处理请求和产生应答是由同一个servlet 类来执行的。例3-1 显示了servlet 通常的外观:例3-1:典型的servlet 类public class OrderServlet extends HttpServlet public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException response.setContentType(text/html);PrintWriter out = response.getWriter();if (isOrderInfoValid(request) saveOrderInfo(request);out.println();out.println( );out.println( Order Confirmation);out.println( );out.println( );out.println( Order Confirmation);renderOrderInfo(request);out.println( );out.println();.如果你不是程序员,也不用为这些代码中的细节担心。关键的一点是,servlet 包含了请求的处理以及商务逻辑(通过像isOrderInfoValid()和saveOrderInfo()这样的方法来实现),并且产生了应答的HTML代码,这些代码是通过调用println()函数而直接嵌入在servlet代码中的。一个更加结构化的servlet应用程序可以将处理过程分成各个不同的部分,封装在各种可重用的工具类中,也可能使用一个单独的类库来产生应答中的实际的HTML元素。尽管如此,纯servlet 的方案还是存在以下一些问题: 开发和维护应用程序的所有部分需要有深厚的Java编程知识,因为处理代码和HTML 元素是交织在一起的。 改变应用程序的外观和风格,或者加入对某种新类型客户机(如WML客户机)的支持时,都需要更新并重新编译servlet 代码。 很难利用网页开发工具的优势来设计应用程序界面。如果使用这些工具来开发网页布局的话,生成的HTML 代码必须被手工嵌入到servlet 代码中,这个过程既耗时又容易出错,而且极度枯燥乏味。引入JSP 可以将请求处理和商务逻辑与外观呈现分离开来,如图3-1 所示。此时并不是将HTML嵌入到代码中,而是将所有静态HTML放到JSP 页面中,就像一个通常的网页一样,然后加入一些JSP 元素来产生页面的动态部分。对请求的处理工作可以留给servlet 程序员来做,商务逻辑则可以由JavaBeans 和EJB 组件来处理。图3-1:将请求处理、商务逻辑和外观呈现分离正如前面提到的那样,将请求处理和商务逻辑与外观呈现分开后,允许我们将开发任务分派给拥有不同技术的人们。Java 程序员负责实现请求处理和商务逻辑部分,网页设计师则实现用户界面,而且这两组人员都可以使用手边最好用的工具软件来完成任务。其结果就是我们得到了更为多产的开发过程。这也使得我们能够单独改变应用程序的某个部分,例如修改商务规则,而不必触及用户界面。即便对于一名独立工作且没有编程技术的网页设计师来说,这个模型也有着明显的优点。网页设计师可以使用JSP标准行为和JSTL库以及开源组织或商业公司提供的Java 组件,来开发拥有许多动态特性的Web 应用程序。JSP 处理过程正如Web 服务器需要一个servlet 容器来提供对servlet 的接口一样,服务器同样也需要一个JSP 容器来处理JSP 页面。JSP 容器负责解释对JSP 页面的请求。为了处理页面中所有的JSP 元素,容器首先要把JSP 页面转化成servlet称为“JSP 页面实现类(JSP Page implementation class)”。这种转换是非常直接的,所有的模板文本都被转换成与例3-1 中所示的手工编码的servlet相类似的println()语句,而且所有的JSP 元素都被转换成实现相应动态行为的Java 代码。然后容器再编译servlet类。将JSP 页面转换为servlet 并编译该servlet,这就是翻译阶段(translation phase)。当第一次收到对某个页面的请求时,JSP容器会自动开始对这个页面的翻译阶段。当然,翻译阶段需要一点时间来完成,所以用户会注意到当某个JSP 页面被第一次请求时,会有一点延迟。翻译阶段也可以被显式地启动,这称为JSP 页面的预编译(precompilation)。对JSP 页面进行预编译可以避免延迟问题。在第十六章中将详细介绍预编译。JSP容器还负责调用JSP页面实现类(生成的servlet),以处理每个请求并生成应答。这个阶段被称为“请求处理阶段(request processing phase)”。这两个阶段如图3-3 所示。图3-2:JSP 页面翻译阶段和请求处理阶段只要JSP 页面保持不变,任何后续的请求都会直接进入请求处理阶段(也就是说,容器仅执行类文件)。当JSP 页面被修改后,后续请求将再次通过翻译阶段,然后才进入请求处理阶段。JSP 容器通常是作为一种servlet 来实现的,并被配置为处理所有对页面的请求。事实上,servlet 容器和JSP 容器这两种容器通常都组合在一个名为web container 的软件包中。所以,通过这种方式,JSP 页面实际上是编写servlet 的另外一种方式,而你却不必是一名Java 编程高手。而且,除了翻译阶段,JSP 页面的处理过程与常见的servlet完全相同:载入一次后多次重复执行,直到服务器关闭为止。作为一种自动生成的servlet,JSP 页面继承了第二章中所讲的servlet 的所有优点:平台和厂商独立性,集成化,高效性,可缩放性,健壮性和安全性。JSP 元素JSP 有三种类型的元素:指令元素(directive element)、行为元素(action element)和脚本元素(scripting elment)。指令元素表3-1 所示的指令元素用于指定关于页面本身的一些信息,这些信息在各个页面请求间保持不变。这些信息内容包括:是否需要会话跟踪,对缓冲的要求,以及用于报告错误的页面名称,等等。表3-1:指令元素JavaBeans 组件JSP 元素,例如行为元素和脚本元素,经常用来与JavaBeans 一起使用。简单地说,一个JavaBeans 组件就是一个用特定的编码约定编译的Java 类。JavaBeans 组件通常用作容纳描述应用程序中某类实体(例如客户或订单)的信息的容器。使用MVC 设计JSP 应用程序JSP 技术可以应用于各种事务,从最简单的Web 应用程序,例如一个在线电话簿或员工休假安排,到功能齐全的企业级应用程序,例如人力资源应用程序或复杂的在线购物站点。当然,在各种应用中,JSP 占的比例大小不一。在这一节中,我们将介绍一种同时适用于简单应用程序和复杂应用程序的设计模型, 称为MVC(MODEL-View-Controller,模型视图控制器)。MVC 首先是由Xerox(施乐)公司在80 年代后期发表的一系列论文中提出的。使用MVC 的关键点是将逻辑分成三个各自独立的单位:模型、视图和控制器。在一个服务器应用程序中,我们通常将应用程序分成以下三部分:商务逻辑、外观呈现和请求处理。术语“商务逻辑(business logic)”指的是对应用程序的数据进行处理的规则,例如客户、产品、订单信息等数据。“外观呈现(presentation)”指的是应用程序数据是如何展示在用户面前的,例如位置、字体和尺寸等。最后,“请求处理(request processing)”是指将商务逻辑和外观呈现联系起来的部分。如果用MVC的术语来说,模型对应着商务逻辑和数据,视图对应外观呈现,控制器则对应请求处理。为什么要对JSP 使用这种设计模型?答案主要在于前两个元素。应用程序的数据结构和逻辑(也就是模型)通常是一个应用程序中最稳定的部分,但是这些数据的表现形式(也就是视图)却是经常改变的。只要看看那些站点为了跟上最新的网页设计时尚而不断更新门面的过程就知道了。然而,它们所表现的数据却是保持不变的。另一个说明为什么要把商务逻辑和外观呈现分开的常见示例是,你可能需要用不同的语言来表现数据,或者向内部和外部用户提供不同的数据子集。通过新型的设备来访问数据,例如使用移动电话和PDA(Personal Digital Assistant,个人数字助理)是最新的趋势。每种类型的客户都要求有自己的表现格式。因此,顺理成章,将商务逻辑和外观呈现分开可以更容易地根据需求的改变来改进应用程序,并在不触动商务逻辑的情况下开发新的外观界面。本书中的绝大部分示例都使用了MVC模型。在第二部分中,JSP页面既被用作控

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论