理解springmvc中的上下文
我是spring的新手,我正在创建一个简单的web应用程序。我一直在读SpringMVC中的上下文 我正在为eclipse使用STS插件。我创造了一个 使用插件的SpringMVC项目 现在我在项目中有三个xml文档:web.xml、root-context.xml和servlet-context.xml。这些是STS为我创建的理解springmvc中的上下文,spring,tomcat,spring-mvc,Spring,Tomcat,Spring Mvc,我是spring的新手,我正在创建一个简单的web应用程序。我一直在读SpringMVC中的上下文 我正在为eclipse使用STS插件。我创造了一个 使用插件的SpringMVC项目 现在我在项目中有三个xml文档:web.xml、root-context.xml和servlet-context.xml。这些是STS为我创建的 在web.xml中,DispatcherServlet指向servlet-context.xml,据我所知,DispatcherServlets的工作是创建一个web应
想法?评论?更正?最佳实践 spring并没有强迫您以这种方式拥有xml文件,您可以只使用一个xml文件,即servlet-context.xml,并且只使用DispatcherServlet,很好地处理所有事情。通常,有不同的文件来定义服务bean或DAOBean,因此这基本上取决于应用程序设计,例如,如果您使用spring security,您可能需要添加一个xml文件,如我所说的security-context.xml,它取决于设计。实际上,您可以完全消除上下文加载器侦听器,并且仍然可以使用DispatcherServlet完成所有工作。 您的问题范围太广,因为您是spring的新手,您可能需要了解更多关于spring容器的详细信息,并决定什么适合您的需求。
我通常在WEB-INF中有servlet-context.xml,在classpath中有service-context.xml等其他配置,同样,这并不是严格的规则,只是它如何适合我。此设计背后的整个思想是在典型的web应用程序中处理不同的体系结构层,并为跨上下文的bean提供继承/重写机制。Spring中的每种类型的上下文都与不同的体系结构层相关,例如web层、服务层等 基于Spring的web应用程序可以配置多个DispatcherServlet(尽管在大多数情况下它是一个单独的servlet,但是DispatcherSerlvet是一个servlet,并且可以在web.xml中配置多个)。这些可以配置为处理不同的url模式。很明显,每个都是不同的servlet,因此可以有不同的SpringWeb应用程序上下文。其中每一个都可以包含SpringWeb层的不同配置,如控制器、拦截器、视图解析器、区域设置解析器等,因为它们通常属于应用程序的web层。所有这些配置和bean对于每个dispatcher servlet都是私有的,因此它们彼此不可见。因此,拥有一个单独的SpringWeb应用程序上下文有助于实现这种隐私。然而,还有其他被设计为共享的bean,因此属于根上下文。因此,所有可共享的内容都属于根上下文,可以将其视为此web应用程序的全局内容
每个DispatcherServlet继承根上下文中定义的所有bean。然而,需要注意的重要一点是,共享bean可以被各自的特定于DispatcherServlet的bean覆盖。因此,在web应用程序中,根上下文可以被看作是继承的,但可以被覆盖。是的,我知道它是基于设计的。当我按照我所解释的方式设计我的应用程序时,我试图更多地理解实际创建的上下文。例如,DispatcherServlet创建一个web应用程序上下文,您的web内容应该驻留在该上下文中。上下文加载程序侦听器创建应用程序上下文。这两者如何协同工作?是否只有一个应用程序上下文包含来自xml文件的所有bean,或者为每个xml文件创建一个应用程序上下文?创建的上下文的数量不取决于文件的数量。DispatcherServlet创建为子上下文。什么的子上下文?根上下文的子上下文。您可以根据需要配置任意多个DispatcherServlet,但始终只有一个根上下文。根上下文中的bean可以在所有子上下文中访问。有时,如果我们可以为rest服务配置另一个DispatcherServlet,我们会为它配置多个DispatcherServlet。谢谢。我想我开始明白了。根应用程序上下文与每个xml文件中定义的上下文有何不同(或与之相关)?在web应用程序中,通常使用ContextLoaderListener初始化的根上下文将根上下文存储在名为WebApplicationContext.class.getName()+“.root”的Servlet上下文(应用程序范围)变量中从现在起,每个调度员都会(或为此)