ServletJSP深入详解--Servlet与Tomcat

1.1web技术的发展

早期使用的web服务器扩展机制是CGI,它允许用户调用web服务器上的CGI程序。CGI全称为Common Gateway Interface,即公共网关接口。用户访问CGI程序如图。缺点:程序编写困难,对用户请求的相应时间较长,以进程方式运行导致性能受限。

ServletJSP深入详解--Servlet与Tomcat_第1张图片

1997年,sun公司推出了Servlet技术,作为java阵营的CGI解决方案。作为对微软ASP技术的回应,sun公司于1998年推出了JSP技术,允许在html页面中嵌入Java脚本代码,从而实现动态网页功能。与ASP,JSP类似的服务器端页面编写技术还有PHP技术。

1.2Servlet与Servlet容器

Java Servlet(Java服务器小程序)是一个基于Java技术的Web组件,运行在服务器端,由Servlet容器所管理,用于生成动态的内容。Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。Servlet被编译为平台独立的字节码,可以被动态地加载到支持Java技术的Web服务器中运行。目前Servlet规范最新的版本是2.5。在上文中,出现了一个概念“Servlet容器”。那么什么是Servlet容器呢?Servlet容器有时候也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。Servlet不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用Servlet的方法,Servlet容器在Servlet的生命周期内包容和管理Servlet。在JSP技术推出后,管理和运行Servlet/JSP的容器也称为Web容器。在本书中,Servlet容器、JSP容器,以及Web容器是同义的。

用户通过单击某个链接或者直接在浏览器的地址栏中输入URL来访问Servlet,Web服务器接收到该请求后,并不是将请求直接交给Servlet,而是交给Servlet容器。Servlet容器实例化Servlet,调用Servlet的一个特定方法对请求进行处理,并产生一个响应。这个响应由Servlet容器返回给Web服务器,Web服务器包装这个响应,以HTTP响应的形式发送给Web浏览器。整个过程如下图。

ServletJSP深入详解--Servlet与Tomcat_第2张图片

与CGI程序相比,Servlet具有以下优势:

·Servlet是单实例多线程的运行方式,每个请求在一个独立的线程中运行,而提供服务的Servlet实例只有一个。
·Servlet具有可升级性,能响应更多的请求,因为Servlet容器使用一个线程而不是操作系统进程,而线程仅占用有限的系统资源。
·Servlet使用标准的API,被更多的Web服务器所支持。
·Servlet使用Java语言编写,因此拥有Java程序语言的所有优点,包括容易开发和平台独立性。
·Servlet可以访问Java平台丰富的类库,使得各种应用的开发更为容易。
·Servlet容器给Servlet提供额外的功能,如错误处理和安全。

1.3Servlet容器的分类

1)独立的Servlet容器

2)进程内的Servlet容器

3)进程外的Servlet容器X

1.4Tomcat简介

Tomcat是一个免费的开放源代码的Servlet容器,它是Apache软件基金会的一个顶级项目,由Apache,Sun和其他一些公司及个人共同开发而成。Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache,我们可以将Apache和Tomcat集成在一起使用,Apache作为HTTP Web服务器,Tomcat作为Web容器。(T6不再需要JDK的支持,只需要安装JRE即可)

ServletJSP深入详解--Servlet与Tomcat_第3张图片

① 客户端(通常都是浏览器)访问Web服务器,发送HTTP请求。
② Web服务器接收到请求后,传递给Servlet容器。
③ Servlet容器加载Servlet,产生Servlet实例后,向其传递表示请求和响应的对象。
④ Servlet实例使用请求对象得到客户端的请求信息,然后进行相应的处理。
⑤ Servlet实例将处理结果通过响应对象发送回客户端,容器负责确保响应正确送出,同时将控制返回给Web服务器。

ServletJSP深入详解--Servlet与Tomcat_第4张图片

Tomcat6 目录层次结构

ServletJSP深入详解--Servlet与Tomcat_第5张图片

Tomcat的目录结构及用途

从表中可以看到,lib目录下存放的JAR文件可以被所有的Web应用程序所访问,如果多个Web应用程序需要访问相同的JAR文件,那么可以将这些JAR文件放到Tomcat的lib目录下。此外,对于后面将要介绍的Java Web应用程序,在它的WEB-INF目录下,也可以建立lib子目录,在lib子目录下可以存放各种JAR文件,这些JAR文件只能被当前Web应用程序所访问。打开浏览器,在地址栏中输入http://localhost:8080/(localhost表示本地机器,8080是Tomcat默认监听的端口号),将出现Tomcat的默认主页。

1.5Tomcat的体系结构

ServletJSP深入详解--Servlet与Tomcat_第6张图片

(1)Server
Server表示整个的Catalina Servlet容器。Tomcat提供了Server接口的一个默认实现,这通常不需要用户自己去实现。在Server容器中,可以包含一个或多个Service组件。
(2)Service
Service是存活在Server内部的中间组件,它将一个或多个连接器(Connector)组件绑定到一个单独的引擎(Engine)上。在Server中,可以包含一个或多个Service组件。Service也很少由用户定制,Tomcat提供了Service接口的默认实现,而这种实现既简单又能满足应用。
(3)Connector
连接器(Connector)处理与客户端的通信,它负责接收客户请求,以及向客户返回响应结果。在Tomcat中,有多个连接器可以使用。
(4)Engine
在Tomcat中,每个Service只能包含一个Servlet引擎(Engine)。引擎表示一个特定的Service的请求处理流水线。作为一个Service可以有多个连接器,引擎从连接器接收和处理所有的请求,将响应返回给适合的连接器,通过连接器传输给用户。用户允许通过实现Engine接口提供自定义的引擎,但通常不需要这么做。
(5)Host
Host表示一个虚拟主机,一个引擎可以包含多个Host。用户通常不需要创建自定义的Host,因为Tomcat给出的Host接口的实现(类StandardHost)提供了重要的附加功能。
(6)Context
一个Context表示了一个Web应用程序,运行在特定的虚拟主机中。什么是Web应用程序呢?在Sun公司发布的Java Servlet规范中,对Web应用程序做出了如下的定义:“一个Web应用程序是由一组Servlet、HTML页面、类,以及其他的资源组成的运行在Web服务器上的完整的应用程序。它可以在多个供应商提供的实现了Servlet规范的Web容器中运行”。一个Host可以包含多个Context(代表Web应用程序),每一个Context都有一个唯一的路径。用户通常不需要创建自定义的Context,因为Tomcat给出的Context接口的实现(类StandardContext)提供了重要的附加功能。

ServletJSP深入详解--Servlet与Tomcat_第7张图片

我们可以在conf目录下的server.xml文件中对这些组件进行配置,读者打开server.xml文件,就可以看到元素名和元素之间的嵌套关系,与Tomcat服务器的组件是一一对应的,server.xml文件的根元素就是。关于server.xml配置文件中的各元素及其属性的含义,请参看附录C。
在Tomcat中,提供了各组件的接口及其实现类,如果你要替换Tomcat中的某个组件,只需要根据该组件的接口或类的说明,重写该组件,并进行配置即可。图是Tomcat各组件的类图。

ServletJSP深入详解--Servlet与Tomcat_第8张图片

 

你可能感兴趣的:(ServletJSP深入详解--Servlet与Tomcat)