我正在学习Spring MVC,我有一些相关的疑问
因此,我有这个配置类来配置处理用户请求的DispatcherServlet:
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
// Create the 'root' Spring application context
AnnotationConfigWebApplicationContext rootContext = ...
// Create the dispatcher servlet's Spring application context
AnnotationConfigWebApplicationContext dispatcherContext = new AnnotationConfigWebApplicationContext();
dispatcherContext.register(DispatcherConfig.class);
// Register and map the dispatcher servlet
ServletRegistration.Dynamic dispatcher = container.addServlet("main", new DispatcherServlet(dispatcherContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("main/");
}
}
3)根据我的理解,在dispatcherContext中定义的bean可以访问在rootContext中定义的bean(但相反的情况并非如此)。为什么?
TNX
Spring应用程序中的根上下文是ApplicationContext
,它由ContextLoaderListener
加载。此上下文应该具有全局可用的资源,如服务、存储库、基础结构bean(DataSource
、EntityManagerFactory
等)。
ContextLoaderListener
在ServletContext
中以org.springframework.web.context.WebApplicationContext.root
的名称注册此上下文。
如果您自己加载一个ApplicationContext
并在ServletContext
中用上面的名称注册它,那么它将被限定为根上下文。
Spring应用程序中的子上下文是ApplicationContext
,它由DispatcherServlet
(或者例如Spring-WS应用程序中的MessageDispatcherServlet
)加载。对于Spring MVC来说,这个上下文应该只包含与该上下文相关的bean,这些bean将是ViewResolver
、HandlerMapping
等。
servlet在servletContext
中以org.springframework.web.servlet.frameworkservlet.context.
的名称注册这个上下文。
只有子上下文可以访问父上下文,因为您可能有多个子上下文。例如,在Spring MVC和Spring WS应用程序组合中。父上下文由子上下文检测,方法是在ServletContext
中找到具有已知名称的父上下文。
如果根上下文可以访问子上下文,那么它将使用哪个子上下文来连接bean?其次,如果是这样的话,当涉及到AOP时,您也会得到令人惊讶的结果。子上下文中定义的AOP会突然影响根上下文中配置的bean。
问题内容: 我正在研究 Spring MVC ,所以我有一些疑问 因此,我有这个配置类,用于配置处理用户请求的 DispatcherServlet : 我很清楚 DispatcherServlet的 工作方式。我的怀疑与 上下文 概念有关。 1)确切表示 上下文 ?我认为这就像一组具有特定用途的豆类,可以在环境中工作。但是我绝对不正确。 2) 根上下文 和 调度程序servlet上下文有 什么区别
我知道我需要在servlet上下文中注册用注释的类,以使webapp可访问。通常,我会按照以下方式来做: 我添加到根应用程序上下文中的所有其他配置类。下面是我的dispatcher初始值设定项通常的样子: 但是当我开始使用WebSockets时,事情变得更有趣了。要使websockets工作,必须将WebSoketConfig.class放到servlet上下文中。下面是我的WebSocketCo
问题内容: 我已经使用和上下文init-parameter 配置了根应用程序上下文。 然后,JSF(* .jsf)变量解析器访问根上下文。它工作正常。 现在的问题是,经过的请求将获得另一个应用程序上下文,然后将单例bean实例化两次。 我不需要其他的应用程序上下文,如何指定它来重用由加载的现有根应用程序上下文? 注意 阅读答案中的参考页后,我知道根上下文和调度程序上下文之间存在上下文分隔,但是没有
让spring boot 1.3.x应用程序在application.properties中定义server.context-path=/myPath,并按照Java spring boot中定义重定向请求:如何将我的应用程序根(“/”)映射到index.html? 使用viewControllerRegistry.addViewController(“/”).setViewName(“forwa
同时,Puppy资源将更多地位于webMvc级别,并加载到DispatcherServlet的上下文中。 从我刚才读到的内容(现在我很有希望理解)来看,根上下文实际上是DispatcherServlet创建的上下文的‘父’上下文。这意味着根上下文中的bean实际上可以自动连接/注入到DispatcherServlet创建的上下文中的任何bean中。我只是了解了“嵌套”上下文的概念。这准确吗? 如果
问题内容: 我想让我的JAX-RX应用程序从根上下文开始,所以我的URL是 http://example.com/restfullPath 并不是 http://example.com/rest/restfullPath 我从这里切换了我的应用程序的注释 对此 但随后看来,它接管了/index.html等文件 有没有一种方法可以在根应用程序上下文上运行JAX-RS,但仍提供静态页面? 似乎以前在J