的一个扩展。事实上,JSP页面在处理请求之前都要编译成Servlet,所以它具有Servlet的所有优势,包括访问JavaAPI。简单地说,一个JSP页面就是包含了能够生成动态内容的可执行应用程序的HTML网页。也就是在传统的网页HTML文件(*.htm,.html)中加入Java程序片段(Scriptlet)和JSP标记(tag),就构成了JSP网页(*.jsp)。TAG绝大部分是以"<%"开始,以"%>"结束的[2]。
Web服务器在遇到访问JSP网页的请求时,先执行其中的程序片段,然后将执行结果以
HTML格式返回给客户。其中程序片段可以操作数据库、重新定向网页以及发送Email等,这是建立动态网站所需要的功能。在一个JSP文件第一次被请求时,JSP引擎先把该JSP文件转换成一个Java源文件,在转换时如果发现JSP文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息;如果转换成功,JSP引擎调用Java虚拟机的Javac程序把该Java源文件编译成相应的class文件,该class文件也就是一个Servlet程序:然后创建一个该Servlet的实例,提供服务响应用户的请求[3]。响应流程如图1-1所示。
图1-1 JSP的相应流程
1.1.2 JSP相对于其它动态语言的特性
互联网的发展对传统的Web技术提出了强有力的挑战,由于各种Web的内部逻辑复杂,安全性要求苛刻,传统的CGI技术(Common Gateway Interface通用网关接口)已不能适应要求。目前,构建网站的开发工具越来越集中在几种典型的技术上,如:ASP(Active Server Page,动态服务器网页)、PHP(Professional HypertextPreprocessor,超文本预处理器)及JSP。
(1) JSP与CGI相比
在早期,动态网页主要采用CGI技术,它是一个WWW服务器主机对外服务的标准接口。一个CGI接口的功能就是在超文本文件和服务器主机应用程序间传递信息。编写CGI程序的
常用语言有C/C++和Perl及Java等。
优点:CGI的跨平台性能极佳,几乎可以在任何操作系统上实现。
缺点:CGI的应用程序一般都是一个独立的可执行程序,和WWW服务器各自占据着不同的进程,一般一个CGI
程序只能处理一个用户请求。每一个用户请求,都会激活一个CGI进程,当用户请求数量非常多时,会大量挤占系统的资源如内存、CPU、时间等,造成效能低下。而JSP程序由JSP引擎执行,JSP引擎具有多线程响应的方式,并与HTTP服务器一起长驻内存,执行多个请求时,JSP的执行效率比CGI高。
(2) JSP与ASP相比
ASP是微软公司开发的一种动态网页技术,实际上是脚本加COM的组合,可以使用脚本语言
VBScript和JavaScript作为编程语言。一个ASP文件用脚本或COM来表示Web请求,服务器端的解释器负责解释执行这些脚本与COM,并且可以在ASP中去创建一个新的COM对象,同时再通过这些COM组件完成更多的工作。
缺点:ASP只能在微软的NT平台上运行,无法实现跨操作系统的应用,Windows本身的所有问题都会一成不变的累加到它的身上;运行效率不高;COM的开发较复杂。
JSP是基于Servlet以及整个Java体系的Web开发技术,具有真正的跨平台性,可以在任何服务器中运行,符合"Write once,run anywhere"原则,可以工作在Unix和Windows平台下。JSP可以利用JavaBean组件技术,而JavaBean其实是Java的一个类,比较容易实现。另外,在JSP中使用JavaBean可以将显示和业务逻辑处理完全分离开来,使模块开发、HTML及程序设计的工作分工非常明确,确保
工作的高效率。
(3) JSP与PHP相比
PHP是一个纯粹的Script翻译器,和JSP一样是运行于服务器端的嵌入式脚本语言,其语法借鉴了C、Java、Perl等语言,并结合自己的特性,使开发者能够快速开发动态页面。
优点:可以跨平台。
缺点:执行方式是解释执行,执行速