目录
1、所有请求,前端控制器(DispatcherServlet)收到请求,调用doDispatch进行处理
2、根据HandlerMapping中保存的请求映射信息找到,处理当前请求的,处理器执行链(包含拦截器)
3、根据当前处理器找到他的HandlerAdapter(适配器)
1)、如果有异常使用异常解析器处理异常;处理完后还会返回ModelAndView
2:spring和springmvc分别用两个配置文件,为spring配置监听器
3:springmvc和spring是两个容器,避免扫描两次;分开扫描包
4:Spring是一个父容器,SpringMVC是一个子容器;
一:SpringMVC运行流程:
1、所有请求,前端控制器(DispatcherServlet)收到请求,调用doDispatch进行处理
2、根据HandlerMapping中保存的请求映射信息找到,处理当前请求的,处理器执行链(包含拦截器)
3、根据当前处理器找到他的HandlerAdapter(适配器)
4、拦截器的preHandle先执行
5、适配器执行目标方法,并返回ModelAndView
1)、ModelAttribute注解标注的方法提前运行
2)、执行目标方法的时候(确定目标方法用的参数)
1)、有注解
2)、没注解:
1)、 看是否Model、Map以及其他的
2)、如果是自定义类型
1)、从隐含模型中看有没有,如果有就从隐含模型中拿
2)、如果没有,再看是否SessionAttributes标注的属性,如果是从Session中拿,如果拿不到会抛异常
3)、都不是,就利用反射创建对象
6、拦截器的postHandle执行
7、处理结果;(页面渲染流程)
1)、如果有异常使用异常解析器处理异常;处理完后还会返回ModelAndView
2)、调用render进行页面渲染
1)、视图解析器根据视图名得到视图对象
2)、视图对象调用render方法;
3)、执行拦截器的afterCompletion;
流程图:

二:springmvc和spring整合
1:SpringMVC和Spring整合的目的;分工明确;
SpringMVC的配置文件就来配置和网站转发逻辑以及网站功能有关的(视图解析器,文件上传解析器,支持ajax,xxx);
Spring的配置文件来配置和业务有关的(事务控制,数据源,xxx);
2:spring和springmvc分别用两个配置文件,为spring配置监听器

3:springmvc和spring是两个容器,避免扫描两次;分开扫描包
3.1:Spring管理业务逻辑组件;
不扫描controller以为的
<context:component-scan base-package="com.atguigu"><context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/><context:exclude-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/></context:component-scan>
3.2:SpringMVC管理控制器组件;
只扫描controller控制层
<context:component-scan base-package="com.atguigu" use-default-filters="false"><context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/><context:include-filter type="annotation" expression="org.springframework.web.bind.annotation.ControllerAdvice"/></context:component-scan>
4:Spring是一个父容器,SpringMVC是一个子容器;
子容器还可以引用父容器的组件;父容器不能引用子容器的组件;
如;在分开扫描的基础上,spring中的services层不能使用controller组件的东西;否侧报错


139

被折叠的 条评论
为什么被折叠?



