版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringMVC高频面试题及详细答案(实战口语版)一、基础认知类(入门必问)1、什么是SpringMVC?它的核心作用是什么?SpringMVC是Spring框架自带的一个MVC分层的Web框架,专门用来做Java后端的请求接收、处理和响应,是目前SSM、SpringBoot项目的web核心基础。简单说它的核心作用:接管浏览器的所有请求,分发请求给对应的Controller处理,封装数据、跳转页面或返回JSON,彻底替代原生Servlet,让web开发更简洁、高效。2、SpringMVC和Servlet的关系和区别?关系:SpringMVC底层就是基于Servlet实现的,它的核心前端控制器DispatcherServlet本质上是一个Servlet。核心区别:原生Servlet:需要自己写大量重复代码,手动获取参数、封装参数、处理乱码、跳转页面,每个请求路径基本都要对应一个Servlet类,冗余代码多。SpringMVC:对Servlet做了全面封装,自动完成参数接收、类型转换、乱码处理、视图跳转、JSON返回,支持注解开发,一个Controller类可以处理多个请求,代码极简。3、SpringMVC优点是什么?面试怎么简洁回答?日常面试直接说这几点就够,贴合实战:基于注解开发,代码简洁,开发效率高;组件解耦,请求分发、视图解析、异常处理都是独立组件,可自定义扩展;自动完成参数绑定、类型转换、乱码解决,不用手动写原生Servlet代码;完美整合Spring容器,所有组件交给Spring管理,事务、依赖注入直接用;天然支持RESTful风格接口,适配前后端分离开发。二、核心工作流程(必考重点)4、详细说一下SpringMVC的完整执行流程?这是面试高频必考,我整理的是面试官最爱听的实操流程,没有废话,步骤清晰:用户发起请求:浏览器/客户端发送HTTP请求,请求会先被SpringMVC的核心前端控制器DispatcherServlet拦截。请求分发(HandlerMapping):DispatcherServlet调用处理器映射器,根据请求的URL地址,匹配对应的Controller中的方法(Handler),并返回处理器执行链。获取适配器(HandlerAdapter):DispatcherServlet拿到Handler后,调用处理器适配器,适配当前Controller的执行规则,准备执行方法。执行Controller业务方法:适配器调用目标Controller的方法,SpringMVC自动完成请求参数的接收、封装、类型转换、校验,执行我们写的业务代码。封装ModelAndView:Controller方法执行完毕后,返回数据和视图信息,封装成ModelAndView对象(如果是返回JSON接口,这里不会封装视图,直接返回数据)。视图解析(ViewResolver):DispatcherServlet调用视图解析器,解析ModelAndView中的视图名称,拼接页面路径,找到对应的页面资源。视图渲染+响应结果:渲染页面数据,把最终结果(页面/JSON数据)响应给客户端浏览器。5、SpringMVC三大核心组件是什么?各自作用?核心三大组件:HandlerMapping、HandlerAdapter、ViewResolverHandlerMapping(处理器映射器):负责根据请求URL,找到对应的Controller处理方法,简单说就是找方法。HandlerAdapter(处理器适配器):负责适配不同类型的Controller方法,统一调用规则,执行目标方法,简单说就是执行方法。ViewResolver(视图解析器):负责解析视图名称,拼接页面前缀后缀,定位页面资源,简单说就是找页面。补充:DispatcherServlet是核心中枢,不属于三大组件,是统筹所有组件的核心控制器。三、参数绑定与请求处理(实操高频)6、SpringMVC怎么接收前端参数?有几种方式?日常开发常用5种方式,面试直接按场景说:普通参数接收:方法参数名和前端传参名一致,自动接收,适合简单参数;实体类接收:用Java实体类接收多个参数,属性名和前端参数对应,适合表单提交;@RequestParam:手动绑定参数,适用于参数名和实体属性名不一致、参数必传、默认值设置场景;@PathVariable:接收URL路径参数,专门用于RESTful风格接口;@RequestBody:接收前端JSON格式参数,前后端分离项目最常用,自动将JSON转为Java对象。7、@RequestParam和@PathVariable区别?@RequestParam:获取请求参数,也就是URL后面?拼接的参数,或者表单提交参数,格式:url?name=xxx&age=xxx。@PathVariable:获取URL路径变量,参数直接写在URL路径中,格式:url/{id}/{name},用于RESTful接口。8、@RequestBody的作用?有什么注意事项?作用:用来接收前端传递的JSON格式请求体数据,自动通过jackson工具把JSON字符串解析成Java对象。注意事项(面试常问坑点):只能接收POST、PUT等有请求体的请求,GET请求没有请求体,不能用;前端必须传JSON格式,请求头Content-Type必须是application/json;一个接口方法只能有一个@RequestBody注解。9、SpringMVC如何解决POST请求乱码问题?核心方案:配置SpringMVC自带的CharacterEncodingFilter全局乱码过滤器。在web.xml或者配置类中统一设置编码为UTF-8,强制覆盖请求和响应的编码格式,彻底解决POST乱码。补充:GET请求乱码不是SpringMVC的问题,是Tomcat服务器的问题,需要修改Tomcat配置或者URL编码处理。10、SpringMVC自动类型转换原理?SpringMVC内置了大量的转换器(Converter),接收前端参数时,会自动根据方法参数类型做转换:比如前端传字符串数字,后台定义Integer类型参数,框架会自动转;前端传日期字符串,可自动转为Date对象。如果是自定义类型、特殊日期格式等,需要自己自定义转换器注册到Spring容器。四、响应与视图、JSON处理11、SpringMVC如何返回JSON数据?原理是什么?现在前后端分离项目,基本都是两种注解配合:@Controller+@ResponseBody,或者直接用@RestController(组合注解,包含上面两个)。底层原理:标注@ResponseBody后,SpringMVC不会走视图解析器跳转页面,会调用内置的MappingJackson2HttpMessageConverter消息转换器,把Java对象自动序列化为JSON字符串,写入响应体返回给前端。12、@RestController和@Controller区别?@Controller:标准控制器,默认返回视图页面;如果需要返回JSON,必须在方法上加@ResponseBody。@RestController:是@Controller+@ResponseBody的合体,所有方法默认返回JSON数据,不会跳转视图,专门用于接口开发。13、SpringMVC转发和重定向的区别?转发(forward):服务器内部跳转,只发起一次请求,浏览器地址栏不变,共享request请求数据,只能跳转项目内部资源。重定向(redirect):浏览器二次跳转,发起两次请求,地址栏会变化,不共享request数据,可以跳转到外部网址。开发场景:后台页面跳转用forward,提交表单防重复提交用redirect。五、拦截器与过滤器(高频对比题)14、SpringMVC拦截器(Interceptor)的作用和执行时机?拦截器是SpringMVC的组件,专门用来拦截Controller请求,做统一预处理、后置处理,比如登录校验、权限拦截、日志记录。三大核心方法执行顺序:preHandle:Controller方法执行之前执行,返回true放行,false拦截,最常用;postHandle:Controller方法执行完,视图渲染之前执行;afterCompletion:整个请求结束,视图渲染完成后执行,用于资源释放。15、拦截器(Interceptor)和过滤器(Filter)的区别?【超级必考】面试必问,直接记核心四点,通俗易懂:所属层级不同:Filter是Servlet原生组件,属于web层;Interceptor是SpringMVC组件,属于框架层。拦截范围不同:Filter拦截所有请求,包括静态资源、JSP、Servlet;Interceptor只拦截Controller控制器请求。执行顺序不同:请求进来先过Filter,再进DispatcherServlet,最后才到Interceptor。使用权限不同:Filter不能使用Spring容器的Bean;Interceptor是Spring组件,可以直接注入Service、Mapper等Bean。六、异常处理机制16、SpringMVC统一异常处理怎么做?主流方式是使用@ControllerAdvice+@ExceptionHandler实现全局统一异常处理,也是企业开发标准写法。原理:@ControllerAdvice是全局控制器增强注解,会拦截所有Controller的异常;@ExceptionHandler用来捕获指定类型的异常,我们可以自定义异常、统一返回前端的错误格式,避免后台直接抛出异常堆栈信息暴露给前端,界面更友好、安全性更高。补充:还有局部异常处理、简单异常处理器,但是企业基本只用全局统一异常处理。七、源码与进阶面试题(中高级必问)17、DispatcherServlet是什么?为什么是核心?DispatcherServlet是SpringMVC的前端核心控制器,整个SpringMVC的入口。所有客户端请求都会先经过它,它不处理具体业务,只负责统筹调度:调用映射器找方法、调用适配器执行方法、调用视图解析器解析页面、处理异常、响应结果,是整个流程的总指挥。18、SpringMVC的九大组件你了解吗?简单说几个核心的不用全背,面试说核心5个就够:处理器映射器、处理器适配器、视图解析器(三大核心组件);HandlerExceptionResolver:全局异常解析器,处理请求异常;MessageConverter:消息转换器,负责对象和JSON、字符串的转换;拦截器、文件上传解析器、本地化解析器等辅助组件。19、SpringMVC怎么实现文件上传?原理是什么?首先需要在容器中注入CommonsMultipartResolver文件上传解析器。前端表单设置enctype="multipart/form-data",后台使用MultipartFile参数接收文件。原理:SpringMVC通过文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业培训合作项目合同二篇
- 采购人员供应商管理效率考核表
- 绝缘子检测设备选型与应用指南
- 证券公司投行项目经理融资目标设定评估表
- 地铁隧道施工人员地质风险评估指引
- 机械制造工程师研发成果与生产效率绩效评定表
- 能源行业安全监察员安全绩效与目标达成能力绩效考核表
- 关于2026年合同到期事宜回复函(4篇)
- (正式版)DB14∕T 711-2012 《虹鳟三倍体制种技术规范》
- 游戏开发组运营主管绩效评估表
- 2026年食品安全员专业知识考试题库(含答案)
- 40248-2026人员密集场所消防安全管理
- 2025年湖南能源集团招聘考试笔试试题含答案
- 数字测绘成果质量保证体系与管控方案 技术标专用
- 半导体供应链韧性研究与对策分析
- 医学康复科病历书写规范培训
- 2026年秋季小学低年级班主任课堂纪律管理经验课件
- 2026年小学青岛版(六三制)六年级科学上册全册教案
- 2026年秋季开学初三弱科突破备考规划课件
- 围墙及厂区道路改造工程施工组织设计
- 2026年长期照护师资格考试试卷及答案(共十二套)
评论
0/150
提交评论