【问题标题】:ServletConfig vs ServletContextServletConfig 与 ServletContext
【发布时间】:2011-05-12 12:49:44
【问题描述】:

ServletConfigServletContext接口有什么区别?

【问题讨论】:

  • 虽然这是一个基本问题,但很重要。特别是给那些来面试的人:)

标签: servlets servletconfig


【解决方案1】:

ServletConfig 参数是为特定的 servlet 指定的,其他 servlet 不知道。它用于初始化目的。

ServletContext 参数是为任何特定 servlet 之外的整个应用程序指定的,并且可供该应用程序内的所有 servlet 使用。它是应用程序范围的,因此可以跨页面全局访问。

【讨论】:

  • 换句话说ServletContext参数可以跨不同的浏览器(用户)访问
  • 管理员电子邮件应该是上下文配置吗?还有数据库呢,应该是上下文配置吧?
【解决方案2】:

来源:Difference between ServletConfig and ServletContext in Java

ServletConfig

  • ServletConfigjavax.servlet.*; 包中可用

  • ServletConfig 对象是每个 servlet 类一个

  • ServletConfig的对象将在servlet初始化过程中创建

  • 此 Config 对象仅对特定的 servlet 公开

  • 作用域:只要一个 servlet 正在执行,ServletConfig 对象就可用,一旦 servlet 执行完成,它就会被销毁。

  • 我们应该明确提出请求,以便第一次创建ServletConfig对象

  • 在 web.xml – <init-param> 标签将出现在<servlet-class> 标签下

下面是它在 web.xml 下的样子:(Source)

<servlet>
    <servlet-name>ServletConfigTest</servlet-name>
    <servlet-class>com.stackoverflow.ServletConfigTest</servlet-class>
    <init-param>
        <param-name>topic</param-name>
        <param-value>Difference between ServletConfig and ServletContext</param-value>
    </init-param>
</servlet>

ServletContext

  • ServletContextjavax.servlet.*; 包中可用

  • ServletContext 对象对整个 Web 应用程序都是全局的

  • ServletContext 的对象将在 Web 应用程序部署时创建

  • 作用域:只要 Web 应用程序正在执行,ServletContext 对象就可用,一旦应用程序从服务器上移除,它就会被销毁。

  • ServletContext 对象在发出第一个请求之前就可用 在web.xml - &lt;context-param&gt; 标签将出现在&lt;web-app&gt; 标签下

这是它在 web.xml 下的样子:

<context-param>
    <param-name>globalVariable</param-name>
    <param-value>com.stackoverflow</param-value>
</context-param>

所以最后……。

没有。 Web 应用程序的数量 = 那么多 ServletContext 对象 [每个 Web 应用程序 1 个]
servlet 类的数量 = ServletConfig 对象的数量

表格格式的 Servlets JSP 中 ServletContext 和 ServletConfig 的区别(Source)

