JavaWeb第一讲 Servlet的工作原理及生命周期

时间:2022-07-25
本文章向大家介绍JavaWeb第一讲 Servlet的工作原理及生命周期,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Servlet的工作原理及生命周期

(一)Tomcat容器模型

Servlet的运行离不开Tomcat,那我们先弄清楚Tomcat的容器模型。

由上图可以看出,在Tomcat下有一个Container容器,这个容器有什么作用?它装载了我们所有的JavaWeb项目,当我们每创建一个JavaWeb项目,Tomcat就会把它“装进”Container容器里。而在这个大容器下,它又“装载着”Servlet容器,可是它是我们今天的主角吗?依然不是。

我们今天的主角是Context容器下的Wrapper,这个Wrapper又是什么?

Wrapper(StandardWrapper)是Servlet 在容器中的包装类,而我们每一个JavaWeb项目则对应一个Context容器,我们每一个项目下都有web.xml文件,它指定了容器的配置属性。

为什么需要Wrapper包装类?因为StandardWrapper 是 Tomcat 容器中的一部分,它具有容器的特征,而 Servlet 为一个独立的 web 开发标准,不应该强耦合在 Tomcat 中。

(二) Servlet生命周期

生命周期 : 创建(加载) --> 初始化 --> 服务 --> 销毁

1.创建 : Web容器负责加载Servlet,当web容器启动时或者在第一次使用这个Servlet的时候,容器会负责创建Servlet实例,但是用户必须通过web.xml指定Servlet的位置,成功加载后,Web容器会通过反射的方式对Servlet进行实例化。

2.初始化 :

  @Override
    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }

在Servlet的生命周期中,仅执行一次init()方法。它是在服务器装入Servlet时执行的,负责初始化Servlet对象。可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init()。

3.服务 :

protected void service(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {
        super.service(req,resp);
    }

它是Servlet的核心,负责响应客户的请求。每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法。默认的服务功能是调用与HTTP请求的方法相应的do功能。

4.销毁 :

@Override
    public void destroy() {
        super.destroy();
    }

仅执行一次,在服务器端停止且卸载Servlet时执行该方法。当Servlet对象退出生命周期时,负责释放占用的资源。一个Servlet在运行service()方法时可能会产生其他的线程,因此需要确认在调用destroy()方法时,这些线程已经终止或完成。

(三)Servlet工作原理

1 在客户端对web服务器发出请求;

2 web服务器接收到请求后将其发送给Servlet;

3 Servlet容器为此产生一个实例对象并调用ServletAPI中相应的方法来对客户端HTTP请求进行处理,然后将处理的响应结果返回给web服务器;

4 web服务器从Servlet实例对象中收到的响应结构发送回客户端。