主题切换
执行流程
一、核心基础概念补充
1. 什么是SpringMVC?
SpringMVC是Spring框架提供的基于MVC(Model-View-Controller)模式的Web层框架,用于构建Java Web应用程序,它通过DispatcherServlet作为前端控制器,将请求分发到对应的处理器(Controller),并完成视图渲染或JSON响应。
2. SpringMVC干嘛的?
- 接收并处理用户的HTTP请求;
- 分发请求到对应的Controller处理器;
- 处理请求参数、调用业务逻辑;
- 封装处理结果,返回视图或JSON响应;
- 提供拦截器、异常处理、数据绑定等Web层通用功能。
3. JSP是什么?(JavaServer Pages)
JSP(JavaServer Pages)是一种服务器端动态网页技术,用于在HTML页面中嵌入Java代码,生成动态内容。
- 原理:JSP文件会被服务器编译为Servlet,处理请求后生成HTML返回给客户端;
- 作用:早期Web开发中,用于实现页面与数据的动态渲染(如结合ModelAndView填充数据并生成页面);
- 现状:前后端分离开发模式下,JSP使用较少,通常由前端框架(如Vue、React)承担页面渲染工作。
二、SpringMVC核心组件
- DispatcherServlet(前端控制器):整个流程的入口,负责接收请求、分发处理、协调各组件工作。
- HandlerMapping(处理器映射器):根据请求URL找到对应的处理器(Controller),返回处理器执行链(含拦截器)。
- HandlerAdapter(处理器适配器):适配不同类型的处理器,调用Controller的方法,处理参数绑定和返回值。
- Handler(处理器/Controller):业务逻辑处理单元,接收请求并返回处理结果。
- ViewResolver(视图解析器):将逻辑视图名解析为具体的视图对象(如JSP文件)。
- View(视图):负责将Model数据渲染为客户端响应(如HTML页面、JSON数据)。
三、两种执行流程详解
1. 视图阶段(JSP版本)
- 用户发送请求到DispatcherServlet;
- DispatcherServlet调用HandlerMapping,根据URL找到对应的处理器,返回处理器执行链;
- DispatcherServlet调用HandlerAdapter,适配并调用Controller方法;
- Controller执行业务逻辑,返回ModelAndView对象(包含数据和逻辑视图名);
- HandlerAdapter将ModelAndView返回给DispatcherServlet;
- DispatcherServlet将ModelAndView传给ViewResolver;
- ViewResolver解析逻辑视图名,找到对应的JSP视图;
- DispatcherServlet将Model数据填充到JSP中,渲染生成HTML;
- DispatcherServlet将最终HTML响应给用户。
2. 前后端分离阶段(接口开发版本)
- 用户发送请求到DispatcherServlet;
- DispatcherServlet调用HandlerMapping,根据URL找到对应的处理器,返回处理器执行链;
- DispatcherServlet调用HandlerAdapter,适配并调用Controller方法;
- Controller方法添加
@ResponseBody注解,处理请求并返回数据对象; - HandlerAdapter通过
HttpMessageConverter将数据对象转换为JSON格式; - DispatcherServlet将JSON数据直接响应给用户,无需视图渲染。
四、面试基础常识
问:SpringMVC的核心组件有哪些?答: 核心组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、Handler、ViewResolver、View,其中DispatcherServlet是前端控制器,负责流程协调。
问:DispatcherServlet的作用是什么?答: 作为SpringMVC的前端控制器,负责接收所有HTTP请求,分发到对应的处理器,协调各组件工作,并最终返回响应结果,是整个请求流程的入口和中枢。
问:HandlerMapping和HandlerAdapter的区别是什么?答: HandlerMapping负责根据请求URL找到对应的处理器,返回处理器执行链;HandlerAdapter负责适配处理器的调用,处理参数绑定、返回值转换,让DispatcherServlet无需关心处理器的具体实现方式。
问:@ResponseBody的作用是什么?答:
@ResponseBody注解用于将Controller方法的返回值直接转换为JSON格式,通过HttpMessageConverter写入HTTP响应体,实现前后端分离的接口响应,无需经过视图解析和渲染流程。问:JSP和前后端分离开发的区别是什么?答: JSP是服务器端动态页面技术,需要在服务器端渲染生成HTML;前后端分离开发中,后端仅返回JSON数据,由前端框架在客户端渲染页面,职责更清晰,开发和维护更高效。