spring mvc组件和servlet

spring mvc

早期web开发

在早期 Java Web 的开发中,统一把显示层、控制层、数据层的操作全部交给 JSP 或者 JavaBean 来进行处理,我们称之为 Model1:

在这里插入图片描述

Spring mvc组件与运作流程


Spring MVC作为Spring framework web层的三层框架,通过实现Model-View-Controller模式来将数据、业务与展现进行分离。Spring MVC就是属于SpringFrameWork的后续产品。正因为Spring框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring框架进行WEB开发时,可以选择使用Spring的Spring MVC框架或集成其他MVC开发框架,如Struts2等进行web开发。 它的六大核心组件包括:

  • DispatcherServlet:中央控制器,把请求给转发到具体的控制类

  • Controller:具体处理请求的控制器

  • HandlerMapping:映射处理器,负责映射中央处理器转发给controller时的映射策略

  • ModelAndView:服务层返回的数据和视图层的封装类

  • ViewResolver:视图解析器,解析具体的视图

  • Interceptors :拦截器,负责拦截我们定义的请求然后做处理工作

    主要工作流程如下:

  • 用户向服务器发送request请求,请求被SpringMVC中央控制器DispatcherServlet捕获;

  • DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping映射处理器,将请求发送给指定的Controller。

  • Controller执行完成后,将返回的数据信息封装到ModelAndView对象中,最后通过ViewResolver视图解析器选择一个合适的View 渲染视图返回界面。

一言概之,request请求到中央控制器——>传到映射处理器——>转发到指定controller——>获取数据和view ,组成成ModelAndView组件——>通过ViewResolver返回到特定的前台页面。

在这里插入图片描述


DispatcherServlet核心分发器介绍


基本接口与功能

在这里插入图片描述

其中各个Servlet作用为:

  • HttpServletBean:主要做一些初始化的工作,将web.xml中配置的参数设置到Servlet中。比如servlet标签的子标签init-param标签中配置的参数。
  • FrameworkServlet:将Servlet与Spring容器上下文关联。其实也就是初始化FrameworkServlet的属性webApplicationContext,这个属性代表SpringMVC上下文,它有个父类上下文,既web.xml中配置的ContextLoaderListener监听器初始化的容器上下文。
  • DispatcherServlet :初始化各个功能的实现类。比如异常处理、视图处理、请求映射处理等

DispatcherServlet 继承自 HttpServlet,它遵循 Servlet 里的“init-service-destroy”三个阶段,其中init()阶段主要作用是加载 web.xml 中 DispatcherServlet 的 配置,并调用子类的初始化。初始化后通过initHandlerMappings() 方法从 SpringMVC 的容器及 Spring 的容器中查找所有的 HandlerMapping 实例,并把它们放入到 handlerMappings 这个 list 中。DispatcherServlet 的 doService() 方法主要是设置一些 request 属性,并调用 doDispatch() 方法进行请求分发处理,doDispatch() 方法的主要过程是通过 HandlerMapping 获取 Handler,再找到用于执行它的 HandlerAdapter,执行 Handler 后得到 ModelAndView ,ModelAndView 是连接“业务逻辑层”与“视图展示层”的桥梁,接下来就要通过 ModelAndView 获得 View,再通过它的 Model 对 View 进行渲染。

###初始化流程

DispatcherServlet通过init()函数进行初始化,具体的代码段和解析为:

PropertyValues pvs=new ServletConfigPropertyValues(getServletConfig(),this.requiredProperties);//ServletConfigPropertyValues为HttpServletBean内部静态类,构造过程中会使用而getServletConfig能够找出配置文件中的配置参数并注入到ServletConfigPropertyValues中去
BeanWrapper bw=PropertyAccessorFactory.forBeanPropertyAccess(this);//通过BeanWrapper构造DispacherServlet
bw.setPropertyValues(pvs,true);//设置DispacherServlet属性

这里使用BeanWrapper,有2个理由:

  • contextConfigLocation属性在FrameworkServlet中定义,HttpServletBean中未定义
  • 利用Spring的注入特性,只需要调用setPropertyValues方法就可将contextConfigLocation属性设置到对应实例中,也就是以依赖注入的方式初始化属性。

具体的onfresh函数为(继承重写自它的父类函数):

在这里插入图片描述

请求处理过程

HttpServlet继承自Servlet,提供了service方法用于处理请求,service使用了模板设计模式,在内部对于http get方法会调用doGet方法,http post方法调用doPost方法。可以看一看具体的doService方法如下:

在这里插入图片描述

doDispatch方法功能简单描述一下:
首先根据请求的路径找到HandlerMethod(带有Method反射属性,也就是对应Controller中的方法),然后匹配路径对应的拦截器,有了HandlerMethod和拦截器构造个HandlerExecutionChain对象。HandlerExecutionChain对象的获取是通过HandlerMapping接口提供的方法中得到。有了HandlerExecutionChain之后,通过HandlerAdapter对象进行处理得到ModelAndView对象,HandlerMethod内部handle的时候,使用各种HandlerMethodArgumentResolver实现类处理HandlerMethod的参数,使用各种HandlerMethodReturnValueHandler实现类处理返回值。 最终返回值被处理成ModelAndView对象,这期间发生的异常会被HandlerExceptionResolver接口实现类进行处理.

总结

理返回值。 最终返回值被处理成ModelAndView对象,这期间发生的异常会被HandlerExceptionResolver接口实现类进行处理.

总结

本文总结了Spring mvc框架的基本组件,阐述了核心分发器DispacherServlet的初始化与运作流程。通过以上内容,加深了对web开发以及Spring Mvc框架的理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值