ServletConfig
和ServletContext
接口有什么区别?ServletConfig
和ServletContext
接口有什么区别?ServletConfig参数针对特定的servlet,并且对其他servlet不可见。它用于初始化目的。
ServletContext参数针对整个应用程序而不是特定的servlet进行指定,并可供该应用程序中的所有servlet使用。它是应用程序范围的,因此可以在页面之间全局访问。
ServletContext
参数可以在不同的浏览器(用户)之间进行访问。 - KNU来源: Java 中 ServletConfig 和 ServletContext 的区别
ServletConfig
ServletConfig
在 javax.servlet.*;
包中可用。
每个 Servlet 类都有一个 ServletConfig
对象。
ServletConfig
的对象会在 Servlet 初始化过程中创建。
此配置对象只对特定的 Servlet 公开。
作用域:当 Servlet 执行时,ServletConfig
对象将可用,一旦 Servlet 执行完成,它将被销毁。
我们应该显式地发出请求,以便首次创建 ServletConfig
对象。
In web.xml – <init-param>
标签将出现在 <servlet-class>
标签下方。
以下是其在 web.xml 中的样子: (来源)
<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应用程序一个]
Servlet类的数量=相应数量的ServletConfig对象
在Servlets JSP中ServletContext和ServletConfig之间的区别以表格形式呈现(Source)
ServletConfig是由Servlet容器实现的,用于使用init()初始化单个Servlet。也就是说,您可以使用web.xml部署描述符向Servlet传递初始化参数。为了理解,这类似于Java类中的构造函数。
ServletContext是由Servlet容器实现的,用于所有Servlet与其Servlet容器通信,例如获取文件的MIME类型、获取调度请求或写入日志文件。也就是获取有关其执行环境的详细信息。它仅适用于单个Java虚拟机。如果Web应用程序在多个JVM之间分布,则此功能将无法正常工作。为了理解,这类似于应用程序全局变量机制,适用于仅在一个JVM中部署的单个Web应用程序。
来源:http://javapapers.com/servlet/difference-between-servletconfig-and-servletcontext/
这个问题在他们的javadocs的介绍性文本中有回答。
由servlet容器用于在初始化期间向servlet传递信息的servlet配置对象。
定义了一组方法,供servlet与其servlet容器通信,例如获取文件的MIME类型、调度请求或写入日志文件等。
每个Java虚拟机中都有一个“Web应用程序”对应的上下文(即一个“Web应用程序”是一组servlet和内容,安装在服务器的URL命名空间的特定子集下,例如/catalog,并可能通过.war文件进行安装)。
对于在部署描述符中标记为“分布式”的Web应用程序,将为每个虚拟机实例创建一个上下文实例。在这种情况下,上下文不能用作共享全局信息的位置(因为该信息不会真正成为全局)。请改用外部资源,如数据库。
ServletContext
对象包含在提供servlet初始化时提供给servlet的ServletConfig
对象中。
javadoc还包含可用方法的列表以及它们使用说明。这能很好地概述它们提供了什么功能和可能性。
服务器中的ServletContext和ServletConfig对象
作为Web服务器的一部分,有许多Web应用程序驻留在服务器内。对于每个Web应用程序,服务器负责创建一个对象,即servlet上下文对象。它也被称为应用程序对象。
ServletConfig对象
对于每个Web应用程序,我们将创建N个servlet。对于每个servlet,服务器将创建一个对象,即ServletConfig对象。
区别:
.--------------------------------------------------.----------------------------------------------------------------------------------------------.
| 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. |
'--------------------------------------------------'----------------------------------------------------------------------------------------------'
ServletConfig是针对特定Servlet的,它在init(ServletConfig x)方法中非常有用,或者可以通过使用getServletConfig()方法来使用。如果我们需要获取一些与Servlet相关的信息,则会使用它。例如:检索有关数据库访问相关信息的Servlet可能会使用ServletConfig,因为此信息仅适用于该特定的Servlet。
然而,ServletContext是整个应用程序的。当我们需要在特定Web应用程序中的某些/所有Servlet/JSP之间共享信息时,就会使用它。可以通过使用Servlet的getServletConfig().getServletContext()方法来访问它。例如:用于计算有多少用户访问您的网站的Servlet/JSP。
通常两者都用于初始化目的,但一个主要的不同是,假设您想要在整个应用程序中使用一些变量或字段,则需要在web.xml加载时进行初始化,您有一个选项是ServletContext
如果您只想在特定的servlet中使用某些变量,则需要使用ServletConfit。
ServletConfig 用于共享特定于 Servlet 的初始化参数,而 ServletContext 用于在 Web 应用程序中共享任何 Servlet 内部的初始化参数。