1

我们知道,每当对 servlet 的请求到来时,servlet 容器将首先检查 web.xml 文件中的 url 和相应的 servlet 类。这很好,但混乱随之而来。假设我正在使用 load-on-startup 属性。所以,servlet 应该在第一次调用之前准备好。在这种情况下,容器需要 servlet 配置对象来使 servlet 工作。但是在 web.xml 文件中定义了 servlet 的启动时加载和初始化参数。所以当容器使用 web.xml 时?(当使用 load-on-startup 属性时,容器显然不能等待第一次调用,容器必须再次读取 web.xml 文件才能知道该属性是否与任何 servlet 一起使用。)

如果有人能解开我的困惑会更好。如果可能,请提供一些可靠的链接。

4

2 回答 2

4

加载和实例化:

servlet 容器负责加载和实例化 servlet。加载和实例化可以在容器启动时发生,也可以延迟到容器确定需要 servlet 来为请求提供服务。

当 servlet 引擎启动时,所需的 servlet 类必须由 servlet 容器定位。servlet 容器使用普通的 Java 类加载工具加载 servlet 类。加载可能来自本地文件系统、远程文件系统或其他网络服务。并且由于在 中声明了 servlet web.xml,因此该文件在容器启动期间由容器加载和读取。

初始化:

servlet 对象实例化后,容器必须先初始化 servlet,然后才能处理来自客户端的请求。容器通过调用 Servlet 接口的 init 方法来初始化 servlet 实例,并使用一个唯一的(每个 servlet 声明的)实现该ServletConfig接口的对象。

参考:JSR-000315 JavaTM Servlet 3.0

于 2013-09-25T05:03:17.673 回答
3

web.xml在您将应用程序部署到 Web 服务器上后立即阅读。为了便于理解,您可以假设容器只不过是您的 Web 服务器。尽管 Web 服务器不仅仅是一个 Web 容器。

Web 服务器读取web.xml,并加载上下文配置,在启动服务器时加载等。web.xml是您告诉容器/服务器有关您的应用程序的文件。您的 Web 应用程序位于 Web 服务器内部,服务器拦截所有传入的请求,根据上下文决定将请求转发到哪个应用程序。

于 2013-09-25T04:08:06.670 回答