首页 > 代码库 > spring mvc详解
spring mvc详解
springmvc是在spring的基础上进行架构的。spring要做的事情从大的方面来说很简单,就是将xml中bean定义转化为容器中的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文件路径为Servlet的servlet-name+“servlet”.xml.
第二个问题:SpringMVC是如何提供服务的。
大体代码放在doService中,流程代码非常清晰,可用下面的图来表示(使用拿来主义,别人画的是真好):
六个步骤:
1.根据配置拿到Handler(就是我们写的Controller)及其Interceptor.
2.执行Interceptor的preHandle
3.对Handler进行适配,并执行
4.执行Interceptor的postHandle
5.查找拿到View
6.进View进行填充模型数据,并展示
第三个问题,我们的开发者平台使用的是Velocity,怎么集成的?
从上面的服务流程可以看到,第五个步骤会去拿到View.
由配置我们知道,View的解析器是:org.springframework.web.servlet.view.velocity.VelocityLayoutViewResolver,那么对应的view为VelocityView,它会将velocity的模板地址放入VelocityView中。
然后第六步填充数据时,它会创建我们Velocity的VelocityContext,然后根据模板地址创建Template,接下来就交给velocity吧。
当然,这一步有些坑我自己也还在摸索中。
spring mvc详解