【问题标题】:when container call deployment descriptor (web.xml)当容器调用部署描述符(web.xml)
【发布时间】:2013-09-30 12:28:55
【问题描述】:

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

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

【问题讨论】:

    标签: java servlets web.xml deployment-descriptor


    【解决方案1】:

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

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

    【讨论】:

    • 始终不需要容器成为网络服务器。通常,您的 servlet 网络服务器与容器一起提供。但是容器也可以单独来。
    • @user2392631 Web 容器是 Web 服务器的一部分是正确的。但老实说,当有人试图区分它时,这会造成很多混乱。因此,我试图保持简单,但我仍然会进行编辑。
    【解决方案2】:

    加载和实例化:

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

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

    初始化:

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

    参考:JSR-000315 JavaTM Servlet 3.0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2016-06-18
      相关资源
      最近更新 更多