• Servlet原理


       Servlet主要用来处理客户端请求并将其结果发送到客户端,下面我们来详细看一下Servlet。

    一、Servlet的生命周期

        Servlet的生命周期是由Servlet的容器来控制的(Tomcat 的容器等级中,Context 容器是直接管理 Servlet 在容器中的包装类 Wrapper),它可以分为3个阶段:初始化、运行、销毁

    初始化阶段:

       1、Servlet容器加载servlet类,把servlet类的.class文件中的数据读到内存中同时读取web.xml配置文件中的信息;

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

       3、Servlet容器创建一个Servlet对象

       4、Servlet容器调用Servlet对象的init()方法进行初始化;----init方法,负责初始化Servlet对象

    运行阶段:

        1、当Servlet容器接收到一个请求时,Servlet容器会判断内存中是否存在指定的Servlet对象,如果没有则创建它,然后根据这个请求创servletRequestservletResponse对象;

        2、调用Servlet对象的service方法。并把这两个参数传递给service方法。Service方法通过servletRequest对象获得请求的信息,并处理该请求。再通过servletResponse对象生成这个请求的响应结果。然后销毁servletRequest和servletResponse对象。我们不管这个请求是post提交的还是get提交的,最终这个请求都会由service方法来处理;-----service方法,负责响应客户的请求

    销毁阶段:

       当Web应用被终止时,servlet容器会先调用servlet对象的destrory方法,然后再销毁servlet对象,同时也会销毁与servlet对象相关联的servletConfig对象。我们可以在destroy方法的实现中,释放servlet所占用的资源,如关闭数据库连接,关闭文件输入输出流等。---destory方法,当Servlet对象退出声明周期时,负责释放占有的资源

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

       Servlet是怎么处理一个请求的呢?

        当用户发送一个请求到某个Servlet的时候,Servlet容器会创建一个ServletRequst和ServletResponse对象。在ServletRequst对象中封装了用户的请求信息,然后Servlet容器把ServletRequst和ServletResponse对象传给用户所请求的Servlet,Servlet把处理好的结果写在ServletResponse中,然后Servlet容器把响应结果传给用户。

    Tomcat 与 Servlet 是如何工作的:

    步骤:

    1. Web Client 向Servlet容器(Tomcat)发出Http请求
    2. Servlet容器接收Web Client的请求
    3. Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中。
    4. Servlet容器创建一个HttpResponse对象
    5. Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数传给 HttpServlet 对象。
    6. HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息。
    7. HttpServlet调用HttpResponse对象的有关方法,生成响应数据。
    8. Servlet容器把HttpServlet的响应结果传给Web Client。
  • 相关阅读:
    【机器学习】K-means文本聚类,python
    【机器学习】K-means文本聚类,简单入门版,python
    【python】jiaba分词,停用词分享,stopwords
    【python】jieba分词,去停用词,自定义字典
    【python】jieba分词,简单版
    【python】散点图,读取excel数据,xlrd
    vhost文件配置含义是什么
    羊驼可以吃吗
    PHP中的sublime软件如何用快捷键移动到行尾或者行首
    PHP中单引号,双引号,的区别?
  • 原文地址:https://www.cnblogs.com/moonandstar08/p/4941097.html
Copyright © 2020-2023  润新知