你知道 SpringMVC的 执行流程 吗?

SpringMVC的执行分为视图阶段和前后端分离阶段。在视图阶段,请求由DispatcherServlet接收,通过HandlerMapping找到处理器,HandlerAdaptor处理参数和返回值,ModelAndView传递给ViewResolver解析为视图。在前后端分离阶段,处理器直接返回JSON,使用@ResponseBody和HttpMessageConverter进行转换。

SpringMVC的执行流程要分两阶段讲

  • 视图阶段(老旧JSP等)
  • 前后端分离阶段(接口开发,异步)

视图阶段 

        假设我们现在有一个请求 http://localhost:8080/user/getById/1 ,请求从浏览器发出,在后台就会有一个 前端控制器DispatcherServlet 来接收请求,它是调度中心,所有的请求都要经过这个DispatcherServlet,它是由Tomcat容器进行初始化的,当这个类被加载的时候,在内部就会加载出其他组件 处理器映射器HandlerMapping、处理器适配器HandlerAdaptor、视图解析器ViewResolver 

        DispatcherServlet 会到 处理器映射器中查询handler,处理器映射器内存储的就是路径与handler的对应关系,handler 简单讲就是某个Controller的某个方法,第3步中返回的并不是单纯的handler,而是处理器执行链,因为要考虑到拦截器的存在

         为什么有 处理器Handler 后还要一个 处理器适配器HandlerAdaptor,处理器适配器的作用是处理各式各样的参数和返回值,从而让处理器能够运行,之后返回ModelAndView给前端控制器

        视图解析器将逻辑视图ModelAndView解析为真正的视图,返回 View对象 给前端控制器

整体过程:

  • 用户发送出请求到前端控制器DispatcherServlet
  • DispatcherServlet收到请求调用HandlerMapping(处理器映射器)
  • HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet
  • DispatcherServlet调用HandlerAdapter(处理器适配器)
  • HandlerAdapter经过适配调用具体的处理器(Handler/Controller)
  • Controller执行完成返回ModelAndView对象
  • HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
  • DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)
  • ViewReslover解析后返回具体View(视图)
  • DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)
  • DispatcherServlet响应用户       

 现如今的开发都是 接口开发,不返回视图,而是json,那么SpringMVC的执行流程又是怎样的?

 前后端分离阶段(接口开发,异步请求)

 具体细节不再说明

整体的过程如下:

  • 用户发送出请求到前端控制器DispatcherServlet
  • DispatcherServlet收到请求调用HandlerMapping(处理器映射器)
  • HandlerMapping找到具体的处理器,生成处理器对象及处理器拦截器(如果有),再一起返回给DispatcherServlet。
  • DispatcherServlet调用HandlerAdapter(处理器适配器)
  • HandlerAdapter经过适配调用具体的处理器(Handler/Controller)
  • 方法上添加了@ResponseBody
  • 通过HttpMessageConverter来返回结果转换为JSON并响应
<think>好的,我现在需要帮用户了解Servlet和SpringMVC执行流程。首先,我得回顾一下用户的问题,确认他们需要详细的执行步骤,可能还希望两者的对比或关联。用户提到“执行流程详解”,所以需要分步骤解释,每个环节的作用。 先处理Servlet部分。Servlet是Java Web的基础,处理HTTP请求的核心。它的执行流程大致是:容器接收请求,创建请求和响应对象,调用service方法,根据方法类型分发到doGet或doPost,最后生成响应。这里需要详细说明每个步骤,比如容器的角色,service方法的作用,以及生命周期管理。 接下来是SpringMVC,用户可能已经知道Servlet,现在想了解SpringMVC如何在此基础上构建更复杂的流程。根据提供的引用,特别是引用[1]和[3],SpringMVC的核心是DispatcherServlet,需要详细说明它的处理过程,包括HandlerMapping、HandlerAdapter、ViewResolver等组件的作用。需要结合引用中的流程图,比如请求如何被DispatcherServlet接收,如何找到处理器,执行拦截器,处理返回结果,解析视图等。 需要注意用户提供的引用中有关于配置的内容,比如引用[4]提到的视图解析器配置,但用户现在可能更关注执行流程而不是配置,所以可以简要提及组件,但重点放在流程上。同时,用户可能希望了解两者的区别,比如SpringMVC如何扩展Servlet的功能,比如通过前端控制器模式集中处理请求,而Servlet更直接。 另外,用户要求生成相关问题,可能需要围绕执行流程的细节、组件作用、对比、异常处理等方面提问。例如,Servlet的生命周期,SpringMVC的视图解析过程,或者两者在处理请求时的异同。 需要确保回答结构清晰,分点列出,使用中文,并且正确应用LaTeX格式,比如行内公式用$...$,独立公式用$$...$$。不过在流程描述中可能用不到太多数学公式,但如果有涉及变量或技术术语,需注意格式。 最后,检查引用是否正确应用,如引用[1]提到SpringMVC执行流程图,引用[3]提到视图解析的具体方法,这些需要自然地插入到相关部分的末尾。例如,在讲解SpringMVC的视图解析时,可以引用[3]中的代码片段说明processDispatchResult方法的作用。 总结步骤: 1. 分两部分详细说明Servlet和SpringMVC执行流程。 2. 每个流程分步骤解释,结合提供的引用内容。 3. 对比两者的异同,帮助用户理解关系。 4. 生成相关问题,覆盖流程细节、组件作用、实际应用等。</think>### Servlet执行流程详解 1. **请求接收**:Web服务器(如Tomcat)接收到HTTP请求后,创建`ServletRequest`和`ServletResponse`对象[^1]。 2. **Servlet初始化**:若Servlet实例未创建,容器调用其`init()`方法初始化。 3. **请求处理**:容器调用Servlet的`service()`方法,根据请求类型(GET/POST)分发到`doGet()`或`doPost()`方法。 4. **生成响应**:业务逻辑处理后,通过`ServletResponse`写入响应数据。 5. **资源释放**:容器调用`destroy()`方法释放资源(仅一次,在Servlet生命周期结束时)。 ### SpringMVC执行流程分析 1. **请求分发**:所有请求由`DispatcherServlet`(前端控制器)统一接收[^1]。 2. **处理器映射**:通过`HandlerMapping`解析请求URL,找到对应的控制器(Controller)[^2]。 3. **处理器适配**:`HandlerAdapter`调用Controller的具体方法,处理请求参数并执行业务逻辑[^2]。 4. **结果处理**:Controller返回`ModelAndView`对象,包含模型数据和视图名称。 5. **视图解析**:`ViewResolver`将逻辑视图名解析为具体视图(如JSP),并渲染数据到客户端[^3][^4]。 6. **拦截器扩展**:流程中穿插拦截器(`preHandle`、`postHandle`、`afterCompletion`),用于权限校验或日志记录[^1]。 ### 核心区别 - **Servlet**:直接处理请求,需手动管理线程、参数解析等。 - **SpringMVC**:通过组件化设计(如`DispatcherServlet`、`HandlerMapping`)解耦,支持声明式开发[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值