创建Servlet实例

作者: 紫霞等了至尊宝五百年 | 来源:发表于2017-12-14 18:18 被阅读18次

已经完成了 Servlet 的解析工作,并且被包装成 StandardWrapper 添加在 Context 容器中,但它仍不能为我们工作,以为还未被实例化。下面将介绍 Servlet 对象是如何创建及初始化的。

1 创建 Servlet 对象

如果 Servlet 的 load-on-startup 配置项大于 0,那么在 Context 容器启动的时候就会被实例化,上文提到在解析配置文件时会读取默认的 globalWebXml,在 conf 下的 web.xml 文件中定义了一些默认的配置项,其定义了两个 Servlet,分别是:

  • org.apache.catalina.servlets.DefaultServlet
  • org.apache.jasper.servlet.JspServlet

它们的 load-on-startup 分别是 1 和 3,也就是当 Tomcat 启动时这两个 Servlet 就会被启动。

创建 Servlet 实例的方法是从 Wrapper. loadServlet 开始的。
要完成的就是获取 servletClass 然后把它交给 InstanceManager 去创建一个基于 servletClass.class 的对象。
如果这个 Servlet 配置了 jsp-file,那么这个 servletClass 就是 conf/web.xml 中定义org.apache.jasper.servlet.JspServlet

创建 Servlet 对象的相关类结构

2 初始化 Servlet

初始化 Servlet 在 StandardWrapperinitServlet 方法中,这个方法很简单就是调用 Servlet 的** init** 的方法,同时把包装了 StandardWrapper 对象的** StandardWrapperFacade** 作为 ServletConfig 传给 Servlet。为何要传 StandardWrapperFacade 给 Servlet 对象将在后面详解

如果该 Servlet 关联的是一个 jsp 文件,那么前面初始化的就是 JspServlet,接下来会模拟一次简单请求,请求调用这个 jsp 文件,以便编译这个 jsp 文件为类,并初始化这个类

这样 Servlet 对象就初始化完成了,事实上 Servlet 从被 web.xml 解析到完成初始化,这个过程非常复杂,中间有很多过程,包括各种容器状态的转化引起的监听事件的触发、各种访问权限的控制和一些不可预料的错误发生的判断行为等等。这里只抓一些关键环节进行阐述,有个总体脉络。

初始化 Servlet 的时序图(省略某些细节)

相关文章

  • 3.0.7 Servlet单例和线程安全问题

    Servlet实例是由Tomcat来创建的,因Tomcat只会创建一个Servlet实例,所以Servlet就是单...

  • Javaweb面试题

    1.Servlet生命周期 ①服务器加载Servlet②创建Servlet实例只有第一次请求Servlet时,创建...

  • JSP基础(二)

    1.Servlet生命周期创建servlet实例当servlet实例化后,将调用这个对象的init()方法进行初始...

  • 创建Servlet实例

    已经完成了 Servlet 的解析工作,并且被包装成 StandardWrapper 添加在 Context 容器...

  • ServletConfig接口的使用

    Servlet引擎装载并创建一个Servlet实例对象后,接着调用该实例对象的init(ServletConfig...

  • servlet快速笔记

    Servlet 当Servlet小于2.5时,需要填写配置文件web.xml 创建Servlet实例 域对象 概念...

  • JavaWeb-015-请求的重定向与转发

    RequestDispatcher接口 RequestDispatcher实例对象是由Servlet引擎创建的,它...

  • Servlet的生命周期

    1、初始化阶段:调用init()方法,创建一个 Servlet 实例。在下列时刻Servlet容器装载Servle...

  • Servlet

    Servlet生命周期方法 1)构造器:只调用一次,只有第一次的请求Servlet时,创建Servlet的实例,调...

  • Servlet生命周期

    Servlet的生命周期由如下几个步骤组成: 1.实例化(就是创建servlet对象,调用构造器) 当用户通过浏览...

网友评论

    本文标题:创建Servlet实例

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