【发布时间】:2011-05-12 12:49:44
【问题描述】:
ServletConfig和ServletContext接口有什么区别?
【问题讨论】:
-
虽然这是一个基本问题,但很重要。特别是给那些来面试的人:)
ServletConfig和ServletContext接口有什么区别?
【问题讨论】:
ServletConfig 参数是为特定的 servlet 指定的,其他 servlet 不知道。它用于初始化目的。
ServletContext 参数是为任何特定 servlet 之外的整个应用程序指定的,并且可供该应用程序内的所有 servlet 使用。它是应用程序范围的,因此可以跨页面全局访问。
【讨论】:
ServletContext参数可以跨不同的浏览器(用户)访问
来源:Difference between ServletConfig and ServletContext in Java
ServletConfig
ServletConfig 在javax.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
ServletContext 在javax.servlet.*; 包中可用
ServletContext 对象对整个 Web 应用程序都是全局的
ServletContext 的对象将在 Web 应用程序部署时创建
作用域:只要 Web 应用程序正在执行,ServletContext 对象就可用,一旦应用程序从服务器上移除,它就会被销毁。
ServletContext 对象在发出第一个请求之前就可用
在web.xml - <context-param> 标签将出现在<web-app> 标签下
这是它在 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)
【讨论】:
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/
【讨论】:
这在他们的 javadocs 的介绍性文本中得到了回答。
servlet 容器用于在初始化期间将信息传递给 servlet 的 servlet 配置对象。
定义一组 servlet 用来与其 servlet 容器通信的方法,例如,获取文件的 MIME 类型、分派请求或写入日志文件。
每个 Java 虚拟机的每个“Web 应用程序”都有一个上下文。 (“Web 应用程序”是安装在服务器 URL 命名空间的特定子集(例如 /catalog)下的 servlet 和内容的集合,并且可能通过 .war 文件安装。)
对于在其部署描述符中标记为“分布式”的 Web 应用程序,每个虚拟机将有一个上下文实例。在这种情况下,上下文不能用作共享全局信息的位置(因为信息不会是真正的全局信息)。请改用数据库等外部资源。
ServletContext对象包含在ServletConfig对象中,Web 服务器在 servlet 初始化时提供该 servlet。
javadoc 还包含可用方法列表及其使用说明。它很好地概述了它们的所有可用/可能。
【讨论】:
区别:
.--------------------------------------------------.----------------------------------------------------------------------------------------------.
| 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. |
'--------------------------------------------------'----------------------------------------------------------------------------------------------'
【讨论】:
服务器中的ServletContext和ServletConfig对象
作为 Web 服务器的一部分,有许多 Web 应用程序驻留在服务器内部。对于每个 Web 应用程序,服务器负责创建一个对象,即 servlet 上下文对象。它也被称为应用程序对象。
ServletConfig 对象
作为每个 Web 应用程序的一部分,我们将创建 N 个 servlet。对于每个 servlet,服务器将创建一个对象,即 ServletConfig 对象。
【讨论】:
ServletConfig 用于特定的 Servlet,在 init(ServletConfig x) 方法中很有用,也可以通过 getServletConfig() 方法使用。如果我们需要获取一些 servlet 特定信息,则使用它。 例如: Servlet 检索有关数据库访问相关信息的信息可能会使用 ServletConfig,因为此信息仅对特定的 servlet 是必需的
但是,ServletContext 是针对整个应用程序的。当我们需要在特定 Web 应用程序中的一些/所有 servlet/jsp 之间共享信息时使用它。可以使用 Servlet 的 getServletConfig().getServletContext() 方法来访问它。例如: Servlet/JSP 用于统计有多少用户访问了您的网站。
【讨论】:
Servlet 容器会创建两个对象 Servlet context 和 Servlet Config。 Servlet 上下文是public,即我们使用 webxml 在 Servlet 上下文中存储的数据对所有 servlet 都可用,并且应用程序中只有 一个 servlet 上下文对象,而在 servlet 的情况下私有的配置,即我们使用 webxml 在 Servlet 上下文中存储的数据仅对特定的 servlet 可用,并且可以有 n 个 servlet 配置对象
示例(如果我们在应用程序中有 3 个 servlet 文件,则将有 3 个 servlet 配置对象。
【讨论】:
通常两者都用于初始化目的但一个主要的不同是 假设你想为整个应用程序使用一些变量或字段你需要初始化 web.xml 加载时间你有一个选项是 ServletContext
如果您只想在特定的 servlet 中使用某些变量,那么您需要使用 ServletConfit。
【讨论】:
ServletConfig 用于共享特定于 servlet 的初始化参数,而 ServletContext 用于在 Web 应用程序内的任何 Servlet 内共享初始化参数。
【讨论】:
ServletContext 接口表示它所属的 Web 应用程序的 Servlets 视图。
ServletContext 存在于 ServeltConfig 中。
每个Servlet都有ServletConfig对象,用于使用getServeletConfig()方法访问initParameters。
【讨论】: