《(2020年)企业发展战略创建Web应用的技术发展过程》由会员分享,可在线阅读,更多相关《(2020年)企业发展战略创建Web应用的技术发展过程(8页珍藏版)》请在金锄头文库上搜索。
1、111第第 章章导读初识JSP: Web应用开发介绍: CGI、Servlet创建动态页面: JSP概述: JSP与ASP、PHP类似技术比较: JSP的优点JSP是Java Server Pages的缩写,是由Sun Microsystems公司倡导,许多公司参与一起建立的一种动态网页技术标准,用于辅助对Web请求的处理。JSP是建立在Java Servlets模型之上的表达层技术,允许将静态HTML内容与服务器端脚本混合起来生成动态输出。在每天浏览的网站中,可能就有很多是使用JSP对数据进行格式化和显示的。JSP基于Java技术,由类似于HTML的标记、JSP标记(tag)和Java代码片
2、组成,可用来创建跨平台和跨Web服务器的动态网站。本章将让读者初步认识JSP,了解基于Java的服务器逻辑处理请求的发展过程、什么是JSP及其与Servlet的关系,并阐述JSP与ASP、PHP等类似技术的比较,JSP的优势等。1.1 创建Web应用的技术发展过程在讲解本章内容之前,先了解一下使用一个浏览器去访问一个网站时,后台所会发生的情况及网站是如何实现请求和响应的。图1.1给读者展示了一个浏览器访问一个Web服务器的整个过程。(1)用户在浏览器上(这里以Microsoft Internet Explorer浏览为例)输入网站的URL地址,这个地址告诉浏览器要和网络中的哪台主机进行联系。一
3、般输入的是主机的域名(例如),域名唯一对应一个IP地址,一个IP地址又唯一识别一台联网的主机。(2)浏览器寻找到指定的主机之后,向Web服务器发出请求。(3)Web服务器接收到请求并作出相应的分析,然后从存储器中获取一个采用HTML编码的Web页面。Web服务器一般和HTML文件放置在同一个主机上。(4)服务器把取出的Web页面返回给发出请求的浏览器作为响应。(5)浏览器接收到相应的Web页面之后,在显示屏上向用户显示这个页面。图1.1 浏览器访问Web过程浏览器与Web服务器之间是通过因特网进行会话的,而这种会话是要通过一种称为HTTP(Hypertext Transfer Protocol
4、,超文本传输协议)的标准网络协议完成的。HTTP是一个请求/响应协议。在这个协议的基础上,Web服务器才能和浏览器通过Web交换数据。HTTP又是建立在TCP/IP协议基础之上的,而TCP/IP则是将因特网中所有计算机连接起来的一个协议组。这里并不需要读者对HTTP协议以及TCP/IP知识有太多的了解,但要求读者对浏览器发出请求以及服务器如何发出响应的机制和原理有一定的了解,这会对读者了解JSP有所帮助。1.1.1 传统Web服务器模式的不足传统的Web应用只提供有限的静态Web页面,每个Web页面的内容是保持不变的。如果网站需要提供更多的信息,就只能重新编写HTML页面并提供链接。传统Web
5、服务器模式存在如下不足:q 不能提供及时的信息。q 当需要添加新的信息时,必须重新编写HTML文件。q 由于HTML页面是静态的,并不能根据用户的需求提供不同的信息(包括显示格式和内容),不能满足多样性的需求。正因为静态页面存在着这么多的不足,因特网软件工程人员很快就转向了CGI(Cammon Geteway Interface,公共网关接口),希望CGI能提供动态生成功能。1.1.2 CGI实现动态生成HTMLCGI是实现在服务器端执行程序的一种方法。运行程序输出的是HTML页面,然后Web服务器再把这个静态页面返回给浏览器作为请求的响应。这样的模式实现了动态生成页面的效果。具体的CGI操作
6、方式如图1.2所示。图1.2 CGI的操作过程和图1.1所示的过程一样,用户需要在浏览器中输入URL地址(其实更多情况是用户单击HTML页面上的一个超链接),例如http:/ 需要为每个请求启动一个操作CGI程序的系统进程。如果请求非常频繁,这会带来很大的开销。q 需要为每个请求加载和运行一个CGI程序,这也将带来很大的开销。q 需要重复编写处理网络协议的代码及进行编码,这些工作都是非常耗时的。前面已经介绍过了Java语言可以用来编写CGI程序。但遗憾的是,使用Java编写的CGI程序执行效率更加低下。这是因为要执行一个Java编写的CGI程序,除了首先需要启动一个系统进程之外,还要在进程中启
7、动一个JVM(Java Virtual Machine,Java虚拟机),然后才能在JVM中执行Java CGI程序(读者应该对Java程序的运行机制有所了解)。为了解决CGI所留下来的问题,产生了Servlet。在1.1.3小节将重点介绍Servlet的基本原理。1.1.3 Servlet改进的CGI由前面的介绍可以知道,使用Java编写的CGI程序正是由于需要为每个请求都要启动一个系统进程及JVM,这大大降低了执行效率。如果能有办法取消这些开销,即只需要启动一个操作系统进程及一个JVM映像,基于Java的CGI就能得到很好的改善。Servlet正是基于这样的想法才产生的。另外,可知Java
8、可以在运行的时候动态地进行加载,所以可以利用这样的功能加载新的Java代码来处理新的请求。这样就可以只启动一次服务器进程,而且只需要加载一次JVM,之后这个JVM再加载另外的类。基于这样的思想而出现的Servlet执行效率就高得多了。和传统的CGI程序相比,Servlet有如下几个优点:q 只需要启动一个操作系统进程以及加载一个JVM,大大降低了系统的开销。q 如果多个请求需要做同样处理的时候,这时只需要加载一个类,这也大大降低了开销。q 所有动态加载的类可以实现对网络协议及请求解码的代码共享,大大降低了工作量。q Servlet能够直接和Web服务器交互,而普通的CGI程序不能。Servle
9、t还能够在各个程序之间共享数据,使得数据库连接池之类的功能很容易实现。Sun公司在20世纪90年代末就发布了基于Servlet的Web服务器。为了确保加载的各个类之间不起冲突,已经建立了一个称为Java Servlet API(应用编程接口)的编码标准。现在基本上所有的服务器都遵循这个编码标准,所以Servlet有很好的移植性。现在的Web服务器(例如Tomcat)已经集成了Servlet容器。Servlet容器负责管理加载、卸载、重新加载和执行Servlet代码等操作。下面是一个比较典型的Servlet Java源代码:public class HelloWorldTest extends
10、HttpServlet public void doTest(HttpServletRequest request,HttpServletResponse reponse) throws IOException,ServletException String msg = 登录成功; response.setContentType(text/html); PrintWriter out = response.getWriter(); out.println(); out.println(); out.println(JSP 2.0 Test); out.println(); out.printl
11、n(); out.println(msg); out.println(); out.println(); 从这段代码可以看到Servlet重复使用了PrintWriter.println()方法来输出相应的HTML页面,以达到动态生成HTML页面的效果。虽然Servlet改变了传统CGI程序的缺点,但是它也有不足的地方:Servlet可以建立动态生成的网页,网页中可以包含从服务器端的Java对象所获得的数据。但是Servlet生成网页的方法是在Java类中嵌入HTML标签和表达式。也就是说对HTML做一个小小的改动时,都需要修改和重新编译Servlet源文件,然后重新部署到Servlet容器当
12、中。当设计HTML页面和编写Servlet代码的不是同一个人时,就会使得修改Servlet变得非常麻烦。JSP的引入就是要解决以上Servlet所存在的问题。在1.2节将重点介绍JSP。1.2 JSP简介Java Server Pages(JSP)是一种实现普通静态HTML和动态HTML混合编码技术,它是Servlet API的一个扩展。由于JSP页面在编译成Servlet之前也是可以使用的,所以它具有Servlet的所有优点,包括访问Java API。又由于JSP是嵌入到Servlet中关于应用程序的一般表达代码,所以可以把它看成一种“彻底”的Servlet。访问一个JSP网站的过程如图1.
13、3所示。图1.3 JSP页面访问示意图Web容器必须包含JSP引擎,它负责动态地对JSP文件进行检测和编译。1.2.1 JSP的优点JSP技术的设计目的是使得构造基于Web的应用程序更加容易和快捷,而这些应用程序能够与各种Web服务器、应用服务器、浏览器和开发工具很好地共同工作。JSP网页可以非常容易地与静态模板结合,包括HTML或XML片段,以及生成动态内容的代码。它比以上讲的Servlet要更加优越。具体而言,JSP有以下几个优点:q JSP提供一种模块机制,可以在HTML页面中嵌入基于Java的逻辑代码。q 使用JSP时,再也没有必要编写和编译用Java语言写的任何代码。而且对JSP进行修改会很快看到效果,这是因为JSP容器(或者称JSP引擎)会自动检测和重新编译JSP。q JSP的使用大大缩短了服务器端基于Java的CGI开发周期,实现了快速开发的目的。q 由于JSP标记是内嵌在HTML页面中的,所以完全可以先让Web页面设计者来设计页面模板。