欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WebApplicationContext、DispatcherServlet与web容器的ServletContext关系

程序员文章站 2022-07-13 14:36:33
...
    用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树的局部通过加一个节点来缓平衡提高性能。而不是先定好领导,再自上而下的安排座次的过程。社会的平衡也许也是这样。