ServletConfig vs ServletContext

ServletConfigServletContext接口有什么区别?

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

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

来源: Java中的ServletConfig和ServletContext之间的区别

的ServletConfig

  • javax.servlet.*;可用的ServletConfig

  • ServletConfig对象是每个servlet类一个

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

  • 这个Config对象只对一个特定的servlet公共

  • 范围:只要servlet正在执行, ServletConfig对象将可用,一旦servlet执行完成,它将被销毁。

  • 我们应该明确地给出请求,以便第一次创buildServletConfig对象

  • 在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.*;可用javax.servlet.*;

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

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

  • 范围 :只要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类的数目=多less个ServletConfig对象

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

在这里输入图像说明

ServletConfig由servlet容器实现,用init() 初始化一个servlet 。 也就是说,您可以使用web.xml部署描述符将初始化parameter passing给servlet。 为了理解,这与Java类中的构造函数类似。

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

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

这在javadoc的介绍性文字中得到了回答。

ServletConfig javadoc:

一个servletconfiguration对象,由servlet容器在初始化期间将信息传递给servlet。

ServletContext javadoc:

定义一组servlet用于与servlet容器通信的方法,例如,获取文件的MIMEtypes,调度请求或写入日志文件。

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

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

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

javadoc还包含一个可用的方法列表及其使用说明。 它很好地概述了什么是可用的/可能的。

在这里输入图像说明

ServletContext和ServletConfig服务器中的对象

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

ServletConfig对象

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

Servlet容器将创build两个对象Servlet上下文和Servletconfiguration。 Servlet上下文是公开的,即我们使用webxml在Servlet上下文中存储的数据可用于所有servlet,而在应用程序中只有一个servlet上下文对象 ,而在servletconfiguration的情况下是私有的,即我们使用webxml在Servlet上下文中存储的数据仅适用于特定的servlet,并且可以有n个servletconfiguration对象

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

ServletConfig用于特定的Servlet,在init(ServletConfig x)方法中很有用,或者可以通过使用getServletConfig()方法来使用。 如果我们需要获得一些servlet特定的信息,就使用它。 例如:Servlet回顾关于数据库访问相关信息的信息可能使用ServletConfig,因为这个信息只对那个特定的Servlet

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

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

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

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

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

如果你只想在特定的servlet中使用一些variables,那么你需要使用ServletConfit。