- JSP应用与开发技术(第3版)
- 马建红 李学相 韩颖 王瑞娟 张晗
- 2706字
- 2020-08-28 20:33:34
1.5 JSP与相关技术
JSP是由Sun Microsystems公司倡导的、许多公司参与建立的一种动态网页技术标准。JSP技术用Java语言作为脚本语言,JSP网页为整个服务器端的Java库单元提供了一个接口来服务于HTTP的应用程序。
在传统的网页HTML文件(*.htm,*.html)中加入Java程序片段(Scriptlet)和JSP标记(Tag),就构成了JSP网页(*.jsp)。Web服务器在遇到访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页及发送E-mail等,这就是建立动态网站所需要的功能。所有程序操作都在服务器端执行,网络上传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无Plugin、无ActiveX、无Java Applet,甚至无Frame。
1.5.1 什么是JSP
JSP是基于Java的技术,用于创建可支持跨平台及Web服务器的动态网页。从构成情况来看,JSP页面代码一般由普通的HTML语句和特殊的基于Java语言的嵌入标记组成,所以它具有Web和Java功能的双重特性。
JSP 1.0规范是1999年9月推出的,当年12月又推出了1.1规范。此后JSP又经历了几个版本,本书介绍的技术基于JSP 2.0规范。
为了让读者对JSP技术有一个直观的认识,先来看一个非常简单的JSP页面及其运行效果。以下是HelloWorld.jsp的源代码。程序运行效果如图1-8所示。
图1-8 HelloWorld.jsp运行效果
JSP是一种动态网页技术标准,可以将网页中的动态部分和静态的HTML相分离。用户可以使用平常得心应手的工具并按照平常的方式来书写HTML语句。然后,将动态部分用特殊的标记嵌入即可,这些标记常常以“<%”开始并以“%>”结束。
同HTML及ASP等语言相比,JSP虽然在表现形式上同它们的差别并不大,但是它提供了一种更为简便、有效的动态网页编写手段。而且,由于JSP程序同Java语言有着天然的联系,所以在众多基于Web的架构中,都可以看到JSP程序。
由于JSP程序增强了Web页面程序的独立性、兼容性和可重用性,所以,与传统的ASP、PHP网络编程语言相比,它具有以下特点:
JSP的执行效率比较高。由于每个基于JSP的页面都被Java虚拟机事先解析成一个Servlet,服务器通过网络接收到来自客户端HTTP的请求后,Java虚拟机解析产生的Servlet将开启一个“线程”(Thread)来提供服务,并在服务处理结束后自动销毁这个线程,如图1-9所示,这样的处理方式将大大提高系统的利用率,并能有效地降低系统的负载。
图1-9 Web服务器使用Servlet提供服务的示意图
编写简单。由于JSP是一项基于Java语言和HTML元素的技术,所以只要熟悉Java和HTML的程序员都可以开发JSP。
跨平台。由于JSP运行在Java虚拟机之上,所以它可以借助于Java本身的跨平台能力,在任何支持Java的平台和操作系统上运行。
JSP可以嵌套在HTML或XML网页中。这样不仅可以降低程序员开发页面显示逻辑效果的工作量,更能提供一种比较轻便的方式来同其他Web程序交互。
1.5.2 JSP技术原理
JSP文件的执行方式是“编译式”,并非“解释式”,即在执行JSP页面时,是把JSP文件先翻译为Servlet形式的Java类型的字节码文件,然后通过Java虚拟机来运行。所以从本质上来讲,运行JSP文件最终还是要通过Java虚拟机,不过根据JSP技术的相关规范,JSP语言必须在某个构建于Java虚拟机之上的特殊环境中运行,这个特殊环境就是Servlet Container(通常被译为Servlet容器),而且,每个JSP页面在被系统调用之前,必须先被Servlet容器解析成一个Servlet文件。
图1-10显示了整个JSP的运行流程。每次Servlet容器接收到一个JSP请求时,都会遵循以下步骤。
图1-10 JSP运行流程
(1)Web容器接收JSP页面的访问请求时,它将把该访问请求交给JSP引擎去处理。每个JSP页面在第一次被访问时,JSP引擎先将它翻译成一个Servlet源程序,接着再把这个Servlet源程序编译成Servlet的class类文件,Servlet容器查询所需要加载的JSP文件是否已经被解析成Servlet文件,如果没有在Servlet容器里找到对应的Servlet文件,容器将根据JSP文件新创建一个Servlet文件。反之,如果在容器里有此Servlet文件,容器则比较两者的时间,如果JSP文件的时间要晚于Servlet文件,则说明此JSP文件已被重新修改过,需要容器重新生成Servlet文件,反之容器将使用原先的Servlet文件。
(2)Web容器编译好的Servlet文件被加载到Servlet容器中,执行定义在该JSP文件里的各项操作。
(3)Servlet容器生成响应结果,并返回给客户端。
(4)JSP文件结束运行。
从JSP的工作原理和运作流程上来看,JSP程序既能以Java语言的方式处理Web程序里的业务逻辑,又可以处理基于HTML协议的请求,它是集众多功能于一身的。
不过,在编写程序的过程中,不能过多地在JSP代码里混杂提供显示功能和提供业务逻辑的代码,而是要把JSP程序定位到“管理显示逻辑”的角色上。
当服务器第一次接收到对某个页面的请求时,JSP引擎就开始进行上述的处理,将被请求的JSP文件编译成Class文件。在后续对该页面再次进行请求时,若页面没有进行任何改动,服务器只需直接调用Class文件执行即可。所以当某个JSP页面第一次被请求时,会有一些延迟,而再次访问时会感觉快了很多。如果被请求的页面经过修改,服务器将会重新编译这个文件,然后执行。
1.5.3 JSP本质与Servlet
严格来说,JSP是一种集成技术,以Java平台为基础,提供一种简便的方式,让Java技术能够轻易运用于构建动态网页内容。
Java为了产生与用户互动的动态网页内容,开发出一种名为Servlet的应用技术。Servlet是一种纯粹以Java语言编写,符合标准规范的Java应用程序,在网站服务器运行的时候被加载,在客户端浏览器针对服务器提出内容要求时,作出动态响应。
尽管Servlet应用程序产生动态网页的功能相当强大,但是却不容易开发。JSP就是为了克服这个障碍而发展出来的一种服务器端网页技术,其本身是一个内容混杂HTML标签与Java语言的纯文本文件。当浏览器请求JSP网页时,文本文件在网站服务器被编译成为Servlet加载,然后产生动态的网页内容,如图1-11所示。
图1-11 Servlet执行过程
由于JSP本身被设计得非常容易学习与使用,因此Java动态网页技术得以快速发展并且被广泛应用,程序开发人员只需学习基础Java语法及相关的JSP对象,便可以轻松完成动态网页的创建与设计。
1.5.4 JSP与JavaBean
让JSP如此出色的原因,除了Servlet之外,另外一点便是其运用JavaBean的能力。JavaBean是一种组件技术,为Java应用程序提供一种极具灵活性的设计模型,它将程序依功能分开,包装成为一种称为JavaBean的程序组件,让其可以被外部JSP网页重复使用以提供所需的功能,同时还可以扩充JSP网页的功能,维持简洁易于维护的JSP网页程序代码。
使用JSP设计动态网页并不困难,然而当网站的复杂度开始增加时,用户在必须面对如何有效管理与切割程序内容等,以及在提供强大功能的同时,保有网页程序设计的灵活性与容易维护的程序代码等。
如图1-12所示,JavaBean用来包装网页程序逻辑及其相关功能,并且通过网页作引用,而网页本身则负责数据收集和内容展示。
图1-12 JavaBean流程
JavaBean本身是一种包含特定功能的Java程序组件,当一个JSP网页需要此项功能时,直接引用相关的JavaBean组件即可;而JavaBean最重要的概念在于将程序逻辑与创建网页界面的程序代码分开,网页只负责数据的收集及页面元素放置的处理,而JavaBean组件则是包含重要的程序逻辑运算。如此一来,JSP网页将更容易维护与建构,JavaBean同时也是建构商业级JSP网页程序最为重要的核心。