版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringMVC高频面试题及详细实战答案一、基础认知类(入门必问)1、什么是SpringMVC?它的核心作用是什么?SpringMVC是Spring框架自带的一套轻量级WebMVC框架,基于MVC设计模式实现,专门用于JavaWeb层开发,不用额外引入第三方Web框架。核心作用:彻底接管Web层的请求处理,负责接收前端请求、参数封装、调用业务逻辑、封装响应结果、视图跳转,完整实现Web层的解耦,让控制器、视图、模型职责分离,代码更清晰、易维护。2、SpringMVC和Struts2的区别?(经典对比题)这是老项目改造、中级开发常问的对比问题,核心区别有几点:设计核心:SpringMVC是基于方法拦截,单例运行;Struts2基于类拦截,每次请求创建新对象,多例运行。性能:SpringMVC单例无对象创建开销,响应更快、并发性能更好;Struts2频繁创建销毁对象,高并发下性能偏弱。参数接收:SpringMVC直接绑定方法参数,简洁灵活;Struts2通过成员变量接收参数,多线程下容易出现参数混乱问题。整合性:SpringMVC无缝整合Spring全家桶,事务、Bean管理、权限等直接复用;Struts2属于独立框架,和Spring整合需要额外配置。目前企业基本全部使用SpringMVC,Struts2基本已淘汰。3、SpringMVC的核心组件有哪些?各自作用?五个核心组件,是SpringMVC运行的核心骨架:DispatcherServlet(前端控制器):整个流程的入口,统一接收所有请求,分发请求、调度各个组件,是SpringMVC的核心中枢。HandlerMapping(处理器映射器):根据请求的URL地址,匹配对应的Controller处理器,找到要执行的方法。HandlerAdapter(处理器适配器):适配不同类型的处理器,调用目标Controller方法,执行业务逻辑。ViewResolver(视图解析器):对方法返回的视图名称进行解析,拼接前后缀,找到真实的视图页面(JSP/HTML)。Handler(处理器):也就是我们自己写的Controller控制器,负责具体的业务请求处理。二、核心流程类(面试高频重点)4、详细说一下SpringMVC的完整执行流程?我用实战落地的流程,按请求执行顺序梳理,面试直接背这套即可:客户端发起请求(浏览器/APP发送HTTP请求),请求统一被DispatcherServlet拦截接收。DispatcherServlet调用HandlerMapping,根据请求URL匹配对应的Controller方法,获取处理器执行链。DispatcherServlet调用HandlerAdapter,由适配器适配并准备执行目标方法。执行拦截器前置方法(preHandle),放行后进入Controller。SpringMVC自动完成请求参数解析、类型转换、数据绑定、校验,封装参数到方法入参。执行Controller中的业务方法,处理请求,返回结果(视图名/JSON数据)。执行拦截器后置方法(postHandle)。如果返回视图,ViewResolver解析视图路径,渲染视图页面;如果是JSON,直接通过消息转换器响应数据。执行拦截器最终方法(afterCompletion),请求结束,响应数据返回客户端。5、DispatcherServlet为什么是单例?会不会有线程安全问题?DispatcherServlet是Servlet,天生单例,全局只创建一个对象。不会出现线程安全问题:Servlet本身没有成员变量,所有请求参数、处理数据都是存放在线程局部变量中,每个请求是独立线程,互不干扰。我们开发的Controller默认也是单例,只要不定义可变的成员变量,就不会有线程安全问题。实战规范:Controller中绝对不要定义可修改的成员变量,避免多线程并发冲突。三、注解与参数解析(日常开发必考)6、@RequestMapping、@GetMapping、@PostMapping的区别和使用场景?@RequestMapping:通用请求注解,不限制请求方式(GET/POST/PUT/DELETE都可以接收),可以标注在类和方法上。类上定义公共路径,方法上定义细分路径。@GetMapping:仅接收GET请求,用于查询类接口(查询列表、详情),参数拼接在URL中。@PostMapping:仅接收POST请求,用于新增、提交类接口,参数放在请求体中,更安全、可传大量数据。开发规范:查询用GET,新增用POST,修改用PUT,删除用DELETE,严格区分请求方式,接口更规范。7、@RequestParam和@PathVariable区别?两个都是接收请求参数,但是参数位置完全不同:@RequestParam:接收URL后面的拼接参数(?name=xxx&age=xxx),也可以接收表单参数。支持设置默认值、是否必传。@PathVariable:接收URL路径变量(/user/1001),用于RESTful风格接口,1001就是路径参数。实战举例:
查询参数:/user/list?page=1用@RequestParam
查询详情:/user/1001用@PathVariable8、@RequestBody的作用?什么时候使用?@RequestBody用于接收请求体中的JSON格式数据,自动将JSON字符串解析为Java对象。使用场景:前端通过POST/PUT提交JSON数据(新增用户、修改信息),必须加该注解。GET请求没有请求体,不能使用@RequestBody。底层原理:通过SpringMVC的MappingJackson2HttpMessageConverter消息转换器实现JSON和对象的互转。9、SpringMVC参数绑定的过程?请求到达Controller方法前,自动完成全套绑定:获取前端传入的原始参数(URL参数、请求体参数、表单参数);参数类型转换器做类型转换(String转Integer、Date等);数据绑定,将参数封装到实体类或普通参数中;执行JSR303数据校验(@NotBlank、@NotNull等);将封装好的参数传入Controller方法,执行业务逻辑。四、拦截器与过滤器(高频对比考点)10、SpringMVC拦截器(HandlerInterceptor)的执行流程?三个方法作用?拦截器只拦截Controller请求,是Spring自己的组件,三个核心方法:preHandle:Controller方法执行前执行,返回true放行,false拦截请求。常用于登录校验、权限拦截、Token验证。postHandle:Controller方法执行完毕、视图渲染前执行。常用于修改视图数据、统一处理返回视图。afterCompletion:整个请求执行完毕、视图渲染完成后执行。常用于资源释放、日志记录、请求耗时统计。11、拦截器和过滤器(Filter)的区别?(必问)这是面试超级高频的对比题,核心区别整理如下:所属体系不同:Filter是Servlet原生组件,属于Web容器;Interceptor是SpringMVC组件,由Spring管理。拦截范围不同:Filter拦截所有请求(静态资源、Servlet、Controller全部拦截);Interceptor只拦截Controller接口请求。执行顺序不同:请求进来先过Filter,再进DispatcherServlet,最后执行Interceptor。使用场景不同:Filter适合全局编码过滤、跨域处理、静态资源拦截;Interceptor适合权限控制、登录校验、接口日志、Token校验。能否获取Bean:Filter无法直接注入SpringBean;Interceptor可以直接注入Service、Mapper等Bean。五、异常处理与响应机制12、SpringMVC统一异常处理怎么做?企业主流方案:使用@RestControllerAdvice+@ExceptionHandler实现全局统一异常处理。原理:通过全局切面拦截所有Controller抛出的异常,分类捕获(空指针、参数异常、自定义业务异常、系统异常),统一封装成标准的JSON响应结果,避免前端收到杂乱的异常堆栈信息。拓展:可以结合@Valid校验,统一处理参数校验异常,返回友好的错误提示。13、@ResponseBody作用?原理是什么?@ResponseBody作用是将方法返回值直接以JSON格式响应给前端,不跳转视图。底层原理:方法执行后,SpringMVC不会走视图解析流程,而是通过消息转换器,把返回的对象、集合、字符串转为JSON字符串,写入响应体返回前端。补充:@RestController注解=@Controller+@ResponseBody,所有方法默认返回JSON。六、核心原理与进阶问题(中级面试重点)14、SpringMVC怎么解决跨域问题?三种常用实战方案,按企业使用频率排序:注解跨域:在Controller类或方法上加@CrossOrigin,简单快捷,适合局部接口跨域。全局配置跨域:实现WebMvcConfigurer接口,重写addCorsMappings方法,统一配置所有接口跨域,企业项目主流用法。过滤器跨域:自定义CorsFilter过滤器,设置跨域响应头,优先级最高。15、SpringMVC的视图解析原理?当Controller方法返回字符串视图名时,视图解析器会自动拼接前缀和后缀。比如配置前缀/WEB-INF/pages/、后缀.jsp,方法返回"index",视图解析器会自动拼接为/WEB-INF/pages/index.jsp,然后渲染页面。前后端分离项目中,基本不使用视图解析,所有接口全部返回JSON数据。16、SpringMVC工作中常见的报错及原因?404:URL路径错误、Controller未注册、请求方式不匹配、静态资源路径错误。405:请求方式不匹配(接口只支持GET,前端传了POST)。400:参数绑定失败、参数类型不匹配、JSON格式错误、必填参数为空。500:代码空指针、业务异常、数据库异常、参数校验失败未捕获。17、WebMvcConfigurer接口的作用?常用方法有哪些?WebMvcConfigurer是SpringMVC的自定义配置接口,用于扩展Web功能,不覆盖SpringMVC自动配置,是现在主流配置方式(替代老式WebMvcConfigurerAdapter)。常用核心方法:addInterceptors:注册自定义拦截器addCorsMappings:全局跨域配置addResourceHandlers:静态资源映射configureMessageConverters:自定义消息转换器,统一返回时间格式、编码七、面试简答压轴题18、简单说说SpringMVC的核心设计思想?核心就是分层解耦、统一调度、自动适配。通过前端控制器统一接收所有请求,拆分映射、适配、视图解析、拦截等独立组件,各司其职。开发者只需要专注编写Controller业务代码,底层请求分发、参数解析、响应封装全部由框架自动完成,极
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 威海市2027届中考押题物理预测卷含解析
- 回复项目验收测试结果确认函8篇范文
- 关于2026年合作项目进度汇报事宜的回复函5篇范文
- 2026年CCAA国家注册审核员考试(知识产权管理体系基础)强化练习题及答案
- 2026网络布线员中级考试及答案
- 2026年职称评审专业技术人员继续教育工伤预防考试题及答案
- 紧急任务处理能力考核表
- 仓储管理员练习题库(附参考答案)
- 2026年自考经济学专业考试试卷及答案
- 客户服务支持人员服务水平绩效考评表
- 2026年焊工技术比赛模拟试题(含答案)
- 人教版五年级上册第三单元习作:故事新编 写作指导课件
- 2026年安全员C证(专职安全生产管理人员)考试题库及答案
- 林芝市巴宜区社区工作人员《网格员》考试全真模拟易错、难点汇编题库(附答案)
- 换热站系统调试作业方案
- 降级技术精神科
- 家庭劳动安全课件
- 叉车保养记录表格
- 物业费催缴的技巧和方法
- 酒店星评汇报
- 风湿性患儿的护理
评论
0/150
提交评论