• servlet 作用


    什么是Servlet

    Servlet是一个Java编写的程序,此程序是基于Http协议的,在服务器端运行的(如tomcat),是按照Servlet规范编写的一个Java类。

    在BS架构中,早期的Web服务器只能处理静态资源的请求,也就是无法根据请求进行计算后再生成相应的HTML内容。为了补充Web服务器的这个缺陷,于是增强服务器功能的CGI技术最早产生了。CGI(Common Gateway Interface通用网关接口)也是一种规范,可以使用不同的语言来开发,如Perl,C,Java等都可以。当客户端请求静态资源时,Web服务器会自己处理并返回,当客户端请求动态资源时,Web服务器会把请求转交给扩展程序来处理,并将扩展程序的处理结果返回给客户端。但是CGI技术开发复杂,性能较差,只要有一个请求到达,Web服务器就会单独分配一个进程来进行处理,可移植性不好,所以慢慢就由后来的Servlet技术所取代。

    Servlet技术是使用Java语言开发的一套组件规范,不再像CGI技术那样需要分配单独的进程来处理请求,而是单独分配一个线程来处理,于是大大提升了处理效率。并且Java语言是跨平台的语言,也提升了Web服务器扩展程序的可移植性,已经取代了CGI技术,成为BS架构中的主流技术。所有后续的BS架构中的主流框架本质上都是基于Servlet来实现的。

    Servlet组件运行原理

    Servlet作为补充Web服务器功能的组件,需要依赖于Servlet容器才能运行,它的运行原理如下图所示。

    在浏览器中输入请求地址后,浏览器会依据IP地址及端口号找到对应的Web服务器,如果请求的是静态资源,Web服务器直接提供响应;如果请求的是动态资源,Web服务器的通信模块会将该请求传递给Servlet容器的通信模块,Servlet容器负责创建Servlet实例,并将请求中的数据解析出来传递给Servlet。在Servlet处理完数据之后,响应结果也是由容器的通信模块负责返回给Web服务器。后续的Servlet的销毁及管理都由容器来负责。

    能够充当Servlet容器这个角色的有很多软件,如Tomcat、Weblogic、JBoss等。而这些Servlet容器不仅仅具备了管理Servlet组件的功能,也具备了Web服务器的一些功能,所以很多时候只要安装一个Tomcat软件就同时具备了Web服务器及Servlet容器的双重功能。

    Servlet如何运行

    Servlet作为Web服务器的补充功能在运行时需要受到Servlet容器的管理,其运行的流程如下:

    1. 浏览器依据IP建立与容器的连接
    2. 浏览器将请求数据打包
    3. 容器解析请求数据包,封装request和response对象
    4. 容器依据请求资源路径找到Servlet创建对象
    5. 容器将request和response对象作为参数传入service方法,并调用
    6. 容器将响应数据打包发给浏览器
    7. 浏览器取出结果,生成页面

    Servlet的生命周期

    Servlet的生命周期是由Servlet的容器来控制的,它可以分为3个阶段;初始化,运行,销毁。

    初始化阶段:

    1,Servlet容器加载servlet类,把servlet类的.class文件中的数据读到内存中。

    2,然后Servlet容器创建一个ServletConfig对象。ServletConfig对象包含了Servlet的初始化配置信息。

    3,Servlet容器创建一个servlet对象。

    4,Servlet容器调用servlet对象的init方法进行初始化。



    运行阶段:

    当servlet容器接收到一个请求时,servlet容器会针对这个请求创建servletRequest和servletResponse对象。

    然后调用service方法。并把这两个参数传递给service方法。Service方法通过servletRequest对象获得请求的

    信息。并处理该请求。再通过servletResponse对象生成这个请求的响应结果。然后销毁servletRequest和

    servletResponse对象。我们不管这个请求是post提交的还是get提交的,最终这个请求都会由service方法来处理。

    销毁阶段:

    当Web应用被终止时,servlet容器会先调用servlet对象的destrory方法,然后再销毁servlet对象,

    同时也会销毁与servlet对象相关联的servletConfig对象。我们可以在destroy方法的实现中,释放

    servlet所占用的资源,如关闭数据库连接,关闭文件输入输出流等。

    在这里该注意的地方:

    在servlet生命周期中,servlet的初始化和和销毁阶段只会发生一次,而service方法执行的次数则取决于servlet被客户

    端访问的次数

  • 相关阅读:
    virtual Box在Centos 7上的安装
    Spark MLlib使用有感
    storm集群配置
    eclipse配置hadoop插件
    HDFS的java接口——简化HDFS文件系统操作
    【hbase】——HBase 写优化之 BulkLoad 实现数据快速入库
    【hbase】——Java操作Hbase进行建表、删表以及对数据进行增删改查,条件查询
    【转】RHadoop实践系列之二:RHadoop安装与使用
    【转】RHadoop实践系列之一:Hadoop环境搭建
    Hadoop生态系统如何选择搭建
  • 原文地址:https://www.cnblogs.com/liaoyanglong/p/6155069.html
Copyright © 2020-2023  润新知