Spring MVC流程

Spring Web的执行流程是一个典型的MVC(Model-View-Controller)架构的实现过程,它涉及从客户端接收请求、处理请求、访问数据库、生成响应并返回给客户端的一系列步骤。以下是Spring Web执行流程的详细解析:

(1)当用户通过浏览器发起一个HTTP请求,请求直接到前端控制器DispatcherServlet;
(2)前端控制器接收到请求以后调用处理器映射器HandlerMapping,处理器映射器根据请求的URL找到具体的Handler,并将它返回给前端控制器;
(3)前端控制器调用处理器适配器HandlerAdapter去适配调用Handler;
(4)处理器适配器会根据Handler去调用真正的处理器去处理请求,并且处理对应的业务逻辑:

HandlerAdapter 根据请求的 Handler 适配并执⾏对应的Handler(controller )
首先Controller 方法会调用相应的 Service 方法来执行业务逻辑,而Service 层通常会调用 DAO 层来实现对数据库的实际操作;其次DAO 层会使用 JDBC、Hibernate 或者其他持久化框架,执行具体的 SQL 操作。DAO 层执行完数据库操作后,将结果返回给调用它的 Service 层方法;Service 层在获得了 DAO 层返回的结果后,可能会进行一些额外的业务逻辑处理,然后将最终结果(通常是业务逻辑需要的数据或者操作结果)返回给 Controller。最后Controller 方法会收到来自 Service 层的结果, 返回⼀个 ModelAndView( 即模型和视图 ) 给HandlerAdaptor。

(5)同4.的结果当处理器处理完业务之后,会返回一个ModelAndView对象给处理器适配器,HandlerAdapter再将该对象返回给前端控制器;这里的Model是返回的数据对象,View是逻辑上的View。
(6)前端控制器DispatcherServlet将返回的ModelAndView对象传给视图解析器ViewResolver进行解析,解析完成之后就会返回一个具体的视图View给前端控制器。(ViewResolver根据逻辑的View查找具体的View)
(7)前端控制器DispatcherServlet将具体的视图进行渲染,渲染完成之后响应给用户(浏览器显示)。

一、客户端请求

  1. 发起请求:客户端(如浏览器)通过HTTP协议向服务器发送请求,请求中包含URL、HTTP方法(如GET、POST)、请求头和请求体等信息。

二、Spring Web处理请求

  1. 前端控制器(DispatcherServlet)
    • 所有请求首先被前端控制器DispatcherServlet接收。DispatcherServlet是Spring MVC的核心,它作为请求的分发器,负责将请求分发给对应的处理器(Controller)。
  2. 处理器映射器(HandlerMapping)
    • DispatcherServlet调用处理器映射器,根据请求的URL和HTTP方法等信息来查找对应的处理器(Controller)。处理器映射器可以基于XML配置、注解等方式来查找处理器。
  3. 处理器适配器(HandlerAdapter)
    • 找到处理器后,DispatcherServlet会调用处理器适配器。处理器适配器是Spring MVC框架与处理器之间的桥梁,它按照特定的规则去执行处理器。
  4. 处理器(Controller)
    • 处理器适配器调用具体的处理器(Controller)来处理请求。在Controller中,可以进行业务逻辑的处理,包括调用Service层的方法、读取数据库、计算等。

三、访问数据库

  1. 服务层(Service)
    • 在Controller中,如果需要进行数据库操作,会调用服务层(Service)的相应方法。服务层负责业务逻辑的组织和封装,它可能会调用数据访问层(DAO)来访问数据库。
  2. 数据访问层(DAO)
    • 数据访问层负责与数据库进行交互,执行SQL语句或JPA查询等操作,从数据库中读取或写入数据。

四、生成响应

  1. ModelAndView
    • 处理器(Controller)处理完业务逻辑后,会返回一个ModelAndView对象。ModelAndView对象包含了视图名称和模型数据,视图名称用于指定返回的页面,模型数据则用于在视图中展示。
  2. 视图解析器(ViewResolver)
    • DispatcherServlet将ModelAndView对象传递给视图解析器。视图解析器根据视图名称解析成具体的视图对象(如JSP页面),并将模型数据填充到视图中。
  3. 渲染视图
    • 视图对象根据模型数据渲染成最终的HTML页面或其他格式的响应内容。
  4. 返回响应
    • DispatcherServlet将渲染后的视图内容通过HTTP响应返回给客户端。响应包括HTTP状态码、响应头和响应体等信息。

五、客户端处理响应

  • 客户端(如浏览器)收到响应后,根据响应内容进行界面更新、数据渲染或其他操作。
过滤器(Filter)

过滤器是Servlet规范中定义的一种组件,它在请求进入Servlet容器之后、但在请求到达任何Servlet、JSP页面或Spring MVC的Controller之前执行,并在响应发送给客户端之前执行。过滤器可以执行以下操作:

  1. 请求进入容器后
    • 对请求进行预处理,如设置字符编码、日志记录、安全验证等。
    • 决定是否将请求继续传递给下一个过滤器或目标资源(Servlet、JSP页面、Controller等)。
  2. 响应发送给客户端前
    • 对响应进行后处理,如修改响应头、响应体等。

过滤器在Spring Web项目中通常通过实现javax.servlet.Filter接口并配置在web.xml文件中或使用@WebFilter注解来注册。在Spring Boot项目中,还可以使用@Component注解结合@Order注解(或实现Ordered接口)来指定过滤器的执行顺序。

拦截器(Interceptor)

拦截器是Spring框架提供的一种组件,它专门用于Spring MVC中,在请求进入Controller之前和Controller处理完请求之后执行。拦截器可以执行以下操作:

  1. 请求进入Controller之前
    • 进行权限检查、日志记录、预处理等。
    • 如果需要,可以中断请求处理流程,并直接返回响应。
  2. Controller处理完请求之后
    • 对请求处理的结果进行后处理,如修改响应数据、记录性能指标等。
    • 在视图渲染前后也可以执行相应的逻辑。

拦截器在Spring MVC中通过实现HandlerInterceptor接口并注册到Spring容器中来实现。注册拦截器通常通过实现WebMvcConfigurer接口的addInterceptors方法来完成,并可以在该方法中指定拦截器的执行顺序和拦截的路径模式。

组件执行时机作用
过滤器(Filter)请求进入容器后、响应发送给客户端前预处理请求、后处理响应
拦截器(Interceptor)请求进入Controller之前、Controller处理完请求之后权限检查、日志记录、预处理、后处理等

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值