首页 > 编程知识 正文

servlet的概念,简述servlet

时间:2023-05-04 18:18:40 阅读:27778 作者:2967

转载自http://blog.csdn.net/iAm333

我以前在开源中国看了报道《初学 Java Web 开发,请远离各种框架,从 Servlet 开发》,觉得很好。 一想到自己至今为止被各种各样的框架束缚着,就很不好意思。 于是,我看了孙鑫的《Servlet/JSP深入详解:基于Tomcat的Web开发》、欢乐牛排的《JSPServlet学习笔记(第二版)》、网上其他相关资料,把自己的理解整理如下。

Web技术随着网络技术的发展,基于HTTP和HTML的web APP应用迅速增长。 初始web APP应用主要用于浏览静态页面(如新闻),用户通过HTTP协议请求服务器上的静态页面,服务器上的web服务器软件在收到请求后,读取URI标记的资源并发送消息

但是,随着时间的推移,用户不满足于只浏览静态页面。 用户需要一些交互操作才能获得动态结果。 基于HTTP协议实现服务端软件的扩展太复杂了,因此需要一些扩展机制来实现用户期望的功能。 最初使用的Web服务器扩展机制是CGI(commongatewayinterface )。 在这种方法中,用户单击链接或输入网址访问CGI程序,web服务器接收到请求后,运行该CGI程序处理用户请求,并将处理结果返回给web服务器,然后返回web服务器

CGI程序在一定程度上解决了用户的需求。 但是,存在CGI程序编制困难、响应时间长、用过程执行性能受到限制等缺点。 因此,1997年,sun公司宣布servlet技术为java阵营的CGI解决方案。

servlet和servlet容器Java servlet (Java服务器applet )是在由servlet容器管理的服务器端运行的基于Java技术的Web组件,用于生成动态内容。 servlet是与平台无关的Java类,用于创建servlet。 实际上,我们将根据servlet的规范创建Java类。 servlet编译为平台独立的字节码,可以动态加载到支持Java技术的Web服务器上并运行。

servlet容器也称为servlet引擎,是在发送的请求和响应上提供网络服务、解码基于MIME的请求以及格式化基于MIME的响应的Web服务器或APP应用服务器的一部分。 servlet没有main方法,不能独立运行。 servlet必须部署在servlet容器中,该容器实例化并调用在servlet的整个生命周期中包含和管理servlet的servlet方法。 引入JSP技术后,管理和运行servlet JSP的容器也称为Web容器。

(注:常用MIME类型:文本/html、应用程序/pdf、视频/QuickTime、应用程序/Java、图像/JPEG、应用程序/

有了servlet后,用户可以单击链接或直接在浏览器地址栏中输入URL来访问servlet。 Web服务器收到此请求后,会将请求传递给servlet容器,而不是直接传递给servlet。 servlet容器实例化servlet,调用servlet的特定方法处理请求并生成响应。 此响应从servlet容器返回到Web服务器,Web服务器包装此响应并将其作为HTTP响应发送到Web浏览器。

servlet容器可以提供什么? 我知道servlet容器需要管理和运行servlet,但为什么要这样做呢? 使用servlet容器的理由如下。

通信支持:利用容器提供的方法,您可以轻松地与servlet和web服务器交互,而无需创建服务器套接字、监听端口或创建流。 因为容器知道自己和web服务器之间的协议,所以servlet不需要担心web服务器(如Apache )和自己的web代码之间的API,而只需要考虑如何在servlet中实现业务逻辑(如处理订单)。

生命周期管理: servlet容器负责加载类、实例化和初始化servlet、调用servlet方法以及垃圾回收。 有了servlet容器,就不需要过多地考虑资源管理。

多线程支持:容器会为每个收到的servlet请求自动创建新的java线程。 如果servlet已针对用户请求运行相应的http服务方法,则此线程将终止。 这并不是说不需要考虑线程的安全性,实际上会出现同步问题,但可以减少很多工作。

声明安全性:使用servlet容器,可以使用xml部署描述文件设置和修改安全性,而无需在servlet类的代码中编写硬代码。

JSP支持: servlet容器将JSP代码翻译为真正的java代码。

与CGI程序相比,servlet具有以下优点:

servlet是一种运行单实例线程的方法,每个请求都在独立线程上运行,您可以

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

根据Servlet容器工作模式的不同,可以将Servlet容器分为以下三类:

1)独立的Servlet容器

当我们使用基于Java技术的Web服务器时,Servlet容器作为构成Web服务器的一部分而存在。然而大多数的Web服务器并非基于Java,因此,就有了下面两种Servlet容器的工作模式。

2)进程内的Servlet容器

Servlet容器由Web服务器插件和Java容器两部分的实现组成。Web服务器插件在某个Web服务器内部地址空间中打开一个 JVM(Java虚拟机),使得Java容器可以在此JVM中加载并运行Servlet。如有客户端调用Servlet的请求到来,插件取得对此请求的控 制并将它传递(使用JNI技术)给Java容器,然后由Java容器将此请求交由Servlet进行处理。进程内的Servlet容器对于单进程、多线程 的服务器非常适合,提供了较高的运行速度,但伸缩性有所不足。

3)进程外的Servlet容器

Servlet容器运行于Web服务器之外的地址空间,它也是由Web服务器插件和Java容器两部分的实现组成的。Web服务器插件和Java容 器(在外部JVM中运行)使用IPC机制(通常是TCP/IP)进行通信。当一个调用Servlet的请求到达时,插件取得对此请求的控制并将其传递(使 用IPC机制)给Java容器。进程外Servlet容器对客户请求的响应速度不如进程内的Servlet容器,但进程外容器具有更好的伸缩性和稳定性。

Tomcat

学习Servlet技术,就需要有一个Servlet运行环境,也就是需要有一个Servlet容器,本文用的是Tomcat。

Tomcat是一个免费的开放源代码的Servlet容器,它是Apache软件基金会(Apache Software Foundation)的一个顶级项目,由Apache、Sun和其他一些公司及个人共同开发而成。由于有了Sun的参与和支持,最新的Servlet和 JSP规范总是能在Tomcat中得到体现,Tomcat 6支持最新的Servlet 2.5和JSP 2.1规范。因为Tomcat技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱,并得到了部分软件开发商的认可,成为目前比较流行的Web服 务器。

Tomcat和IIS、Apache等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的 Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache,我们可以将Apache和Tomcat集成在 一起使用,Apache作为HTTP Web服务器,Tomcat作为Web容器。

Tomcat服务器接受客户请求并做出响应的过程如下:

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

Tomcat的体系结构

Tomcat服务器是由一系列可配置的组件构成的,其中核心组件是Catalina Servlet容器,它是所有其他Tomcat组件的顶层容器。我们可以通过查看Tomcat安装文件夹下的conf文件夹中的server.xml文件 来了解Tomcat各组件之间的层次关系。由于server.xml注释太多,特简化如下:

<?xml version='1.0' encoding='utf-8'?> <Server port="8005" shutdown="SHUTDOWN"> <Service name="Catalina"> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> <Engine name="Catalina" defaultHost="localhost"> <Host name="localhost"> <Context path="" docBase="WORKDIR" reloadable="true"/> </Host> </Engine> </Service> </Server>

其中WORKDIR为你想要导入的项目路径。我们下面简单介绍一下各组件在Tomcat服务器中的作用。
(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)提供了重要的附加功能。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。