JavaWeb-27-总结SpringMVC的运行流程以及和spring的整合

目录

一:SpringMVC运行流程:

1、所有请求,前端控制器(DispatcherServlet)收到请求,调用doDispatch进行处理

2、根据HandlerMapping中保存的请求映射信息找到,处理当前请求的,处理器执行链(包含拦截器)

3、根据当前处理器找到他的HandlerAdapter(适配器)

4、拦截器的preHandle先执行

5、适配器执行目标方法,并返回ModelAndView

6、拦截器的postHandle执行

7、处理结果;(页面渲染流程)

             1)、如果有异常使用异常解析器处理异常;处理完后还会返回ModelAndView

              2)、调用render进行页面渲染

               3)、执行拦截器的afterCompletion;

二:springmvc和spring整合

1:SpringMVC和Spring整合的目的;分工明确;

2:spring和springmvc分别用两个配置文件,为spring配置监听器

3:springmvc和spring是两个容器,避免扫描两次;分开扫描包

3.1:Spring管理业务逻辑组件;

3.2:SpringMVC管理控制器组件;

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组件的东西;否侧报错

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苍煜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值