• Servlet工作原理



    一、Servlet是什么?

    Servlet 类是 JavaWeb 的三大组件之一,它属于动态资源,是一组 Tomcat 提供给程序猿的 API。其作用是处理请求,服务器通常会把接收到的请求交由 Servlet 的实现类来处理。

    通常Servlet的实现类需要完成:

    1. 接收请求数据;
    2. 处理请求;
    3. 完成响应。

    Servlet 实现类中的方法需要由我们自己来实现,且每个 Servlet 实现类必须实现 javax.servlet.Servlet 接口,之后由服务器来创建 Servlet 类对象并调用相应的方法。

    二、相关接口

    ServletConfig:当前Servlet的配置信息,每一个Servlet都有其唯一对应的ServletConfig

    ServletContext:作用是在整个Web应用的动态资源之间共享数据,一个Web应用对应一个唯一的ServletContext对象, ServletContext对象在项目启动时创建,在项目卸载时销毁。

    GenericServlet:通用的Servlet父类。

    HttpServlet:HttpServlet继承了GenericServlet,而GenericServlet实现Servlet接口,
    所以我们可以继承HttpServlet来创建一个Servlet。当通过继承HttpServlet来创建一个Servlet时,我们只需要根据要处理的请求的类型,来重写不同的方法 ①处理get请求,则重写doGet();②处理post请求,则重写doPost()

    HttpServletRequest:浏览器发送给服务器的请求报文,该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。

    HttpServletResponse:服务器发送给浏览器的响应报文,该对象由Tomcat服务器创建,最终作为参数传递到doGet或doPost方法中,我们可以在这两个方法中直接使用。

    三、Servlet的工作流程

    Servlet只有放在容器中才能执行,最常见的容器为Tomcat,Servlet工作流程如下图:
    在这里插入图片描述
    分析如下:

    1. 浏览器向服务器发送GET请求,请求服务器ServletA
    2. 服务器上的Servlet 容器接收到该URL,根据该URL判断为Servlet请求,此时Servlet 容器将产生两个对象:请求对象(HttpServletRequest)和响应对象(HttpServletResponce)
    3. Servlet 容器对请求的 URL 进行解析并根据web.xml配置文件找到处理该请求的Servlet(ServletA),并创建一个线程A
    4. Servlet 容器将刚才创建的请求对象和响应对象传递给线程A
    5. Servlet 容器调用Servlet的service()方法
    6. service()方法根据请求类型(本示例为GET请求)调用doGet() (本示例调用doGet()) 或doPost()方法
    7. doGet()执行完后,将结果返回给Servlet 容器
    8. 线程A被销毁或被放在线程池中

    四、Servlet的生命周期

    Servlet是运行在Servlet容器中的,由Servlet容器来负责Servlet实例的查找、创建以及整个生命周期的管理。Servlet整个生命周期可以分为四个阶段:

    1. 类装载以及实例创建阶段:默认情况下,Servlet实例是在接收到第一个请求时进行创建,并且在以后的请求中对这个实例进行复用。
    2. 实例初始化阶段:一旦Servlet实例被创建,将会调用Servlet中的 init(ServletConfig arg) 方法,传入ServletConfig,即Servlet的相关配置信息,init()方法在整个Servlet的生命周期中只会被调用一次。
    3. 服务阶段:实例初始化后,一旦由客户端请求,Servlet 就会调用service(ServletRequest req, ServletRespose res) 方法处理数据并响应数据。
    4. 实例销毁阶段:当Servlet容器决定销毁某个Servlet时,将会调用 Servlet 实例中的destory()方法,在destory()方法中进行资源释放。一旦Servlet实例的 destory() 方法被调用,Servlet 容器将不会发任何请求给这个Servlet实例,若 Servlet 容器需要再次使用这个 Servlet,需要重新实例化该 Servlet 实例。

    总结

    以上就是今天要讲的内容,本文主要介绍了Servlet的工作原理,包括Servlet相关接口、Servlet的生命周期和Servlet如何和Servlet 容器配合工作,如果你觉得有收获的话,就留下你的👍吧!

  • 相关阅读:
    SpringBoot连接MySQL数据库,使用Mybatis框架(入门)
    【推荐系统】ESMM:一种有效估算后点击转换率的方法
    java继承与多态——继承
    Unreal PythonScriptPlugin
    【计算机毕业设计】基于springboot的大创管理系统【源码+lw+部署文档】
    拉格朗日多项式
    头歌-信息安全技术-Java生成验证码
    Ubuntu22.04配置Go环境
    Python垃圾回收
    IDEA--tomcat日志乱码
  • 原文地址:https://blog.csdn.net/m0_49991895/article/details/126478837