文档介绍:其实每个MVCframework的执行过程都是大同小异的,当个request过来时,它都通过一个Servlet来响应request,再根据request的路径名和配置将这个requestdispatch给一个Controller执行,最后将之返回配置文件里对应的页面。在SpringMVC里,这个Servlet的名字叫DispatchServlet。稍看一下它的源码会发现这是一很简单的类。下面是DispatchServlet的类图:简单吧,这是典型的TemplateMethod模式。每个类都会完成一些自己的本职工作,把不属于自己的工作延迟到子类来完成。这些类的子职责在下面会有分析。其实整个SpringFramework用的最多的模式就是TemplateMethod(Strategy也挺多,呵呵),也许任何Framework用的最多的都是TemplateMethod模式。Why?看看ExpertOneonOneJ2EEDesignandDevelopment吧,至少TemplateMethod和Strategy模式的分析这本书甚至比HeadfirstDesignPattern还好。我们先来看DispatchServlet的初始化执行过程分析吧:我们知道每个Servlet在Web服务器启动时都会有一个初始化的机会,这就是Servlet的init过程,这是配置Servlet的最好机会。我们可以在这个阶段干些啥事情呢?1、把初始化的那些init-param读到Servlet的属性里。我们知道Servlet的init-param是放在ServletConfig里的,我们可以用循环去取这些属性。但是每次都这么干实在太累了,干吗不把在Servlet里增加几个property,再这些init-param直放到Servlet的property里呢?呵呵,以后那些初始参数都可以直接拿来用啦,真方便。DispatchServlet的一个祖先类叫做HttpServletBean就是专门干这个的。以后假如我们要写自己的Servlet也可以直接继承HttpServletBean这个类,这样读ServletConfig的操作都省掉了,哈哈!2、从ServletContext里取出ApplicationContext,。但是不是直接拿这个ApplicationContext就足够了呢?no。我们先问一个简单的问题吧:在SpringMVC里我们是不是只能配置一个Servlet呢?Struts就是那么干的,所以在Struts里所有的request过来都会交给一个Servlet去处理。但是在SpringMVC里,我们却可以有好多个Servlet!它们可以处理不同类型的request,而且更重要的是它们的ApplicationContext不是相同的,它们共享了一个父ApplicationContext,也就是从ServletContext里取出来的那个,但是它们却会根据自己的配置作扩展,形成这个Servlet特有的ApplicationContext。这个子的Ap