首页 > 代码库 > spring mvc详解

spring mvc详解

springmvc是在spring的基础上进行架构的。spring要做的事情从大的方面来说很简单,就是将xmlbean定义转化为容器中的BeanDefinition,然后进行实例化,提供给用户使用。


我们的web程序的Spring容器为:org.springframework.web.context.support.XmlWebApplicationContext,它配置在ContextLoader.properties中。创建的时机为程序启动初始化ContextLoaderListener时,并保存在servletContext中。容器加载的xml路径为web.xml中配置的contextConfigLocation字段。

 

第一个正题:SpringMVC的配置文件在哪,容器是怎样的呢?

SpringMVC会首先查看是否已经存在Spring的容器,如果存在,则将Spring的容器作为父容器,生成自己的XmlWebApplicationContext。如果没有,则直接创建。创建的时机为,DispatcherServlet初始化时,由init->initServletBean完成。那如果配置多个DispatcherServlet时,它们是相互隔离的。如图所示:


容器查找的xml文件路径为Servletservlet-name+“servlet”.xml.

 

第二个问题:SpringMVC是如何提供服务的。

大体代码放在doService中,流程代码非常清晰,可用下面的图来表示(使用拿来主义,别人画的是真好):


六个步骤:

1.根据配置拿到Handler(就是我们写的Controller)及其Interceptor.

2.执行InterceptorpreHandle

3.Handler进行适配,并执行

4.执行InterceptorpostHandle

5.查找拿到View

6.View进行填充模型数据,并展示

 

第三个问题,我们的开发者平台使用的是Velocity,怎么集成的?

从上面的服务流程可以看到,第五个步骤会去拿到View.

由配置我们知道,View的解析器是:org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver,那么对应的viewVelocityView,它会将velocity的模板地址放入VelocityView中。

然后第六步填充数据时,它会创建我们VelocityVelocityContext,然后根据模板地址创建Template,接下来就交给velocity吧。

当然,这一步有些坑我自己也还在摸索中。

 


spring mvc详解