1.1.1 Web技术的发展
随着Internet技术的广泛使用,Web技术已经广泛应用于Internet上,早期的Web应用全部是静态的HTML页面,用于将一些文本信息呈现给浏览者,但这些信息是固定写在HTML页面里的,该页面不具备与用户交互的能力,没有动态显示的功能。
很自然地,人们希望Web应用里应该包含一些能动态执行的页面,最早的CGI(通用网关接口)技术满足了该要求,CGI技术使得Web应用可以与客户端浏览器交互,不再需要使用静态的HTML页面。CGI技术可以从数据库读取信息,将这些信息呈现给用户;还可以获取用户的请求参数,并将这些参数保存到数据库里。
CGI技术开启了动态Web应用的时代,给了这种技术无限的可能性。但CGI技术存在很多缺点,其中最大的缺点就是开发动态Web 应用难度非常大,而且在性能等各方面也存在限制。到1997年时,随着Java语言的广泛使用,Servlet技术迅速成为动态Web应用的主要开发技术。相比传统的CGI应用而言,Servlet具有如下优势。
Servlet是基于Java语言创建的,而Java语言则内建了多线程支持,这一点大大提高了动态Web应用的性能。
Servlet应用可以充分利用Java语言的优势,例如JDBC(Java DataBase Connection)等。同时,Java语言提供了丰富的类库,可以大大简化Servlet的开发。
除此之外,Servlet运行在Web服务器中,由Web服务器去负责管理Servlet的实例化,并对客户端提供多线程、网络通信等功能,这都保证了Servlet有更好的稳定性和性能。
Servlet在Web应用中被映射成一个URL(统一资源定位符),该URL可以被客户端浏览器请求,当用户向指定URL对应的Servlet发送请求时,该请求被Web服务器接收到,该Web服务器负责处理多线程、网络通信等功能,而Servlet的内容则决定了服务器对客户端的响应内容。
图1.1显示了Servlet的响应流程。
图1.1 Servlet的响应流程
正如图1.1所显示的,浏览器向Web服务器内指定的Servlet发送请求,Web服务器根据Servlet生成对客户端的响应。
实际上,这是后来所有的动态Web编程技术所使用的模型,这种模型都需要一个动态的程序,或者一个动态页面,当客户端向该动态程序或动态页面发送请求时,Web 服务器根据该动态程序来生成对客户端的响应。
1998年,微软发布了ASP 2.0。它是Windows NT 4 Option Pack的一部分,作为IIS 4.0的外接式附件。它与ASP 1.0的主要区别在于它的外部组件是可以初始化的,这样,在ASP程序内部的所有组件都有了独立的内存空间,并可以进行事务处理。这标志着ASP技术开始真正作为动态Web编程技术。
当 ASP 技术在世界上广泛流行时,人们很快感受到这种简单的技术的魅力:ASP 使用VBScript 作为脚本语言,它的语法简单,开发效率非常高。而且,世界上已经有了非常多的VB程序员,这些VB程序员可以很轻易地过渡成ASP程序员——因此,ASP技术马上成为应用最广泛的动态Web开发技术。
随后,由Sun带领的Java阵营,立即发布了JSP标准,从某种程度上来看,JSP是Java阵营为了对抗ASP推出的一种动态Web编程技术。
ASP和JSP 名称上如此相似,但它们的运行机制存在一些差别,这主要是因为VBScript是一种脚本语言,无须编译,而JSP使用Java作为脚本语句——但Java从来就不是解释型的脚本语言,因此JSP页面并不能立即执行。因此,JSP必须编译成Servlet,这就是说,JSP的实质还是Servlet。不过,书写JSP比书写Servlet要简单得多。
JSP的运行机理如图1.2所示。
图1.2 JSP的运行机理
对比图1.1和图1.2,不难发现不论是Servlet动态Web技术,还是JSP动态Web技术,它们的实质完全一样。可以这样理解:JSP是一种更简单的Servlet技术,这也是JSP技术出现的意义——作为一种和ASP对抗的技术,简单就是JSP的最大优势。
提示:
实际上我们编写的JSP页面并不能运行,甚至不能被其他程序调用,读者可以把JSP页面文件理解成“草稿文件”,这份JSP“草稿文件”体现了开发者想完成的工作,而Web服务器会根据该JSP“草稿文件”来生成对应的Servlet。
随着实际Web应用的使用越来越广泛,Web应用的规模也越来越大,开发人员发现动态Web 应用的维护成本也越来越大,即使只需要修改该页面的一个简单按钮文本,或者一段静态的文本内容,也不得不打开混杂的动态脚本的页面源文件进行修改——这是一种很大的风险,完全有可能引入新的错误。
这时候,人们意识到:使用单纯的ASP或者JSP页面充当过多角色是相当糟糕的做法,这对于后期的维护相当不利,开发人员开始尝试在Web开发中引入MVC模式。
随后就是Java阵营发布了一套完整的企业开发规范:J2EE(现在已经更名为Java EE),紧跟着微软也发布了ASP.NET技术,它们都采用一种优秀的分层思想,力图解决Web应用维护困难的问题。