第三章:JSP (Java Server Pages)


(by huihoo.com tonyliu)

JSP技术是J2EE体系结构中的一个重要组成技术,它为开发人员提供了一个Server端框架,基于这个框架,开发人员可以综合使用HTML、XML、JAVA语言以及其他脚本语言,灵活、快速地创建动态网页内容。

JSP1.1规范扩展了Java Servlet API,目前绝大部分开发商都在其Web服务器和Servlet引擎产品中实现了对JSP的支持。

用JSP实现客户端和服务器端交互的基本流程如下图:



首先,用户在客户端(浏览器)发出的请求信息被存储在Request对象中并发送给Web服务器,JSP引擎(通常捆绑在Web服务器上)根据JSP文件的指示处理Request对象,或者根据实际需要将Request对象转发给由JSP文件所指定的其他的服务器端组件(如Servlet组件、JavaBean组件或EJB组件等)处理。处理结果则被以Response对象的方式返回给JSP引擎,JSP引擎和Web服务器根据Response对象最终生成JSP页面(JSP Pages),返回给客户端浏览器,这也是用户最终看到的内容。用于客户和服务器之间的通信协议最常用的是HTTP,此外也可以使用特定的私有协议。

在技术实现细节上,JSP的实现实际上借助了Servlet技术,系统在首次载入JSP时自动将其编译成内部的Servlet,JSP对Request对象和Response对象(以及其他隐含对象)的处理最终都是由其对应的Servlet来完成的。对于JSP和Servlet这两种相辅相成的技术,目前比较通用的运用手段是:决定显示页面内容的HTML置于JSP中;而决定显示逻辑和控制的Java代码则置于Servlet中,这种划分可以比较清晰地界定网页开发人员和应用程序开发人员的工作领域和技能领域。

相比较于传统的用于产生动态页面的技术,JSP技术具有很多先天的优势,以下分别予以简述:

与CGI的比较:

JSP能够在多次用户请求期间保持服务对象的状态(因为它能使用Servlet所具有的会话功能),而CGI难以用便捷高效的方法实现这一要求。 JSP通过产生出一个线程来处理用户的一个新的请求,响应时间快,效率高;而CGI则通常是依靠产生一个进程来处理用户的新请求,有时甚至还要启动其他的支持进程(如Perl解释器等),系统开销大,效率低。 JSP通常只需要完成一次系统载入和初始化过程,此后可以常驻内存,直至用户的应用结束。JSP可以运行在预先载入的Java虚拟机中,作为Web服务器的扩展。

与ASP的比较

JSP在技术上的主要竞争对手是Microsoft的ASP,两者在技术上很相似,都支持动态网页的创建、脚本代码和用于实现商业逻辑的组件等,也都提供和企业级应用程序框架的接口(分别是J2EE和Microsoft DNA),但总的来说,JSP在平台通用性、实现机制灵活性等方面具有一定优势。

JSP ASP
运行平台 所有主要的Web服务器平台 主要局限于Microsoft的Web平台
基础开发语言 Java JavaScript或者VBScript
使用组件 JSP Tags、JavaBeans以及Enterprise JavaBeans COM/DCOM
代码翻译 一次 每个事例(instance)一次


与其他Web服务器内置API的比较

许多Web服务器自身提供内置API来实现动态内容创建,如Microsoft IIS的ISAPI、Netscape web server 的NSAPI等,在实际中也有一定应用,但以上技术的一个主要缺点就是平台依赖性强,只能适用于特定平台和Web服务器,不具有可移植性。上述缺陷决定了它无法与JSP竞争。