【讨论】:

    【解决方案3】:

    ServletConfig 由 servlet 容器实现,使用 init() 初始化单个 servlet。也就是说,你可以通过 使用 web.xml 部署的 servlet 初始化参数 描述符。为了便于理解,这类似于 a 中的构造函数 java类。

    ServletContext 由 servlet 容器实现供所有 servlet 与其 servlet 容器进行通信,例如 获取文件的 MIME 类型,获取调度请求,或写入 一个日志文件。那就是获取有关其执行环境的详细信息。它 仅适用于单个 Java 虚拟机。如果一个网 应用程序分布在多个 JVM 之间,这是行不通的。 为了理解,这就像一个应用程序全局变量 仅部署在一个 JVM 中的单个 Web 应用程序的机制。

    来源:http://javapapers.com/servlet/difference-between-servletconfig-and-servletcontext/

    【讨论】:

      【解决方案4】:

      这在他们的 javadocs 的介绍性文本中得到了回答。

      ServletConfig javadoc:

      servlet 容器用于在初始化期间将信息传递给 servlet 的 servlet 配置对象。

      ServletContext javadoc:

      定义一组 servlet 用来与其 servlet 容器通信的方法,例如,获取文件的 MIME 类型、分派请求或写入日志文件。

      每个 Java 虚拟机的每个“Web 应用程序”都有一个上下文。 (“Web 应用程序”是安装在服务器 URL 命名空间的特定子集(例如 /catalog)下的 servlet 和内容的集合,并且可能通过 .war 文件安装。)

      对于在其部署描述符中标记为“分布式”的 Web 应用程序,每个虚拟机将有一个上下文实例。在这种情况下,上下文不能用作共享全局信息的位置(因为信息不会是真正的全局信息)。请改用数据库等外部资源。

      ServletContext 对象包含在ServletConfig 对象中,Web 服务器在 servlet 初始化时提供该 servlet。

      javadoc 还包含可用方法列表及其使用说明。它很好地概述了它们的所有可用/可能。

      【讨论】:

        【解决方案5】:

        区别:

        .--------------------------------------------------.----------------------------------------------------------------------------------------------.
        |                  ServletConfig                   |                                        ServletContext                                        |
        :--------------------------------------------------+----------------------------------------------------------------------------------------------:
        | Unique object per servlet                        | Unique object for complete application                                                       |
        :--------------------------------------------------+----------------------------------------------------------------------------------------------:
        | Used to provide init parameters to the servlet   | Used to provide application level init parameters that all other servlets can use.           |
        :--------------------------------------------------+----------------------------------------------------------------------------------------------:
        | We can’t set attributes in ServletConfig object. | We can set attributes in ServletContext that other servlets can use in their implementation. |
        '--------------------------------------------------'----------------------------------------------------------------------------------------------'
        

        【讨论】:

          【解决方案6】:

          服务器中的ServletContext和ServletConfig对象

          作为 Web 服务器的一部分,有许多 Web 应用程序驻留在服务器内部。对于每个 Web 应用程序,服务器负责创建一个对象,即 servlet 上下文对象。它也被称为应用程序对象。

          ServletConfig 对象

          作为每个 Web 应用程序的一部分,我们将创建 N 个 servlet。对于每个 servlet,服务器将创建一个对象,即 ServletConfig 对象。

          【讨论】:

            【解决方案7】:

            ServletConfig 用于特定的 Servlet,在 init(ServletConfig x) 方法中很有用,也可以通过 getServletConfig() 方法使用。如果我们需要获取一些 servlet 特定信息,则使用它。 例如: Servlet 检索有关数据库访问相关信息的信息可能会使用 ServletConfig,因为此信息仅对特定的 servlet 是必需的

            但是,ServletContext 是针对整个应用程序的。当我们需要在特定 Web 应用程序中的一些/所有 servlet/jsp 之间共享信息时使用它。可以使用 Servlet 的 getServletConfig().getServletContext() 方法来访问它。例如: Servlet/JSP 用于统计有多少用户访问了您的网站。

            【讨论】:

              【解决方案8】:

              Servlet 容器会创建两个对象 Servlet context 和 Servlet Config。 Servlet 上下文是public,即我们使用 webxml 在 Servlet 上下文中存储的数据对所有 servlet 都可用,并且应用程序中只有 一个 servlet 上下文对象,而在 servlet 的情况下私有的配置,即我们使用 webxml 在 Servlet 上下文中存储的数据仅对特定的 servlet 可用,并且可以有 n 个 servlet 配置对象

              示例(如果我们在应用程序中有 3 个 servlet 文件,则将有 3 个 servlet 配置对象。

              【讨论】:

                【解决方案9】:

                通常两者都用于初始化目的但一个主要的不同是 假设你想为整个应用程序使用一些变量或字段你需要初始化 web.xml 加载时间你有一个选项是 ServletContext

                如果您只想在特定的 servlet 中使用某些变量,那么您需要使用 ServletConfit。

                【讨论】:

                  【解决方案10】:

                  ServletConfig 用于共享特定于 servlet 的初始化参数,而 ServletContext 用于在 Web 应用程序内的任何 Servlet 内共享初始化参数。

                  【讨论】:

                  • 我最近开始在stackoverflow中回答。这是我的第二个回答。我正在熟悉该网站。
                  【解决方案11】:

                  ServletContext 接口表示它所属的 Web 应用程序的 Servlets 视图。 ServletContext 存在于 ServeltConfig 中。

                  每个Servlet都有ServletConfig对象,用于使用getServeletConfig()方法访问initParameters。

                  【讨论】:

                    猜你喜欢
                    • 2011-10-08
                    • 1970-01-01
                    • 2023-04-07
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2015-11-22
                    相关资源
                    最近更新 更多