springmvc读后感

一篇很好的SpringMVC博客
springmvc中的web.xml文件详解

先来一张整体流程图

image

SpringMVC的整体流程

  1. contextLoader启动和初始化根上下文
  2. dispatcherservlet启动和初始化子上下文(这两个webcontext容器都会设置到servletcontext中)
  3. 当前端发来请求之后,HttpServlet提供了service方法用于处理请求,service使用了模板设计模式,在内部对于http get方法会调用doGet方法,http post方法调用doPost方法,dopost调用processRequest()方法,这个方法再调用dispathservlet中的doservice(),最终就是doDispath(),这个方法是重点了。
contextLoader启动和初始化根上下文

我们都会在web.xml中的listten配置org.springframework.web.context.ContextLoaderListener,这个就是我们contextloader启动的类,他会将我们在web.xml中配置的各种context-param中的配置文件都加载进去(除了servlet中的dispatcherservlet中的init-param ),并使用这些信息生成我们的webapplicationcontext,这个也就是我们的根上下文。

dispatcherservlet启动和初始化子上下文

我们在这里会再新建一个webapplicationcontext,这个context会以上面的为parent。这样的一个设计,我们可以认为根上下文是和web应用相对应的一个上下文,而dispatcherservlet持有的上下文和servlet对应的一个上下文。在一个web应用中,往往可以容纳多个servlet的存在,与此相对应,对于应用在web容器中的上下体系,一个根上下文可以作为很多servlet上下文的双亲上下文。并且,在向ioc容器getbean时,ioc容器会首先向其双亲上下文去getbean,也就是说,在根上下文中定义的bean是可以被各个servlet持有的上下文得到和共享的。
在初始化中,我们在dispatchservlet中的initstrategies()方法中还会对handlermappings、handleradapters、viewResolvers等等一系列进行初始化配置。

在这里总结一下各个servlet的作用
  1. HttpServletBean 主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。
  2. FrameworkServlet 将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文。
  3. DispatcherServlet 初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等。

MVC处理http分发请求

test.png

在上面我们其实已经很笼统的讲述了这个过程。下面就某一些细节进行讲述,在handlermapping中保存着一个handlermap,这个配置好的hashmap,其中保存了url请求和controller的映射关系,具体的生成过程可以看源码。我们可以通过gethandler方法,实际上就是使用这个map完成请求的映射处理,然后获得了一个handlerexecutionchain这么一个对象,这个对象持有一个interceptor链和一个handler对象,这个handler就是http请求对应的controller。

你可能感兴趣的:(springmvc读后感)