Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
理解springmvc中的上下文_Spring_Tomcat_Spring Mvc - Fatal编程技术网

理解springmvc中的上下文

理解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的新手,我正在创建一个简单的web应用程序。我一直在读SpringMVC中的上下文

我正在为eclipse使用STS插件。我创造了一个 使用插件的SpringMVC项目

现在我在项目中有三个xml文档:web.xml、root-context.xml和servlet-context.xml。这些是STS为我创建的

  • 在web.xml中,DispatcherServlet指向servlet-context.xml,据我所知,DispatcherServlets的工作是创建一个web应用程序上下文,它知道如何解析视图,并且是控制器bean存在的地方。 我的理解正确吗?如果是这样的话,在这种情况下还完成了什么工作

  • 现在,有一个名为root-context.xml的文件,它在我的项目默认包上有一个组件扫描。我的理解是,这个上下文需要有许多servlet可能使用的全局bean。我的理解正确吗?这还能做什么?使用此文件创建什么类型的上下文

  • 现在,我在项目中做得更深入了,我有几个*-context.xml文件(dao-context.xml、security-context.xml等),它们是使用contextLoaderListner(在web.xml中)加载的。这是个好主意吗?或者所有内容都应该进入servlet-context.xml?我认为有不同的上下文是个好主意,因为它提供了关注点的分离。评论?另外,从这些*-context.xml文件创建什么样的上下文?这些文件的正确文件夹位置是什么

  • xml用于servlet容器,如tomcat等,项目中的所有其他xml文件都用于spring容器。对吗?所有这些文件都被分离,以提供关注点的分离

  • 当前场景中存在多少应用程序上下文和web应用程序上下文

  • 为什么每个人都需要不止一个DispatcherServlet

    为什么任何人都需要不止一个应用程序上下文


    想法?评论?更正?最佳实践

    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上下文(应用程序范围)变量中从现在起,每个调度员都会(或为此)