我知道Spring应用程序上下文是什么,但是我对Spring MVC中的Web应用程序上下文感到困惑。你们能帮助我吗?
2skhul331#
您可以查看WebApplicationContext代码以了解更多信息:
WebApplicationContext
public interface WebApplicationContext extends ApplicationContext { ServletContext getServletContext(); }
由于继承的原因,你可以简单地认为WebApplicationContext只是一种特殊的ApplicationContext,它只用于Web应用程序。因此,所有可以由ApplicationContext完成的事情也可以由WebApplicationContext完成。但是WebApplicationContext只是提供了一个额外的函数,允许你访问Servlet API规范定义的底层ServletContext。之所以有必要,主要是因为OOP的设计很好,如果我们不把它分成两个接口,而只是把getServletContext()添加到ApplicationContext中,用于所有的非web和web应用,那么对于非web应用,我们还需要把Servlet API JAR包含到我们的项目中,因为我们使得ApplicationContext依赖于Servlet API,这是很尴尬的。
ApplicationContext
ServletContext
getServletContext()
nr9pn0ug2#
Spring的官方文档包含了答案。WebApplicationContext是普通ApplicationContext的扩展,具有Web应用程序所需的一些额外功能。它与普通ApplicationContext的不同之处在于它能够解析主题(请参见使用主题),并且它知道与哪个Servlet相关联(通过具有到ServletContext的链接)。WebApplicationContext被绑定在ServletContext中,通过在RequestContextUtils类上使用静态方法,如果需要访问WebApplicationContext,您总是可以查找它。它用于促进Web服务器功能。文档还继续提到WebApplicationContext提供的特殊bean类型。例如,MultiPartResolver“解析多部分请求,例如支持处理从HTML表单上载的文件”。
2条答案
按热度按时间2skhul331#
您可以查看
WebApplicationContext
代码以了解更多信息:由于继承的原因,你可以简单地认为
WebApplicationContext
只是一种特殊的ApplicationContext
,它只用于Web应用程序。因此,所有可以由ApplicationContext
完成的事情也可以由WebApplicationContext
完成。但是WebApplicationContext
只是提供了一个额外的函数,允许你访问Servlet API规范定义的底层ServletContext
。之所以有必要,主要是因为OOP的设计很好,如果我们不把它分成两个接口,而只是把
getServletContext()
添加到ApplicationContext
中,用于所有的非web和web应用,那么对于非web应用,我们还需要把Servlet API JAR包含到我们的项目中,因为我们使得ApplicationContext
依赖于Servlet API,这是很尴尬的。nr9pn0ug2#
Spring的官方文档包含了答案。
WebApplicationContext是普通ApplicationContext的扩展,具有Web应用程序所需的一些额外功能。它与普通ApplicationContext的不同之处在于它能够解析主题(请参见使用主题),并且它知道与哪个Servlet相关联(通过具有到ServletContext的链接)。WebApplicationContext被绑定在ServletContext中,通过在RequestContextUtils类上使用静态方法,如果需要访问WebApplicationContext,您总是可以查找它。
它用于促进Web服务器功能。文档还继续提到WebApplicationContext提供的特殊bean类型。例如,MultiPartResolver“解析多部分请求,例如支持处理从HTML表单上载的文件”。