Spring MVC 执行原理

在 Spring Mvc 访问过程里,每个请求都首先经过 许多的过滤器,经 DispatcherServlet 处理;

一个Spring MVC工程里,可以配置多个的 dispatcherServlet ,每个 DispatcherServlet 可以对应多个的 HandlerMapping ,每个 HandlerMapping 可以有自己的 Interceptor (拦截器)。

1. 请求首先 由 前端 DispatcherServlet 捕获;

2. DispatcherServlet 经过 HandlerMapping 获取适当的 Hanlder ,也即 Controller ,并返回给 DispatcherServlet;

3. 如果有设置 拦截器,首选执行拦截器的 preHandler 方法,并把执行结果返回 DispatcherServlet;

4. DispatcherServlet 根据捕获的请求,以及 Handler (Controller) ,获取到适当的 HandlerAdapter 处理,并把结果返回给 DispatcherServlet,结果为 (View 和 Model);

5. 如果有设置拦截器,就是执行 拦截器的 postHandler 方法,并返回 DispatcherServlet;

6. DispatcherServlet 根据获取的 view 跟 model 结合 ViewResolver,返回所指的 视图模板,并返回给 DispatcherServlet;

7. DispatcherServlet 结合 视图模型跟model ,执行 render() 渲染界面,并返回给客户端;

 

一个DispatcherServlet 都有自己 上下文配置文件, 这个配置继承自根的上下文配置文件;

每个 DispatcherServlet 都可配置多个不同的 HandlerMapping 映射方式;每个 HandlerMapping 都实现了 Ordered 接口,可以上下文文件配置中设置优先使用的 HandlerMapping;

用户的请求被 DispatcherServlet 捕获后,DispatcherServlet 使用优先级高的 HandlerMapping 查找可用的 Handler,如果没有找到合适的 Handler,就使优先级次之的 HandlerMapping 继续查找,直到找到为止;

比如:Spring MVC 提供主要的 HanderMapping 有 DefaultAnnotationHandlerMapping, SimpleUrlHandlerMapping, BeanNameUrlHandlerMapping


<bean id="defaultAnnoHandlerMapping" class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">

    <property name="order" value="1"/>

</bean>


<bean id="simpleUrlMapping" class="org.

springframework.Web.servlet.handler.SimpleUrlHandlerMapping">

    <property name="order" value="2"/>

    <!--  ... -->

</bean>


<bean id="beanNameUrlMapping" class="org.springframework.Web.servlet.

handler.BeanNameUrlHandlerMapping">

    <!-- ... -->

</bean>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC 的组成原理主要涉及以下几个关键组件: 1. 前端控制器(Front Controller):Spring MVC 的核心是一个前端控制器,即 DispatcherServlet。它是一个 Servlet,负责接收所有的客户端请求并进行处理。DispatcherServlet 根据请求的 URL 查找到对应的处理器。 2. 处理器映射器(Handler Mapping):处理器映射器负责将请求的 URL 映射到对应的处理器上。它将根据请求的 URL 查找并选择合适的处理器来处理请求。 3. 处理器适配器(Handler Adapter):处理器适配器负责将处理器包装成一个可以被前端控制器调用的对象。它将处理器的执行结果封装成 ModelAndView 对象,并返回给前端控制器。 4. 视图解析器(View Resolver):视图解析器根据处理器返回的 ModelAndView 对象,解析出对应的视图。它将根据视图名字查找出对应的视图,最终将视图返回给前端控制器。 5. 视图渲染器(View Renderer):视图渲染器负责将视图解析后的结果进行渲染,并生成最终的响应输出。 6. 拦截器(Interceptor):拦截器是一种类似于过滤器的组件,可以在请求的处理前后进行一些额外的处理。它可以用来进行权限验证、日志记录等操作。 以上这些组件相互协作,完成了请求的处理和响应的生成过程。通过配置这些组件,可以实现灵活的请求处理流程,并且方便进行功能扩展和定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值