用spring框架开发web应用少不了理解WebApplicationContext、DispatcherServlet与web容器的ServletContext关系。
发现很多贴子,分析了代码,写了一大堆关系,最后还是让人看的云里雾里的。
我相信,一个产品的基本设计思路都是简单明了的,在这个指导下,才写出了复杂的代码。
分析代码最后应该回归到作者的原始思路,这样才能知其然,又知其所以然。
具体代码不贴了,总结如下:
1.web容器可以说就是Servlet容器:ServletContext,启动tomcat必然有这个。web.xml中配置有具体的Servlet,这些都会放在Servlet容器中。
2. dispatcherServlet只是一个具体的Servlet,必然装在Servlet容器里。当然Servlet容器可以装其它任何Servlet,不一定必须有dispatcherServlet。
3. WebApplicationContext是IOC容器,里面是装spring的依赖注入产生的各种bean组件的。可以说与上面的Servlet容器及具体的Servlet没有任何直接联系。通常的IOC容器本来就不仅是给web应用用的。
4. 但是web应用中具体的Servlet处理业务中一般都会使用IOC容器里的组件,所以两个容器之间要有直接引用关系。但是两个容器里的具体内容不应该有直接的引用关系。如同你跨部门协调的时候,总要找他们的领导,不会直接找具体的人员。
5. 所以WebApplicationContext容器会放在ServletContext容器中,这个过程是web.xml中的监听器,监听Servlet容器的启动过程中,先产生IOC容器,并放置在ServletContext里面的。
6. 如果是做其它java应用,可以使用其它IOC容器,比如ApplicationContext (ClasspathXmlApplicationContext,FileSystemXmlApplicationContext),可以在你启动自己应用的时候初始化这个IOC容器对象,并放在一个全局的地方引用着。其它代码就可以从IOC里取自己要的组件了。
引申:
当我看红黑树的时候,也是一直看不进去,规则多,转换多。但是当我看了2-3树后,就比较理解了红黑树。
后来进一步想,1972年鲁道夫·贝尔如何去思考发明红黑树呢?平衡二叉树为了平衡,就是平民选择领导的过程,从下到上的逐步平衡的过程,但又不是急于平衡而变动太大,类似2-3树的局部通过加一个节点来缓平衡提高性能。而不是先定好领导,再自上而下的安排座次的过程。社会的平衡也许也是这样。
分享到:
相关推荐
`ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE`常量用于在`ServletContext`中存储根`WebApplicationContext`的引用,这样Web应用的其他部分就可以找到并使用这个容器。 `XmlWebApplicationContext`是`...
`WebApplicationContext`接口包含了获取Web容器的`ServletContext`的方法,这使得Spring容器能够与Web应用程序的其他部分进行交互。例如,`ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE`常量用于在`ServletContext`中...
通过使用 Spring 的 IoC 容器,Spring Web MVC 可以高效地管理 Web 应用程序中的依赖关系,使得整个开发过程更加简洁和高效。 了解 Spring Web MVC 的核心概念和架构设计,对于理解和开发基于 Spring 的 Web 应用...
DispatcherServlet 和 ApplicationContext 的关系 DispatcherServlet 作为一个 Servlet,需要根据 Servlet 规范使用 Java 配置或 web.xml 声明和映射。然而,DispatcherServlet 使用 Spring 配置来发现请求映射、...
它会根据web.xml中的contextConfigLocation参数来构建SpringMVC的上下文环境,如果web.xml中配置了该参数,那么将会在应用启动的时候初始化一个WebApplicationContext实例,并将其保存在ServletContext中。...
这样,我们可以通过`WebApplicationContextUtils`工具类的静态方法`getWebApplicationContext(ServletContext)`在Web应用的任何地方获取ApplicationContext对象,无需每次都手动创建。 3. **导入Spring集成Web的...
总结,Spring MVC的执行流程包括初始化阶段(创建`WebApplicationContext`,配置`ServletConfig`和`ServletContext`)和请求处理阶段(通过`DispatcherServlet`接收请求,分发到相应的Controller处理,然后返回响应...
在Servlet容器启动后,DispatcherServlet 初始化时,会创建自己的WebApplicationContext,并将其设置为Servlet上下文的属性。DispatcherServlet的初始化过程包括: 2.1 Servlet的init()方法被调用,创建子上下文。...
WebApplicationContext是针对Web应用而设计的,它会持有对ServletContext的引用,允许从Web相关的对象(如Servlet)中获取Bean。WebApplicationContext通常在Web应用启动时初始化,并在Web应用运行期间一直存在,...
在Web应用中,Spring通常会创建一个WebApplicationContext,它与Servlet上下文(ServletContext)关联。 **方法一:使用WebApplicationContextUtils** 在Servlet中,我们可以利用`WebApplicationContextUtils`工具...
`ContextLoaderListener`创建的ApplicationContext存储在`ServletContext`的一个属性中,键为`"org.springframework.web.context.WebApplicationContext.ROOT"`,而`DispatcherServlet`创建的WebApplicationContext...
如果没有设置,则会尝试从 ServletContext 中查找或创建一个新的 `WebApplicationContext`。 - 在创建 `WebApplicationContext` 的过程中,会调用 `configureAndRefreshWebApplicationContext()` 方法来配置并刷新...
接着,DispatcherServlet会调用`initWebApplicationContext`方法,这个方法包含了设置ServletContext和ServletConfig到新创建的WebApplicationContext中,以及调用`onRefresh`模板方法。`onRefresh`方法在...
它不仅包括了ApplicationContext的功能,还提供了获取ServletContext的功能,以及与Servlet容器的集成。 51、什么是spring? 这里可能是一个错误,应该是“什么是Spring?”,Spring是一个用于开发Java应用的开源框架...
9. **WebApplicationContextUtils**: 用于从 ServletContext 中获取 Spring 的 WebApplicationContext,便于在非 Spring 控制的类中使用 Spring 服务。 10. **ConversionService**: 提供了对象转换功能,用于将请求...
在Spring MVC中,一个Web应用可以有多个上下文:一个是DispatcherServlet的WebApplicationContext(通常简称为子上下文),另一个是ServletContext的根WebApplicationContext(通常称为父上下文或根上下文)。...
WebApplicationContext是Spring中用于Web应用的上下文,它与普通的ApplicationContext不同,可以获取到Servlet相关的对象,如ServletContext。 总之,Spring MVC是一个强大且灵活的Web框架,通过MVC模式解耦了Web...
Spring MVC 是一个强大的Java web...1. **配置WebApplicationContext**:在`web.xml`中配置`DispatcherServlet`,并设置`localeResolver`,通常使用`CookieLocaleResolver`或`SessionLocaleResolver`。例如: ```xml ...
4.3.4. ServletContextResource 4.3.5. InputStreamResource 4.3.6. ByteArrayResource 4.4. ResourceLoader接口 4.5. ResourceLoaderAware 接口 4.6. 把Resource作为属性来配置 4.7. Application context 和...
4.3.4. ServletContextResource 4.3.5. InputStreamResource 4.3.6. ByteArrayResource 4.4. ResourceLoader接口 4.5. ResourceLoaderAware 接口 4.6. 把Resource作为属性来配置 4.7. Application context 和...