美文网首页
理解Servlet、Servlet容器

理解Servlet、Servlet容器

作者: knowlege_picker | 来源:发表于2020-08-05 23:04 被阅读0次

    本文参考总结自

    理解Servlet和Servlet容器、Web服务器等概念

    CGI是什么

    CGI

    早期的Web服务器,只能响应浏览器发来的HTTP静态资源的请求,并将存储在服务器中的静态资源返回给浏览器。随着Web技术的发展,逐渐出现了动态技术,但是Web服务器并不能够直接运行动态脚本,为了解决Web服务器与外部应用程序(CGI程序)之间数据互通,于是出现了CGI(Common Gateway Interface)通用网关接口。简单理解,可以认为CGI是Web服务器和运行其上的应用程序进行“交流”的一种约定。

    在,Servlet出现之前,处理动态Web的方式是使用CGI程序。根据CGI标准,编写外部扩展应用程序,可以对客户端浏览器输入的数据进行处理,完成客户端与服务器的交互操作。CGI规范定义了Web服务器如何向扩展应用程序发送消息,在收到扩展应用程序的信息后又如何进行处理等内容。

    使用这种方法,用户单击某个链接或输入网址来访问CGI程序,web服务器收到请求后,运行该CGI程序,对用户请 求进行处理,紧接着将处理结果并产生一个响应,该响应被返回给web服务器,web服务器对响应进行包装,以HTTP响应的方式返回给浏览器。

    CGI程序在一定程度上解决了用户需求。不过还存在一些不足之处,如CGI程序编写困难,响应时间较长,以进程方式运行导致性能受限。于是1997年,sun公司推出了Servlet技术,作为java阵营的CGI解决方案。

    CGI

    Servlet

    定义

    1. Java Servlet是一个基于Java技术的Web组件,运行在服务器端,它由Servlet容器所管理,用于生成动态的内容

    2. Servlet是Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。

    3. Servlet可以被动态地加载到支持Java技术的Web服务器中运行。

    Servlet容器

    定义

    1. Servlet容器也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务
    2. Servlet没有main方法,不能独立运行,它必须被部署到Servlet容器中,由容器来实例化和调用 Servlet的方法(如doGet()和doPost()),Servlet容器在Servlet的生命周期内包容和管理Servlet。</pre>

    Servlet被调用的流程

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

    Servlet与Servlet容器.png

    为什么使用Servlet容器

    1. servlet提供了通信支持。servlet容器是web服务器与servlet程序之间通信的桥梁。所以你的servlet不用担心tomcat服务器和你自己的web代码之间的API,只需要考虑如何在servlet中实现业务逻辑

    2. 生命周期管理。servlet容器控制着servlet的生与死,它负责加载类、实例化和初始化servlet,调用servlet方法,以及使servlet实例被垃圾回收,有了servlet容器,你不需要太多的考虑资源管理。

    3. 多线程支持:容器会自动为它所接收的每个servlet请求创建一个新的java线程。针对用户的请求,如果servlet已经运行完相应的http服务方法,这个线程就会结束。这并不是说你不需要考虑线程安全性,其实你还会遇到同步问题,不过这样能使你少做很多工作。

    4. 声明方式实现安全:利用servlet容器,你可以使用xml部署描述文件来配置和修改安全性,而不必将其硬编码写到servlet类代码中。

    5. JSP支持:servlet容器负责将jsp代码翻译为真正的java代码。

      分类

      1. 独立的Servlet

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

      2. 进程内的Servlet容器

        Servlet容器由Web服务器插件和Java容器两部分的实现组成。Web服务器插件在某个Web服务器内部地址空间中打开一个 JVM,使得Java容器1可以在此JVM中加载并运行Servlet。

        如有客户端调用Servlet的请求到来,插件取得对此请求的控制并将它传递(使用JNI技术)给Java容器,然后由Java容器将此请求交由Servlet进行处理。

        进程内的Servlet容器对于单进程、多线程 的服务器非常适合,提供了较高的运行速度,但伸缩性有所不足。

        [1] 管理和调用servlet程序

      3. 进程外的Servlet容器

      4. 总结。让我画张图总结一下:

        Servlet容器的构成

    CGI程序与Servlet的比较

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

    1. Servlet是单实例多线程的运行方式,每个请求在一个独立的线程中运行,而提供服务的Servlet实例只有一个。

    2. Servlet具有可升级性,能响应更多的请求,因为Servlet容器使用一个线程而不是操作系统进程,而线程仅占用有限的系统资源。

    3. Servlet使用标准的API,被更多的Web服务器所支持。

    4. Servlet使用Java语言编写,因此拥有Java程序语言的所有优点,包括容易开发和平台独立性。

    5. Servlet可以访问Java平台丰富的类库,使得各种应用的开发更为容易。

    6. Servlet容器给Servlet提供额外的功能,如错误处理和安全。

    相关文章

      网友评论

          本文标题:理解Servlet、Servlet容器

          本文链接:https://www.haomeiwen.com/subject/fvcarktx.html