SpringMVC 高频面试题及详细答案(实战版)_第1页
SpringMVC 高频面试题及详细答案(实战版)_第2页
SpringMVC 高频面试题及详细答案(实战版)_第3页
SpringMVC 高频面试题及详细答案(实战版)_第4页
SpringMVC 高频面试题及详细答案(实战版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SpringMVC高频面试题及详细答案(实战版)一、基础概念类1、什么是SpringMVC?它的核心作用是什么?SpringMVC是Spring框架提供的一款轻量级、基于MVC设计模式的Web层框架,是目前JavaWeb项目主流的控制器框架,专门用于处理浏览器请求、后台业务调度、响应结果封装。核心作用:彻底解耦Web层的请求接收、业务调用、结果响应,替代原生Servlet的繁琐开发,简化Web接口开发流程,统一项目请求处理规范,适配前后端分离、传统页面渲染等多种Web开发场景。2、SpringMVC的M、V、C分别代表什么?各自职责?M(Model模型):数据模型,负责封装业务数据和处理业务逻辑。包含实体类、Service层、Dao层,用于承载请求参数、数据库查询结果等数据,不直接和前端交互。V(View视图):页面视图,负责数据展示。传统项目为JSP、HTML页面,前后端分离项目中视图为前端页面、JSON数据返回体,只负责展示数据,不处理业务。C(Controller控制器):请求调度中心,核心中枢。接收前端请求,调用Service层处理业务,接收Model数据,封装响应结果,跳转视图或返回数据,不直接处理业务逻辑。3、SpringMVC和Struts2的核心区别?(高频面试对比)1、控制器实现不同:SpringMVC基于Servlet实现,是单例多线程;Struts2基于Filter实现,每次请求创建新对象,多例模式,内存开销更大。2、请求参数绑定不同:SpringMVC直接绑定方法参数,支持基本类型、对象、集合,绑定简洁;Struts2绑定类成员变量,容易出现参数串扰问题。3、性能差异:SpringMVC单例运行、启动快、请求响应效率高;Struts2多例创建对象,频繁GC,并发性能较弱。4、整合性:SpringMVC是Spring生态原生组件,和Spring、SpringBoot无缝整合,零配置适配;Struts2需要额外配置,生态适配性差。目前企业项目基本全部使用SpringMVC,Struts2已基本淘汰。二、核心工作原理(重中之重)4、SpringMVC的完整执行流程?详细步骤说明这是SpringMVC最核心的面试考点,完整执行流程共9步,贴合源码执行逻辑:1、客户端发起请求:浏览器/前端发送HTTP请求,请求到达服务器。2、前端控制器拦截请求:DispatcherServlet(核心中枢,统一入口)拦截所有请求,是整个SpringMVC的入口。3、处理器映射器解析请求:DispatcherServlet调用HandlerMapping,根据请求URL匹配对应的Controller方法(处理器),返回处理器执行链(包含Controller、拦截器)。4、处理器适配器适配执行:DispatcherServlet调用HandlerAdapter,适配当前处理器的执行规则,统一调用标准,适配不同类型的控制器方法。5、执行控制器业务逻辑:HandlerAdapter执行匹配到的Controller方法,方法内部调用Service、Dao层完成业务处理,返回ModelAndView(数据+视图信息)。6、视图解析器解析视图:DispatcherServlet接收ModelAndView,调用ViewResolver视图解析器,解析视图路径,拼接完整视图地址。7、视图渲染:系统加载对应视图页面,将Model中的数据填充到视图中,完成数据渲染。8、拦截器后置处理:执行拦截器的后置方法,完成日志、权限、参数清理等操作。9、响应客户端:DispatcherServlet将渲染后的页面或JSON数据返回给前端,请求结束。5、SpringMVC五大核心组件是什么?各自作用?1、DispatcherServlet(前端控制器):整个SpringMVC的核心入口,统一拦截所有请求,调度所有组件,负责请求分发、结果汇总,是整个框架的中枢。2、HandlerMapping(处理器映射器):负责URL和Controller方法的映射匹配,根据请求地址找到对应的处理器,不执行业务,只做匹配。3、HandlerAdapter(处理器适配器):统一控制器的执行规范,适配不同格式的Controller方法,让DispatcherServlet可以统一调用各类处理器。4、ViewResolver(视图解析器):负责解析视图名称,拼接视图路径,匹配对应的页面资源,完成视图定位。5、Handler(处理器):也就是我们自定义的Controller,负责具体的业务请求处理,接收参数、调用业务、返回结果。三、常用注解高频题6、@RequestMapping的作用及常用属性?作用:用于绑定请求URL地址和控制器方法,建立请求映射关系,可标注在类上和方法上。类上标注为全局路径前缀,方法上为具体接口路径。常用属性:1、value/path:指定请求URL路径;2、method:限定请求方式(GET、POST、PUT、DELETE);3、params:限定请求必须携带指定参数;4、headers:限定请求必须携带指定请求头;衍生注解:@GetMapping、@PostMapping、@PutMapping、@DeleteMapping,专门对应指定请求方式,代码更简洁。7、@RequestParam和@PathVariable的区别?@RequestParam:用于获取普通请求参数,也就是URL中?后面的参数,或者表单提交参数。示例:/user/get?name=张三,用于接收name参数。核心特点:参数是键值对形式,参数名可和方法参数名不一致,可设置默认值、是否必填。@PathVariable:用于获取路径变量,接收URL路径中的占位符参数,常用于RESTful风格接口。示例:/user/1001,通过{id}占位符接收1001。核心区别:一个是拼接参数,一个是路径参数;RESTful接口优先使用PathVariable。8、@RequestBody的作用和使用场景?作用:用于接收前端传递的JSON格式请求体数据,自动将JSON字符串封装为Java实体对象。使用场景:前后端分离项目,POST、PUT请求传递复杂对象、数组、集合数据时必须使用。注意点:1、只能接收请求体数据,不能接收URL拼接参数;2、前端必须设置请求头Content-Type为application/json;3、GET请求没有请求体,不能使用@RequestBody。9、@ResponseBody的作用?作用:将控制器方法的返回值直接转为JSON字符串,响应给前端,不会跳转视图页面。传统SpringMVC默认返回视图跳转,添加该注解后,直接返回数据,适配前后端分离开发。复合注解@RestController=@Controller+@ResponseBody,标注在类上,该类所有方法默认返回JSON数据。四、参数绑定与数据转换10、SpringMVC支持哪些参数绑定方式?1、基本类型绑定:String、Integer、int、Double等,直接作为方法参数,匹配URL参数;2、实体类绑定:自定义实体类,前端参数名和实体类属性名一致,自动封装;3、路径变量绑定:@PathVariable绑定RESTful路径参数;4、JSON参数绑定:@RequestBody绑定JSON对象、数组;5、集合参数绑定:List、Array、Map,支持批量参数接收;6、原生Servlet对象绑定:直接传入HttpServletRequest、HttpServletResponse、HttpSession。11、SpringMVC日期类型参数怎么处理?解决日期转换异常前端传递字符串日期,后台实体类为Date类型时,会出现类型转换失败,常用两种解决方案:1、注解方式(常用):在实体类日期字段添加@DateTimeFormat(pattern="yyyy-MM-ddHH:mm:ss"),自动完成字符串转日期;2、全局转换器方式:自定义全局日期转换器,统一项目所有日期格式转换,无需逐个注解;3、JSON场景:使用@JsonFormat(pattern="yyyy-MM-dd",timezone="GMT+8"),适配JSON日期序列化反序列化。五、拦截器与过滤器12、SpringMVC拦截器(Interceptor)的作用和执行时机?拦截器是SpringMVC提供的组件,用于对Controller请求进行预处理和后处理,常用于权限校验、登录拦截、日志记录、参数校验、跨域处理。三大核心方法及执行时机:1、preHandle:Controller方法执行前执行,返回true放行,false拦截请求,核心用于权限校验;2、postHandle:Controller方法执行完毕、视图渲染前执行,可修改Model数据、视图信息;3、afterCompletion:整个请求结束、视图渲染完成后执行,用于资源释放、日志记录。13、拦截器和过滤器(Filter)的区别?(超级高频)1、所属体系不同:Filter是Servlet原生组件,属于Web容器级别;Interceptor是SpringMVC框架组件,属于Spring框架级别。2、拦截范围不同:Filter拦截所有请求,包括静态资源(图片、js、css)、JSP、接口请求;Interceptor只拦截Controller控制器请求,不拦截静态资源。3、执行顺序不同:请求先经过Filter,再经过Interceptor,最后进入Controller;响应顺序相反。4、使用场景不同:Filter多用于全局编码过滤、跨域、静态资源过滤;Interceptor多用于业务权限、登录校验、接口日志。5、依赖不同:Filter不依赖Spring容器;Interceptor依赖Spring容器,可以注入Service、Bean。六、异常处理机制14、SpringMVC常用的异常处理方式有哪些?1、局部异常处理(@ExceptionHandler):标注在Controller内部,只处理当前控制器的异常,适合单个模块自定义异常处理。2、全局异常处理(@ControllerAdvice+@ExceptionHandler):项目全局统一异常拦截,所有控制器的异常都会被捕获,企业项目主流用法,统一返回异常格式。3、自定义异常处理器(HandlerExceptionResolver):实现接口自定义全局异常解析器,适配复杂异常场景。4、配置异常页面:在web.xml中配置404、500等错误页面,处理服务器基础异常。15、@ControllerAdvice的作用?是SpringMVC全局增强注解,主要用于全局统一异常处理、全局数据预处理、全局请求参数绑定。企业开发中最核心用途:配合@ExceptionHandler实现全局统一异常处理,统一项目所有接口的异常返回格式,避免前端接收杂乱的异常信息,保证接口返回格式统一。七、转发与重定向16、SpringMVC中转发和重定向的区别?1、请求次数不同:转发是一次请求,服务器内部跳转;重定向是两次请求,服务器返回状态码,浏览器重新发起请求。2、地址栏变化:转发地址栏URL不变;重定向地址栏会更新为新地址。3、数据共享:转发可以共享request域数据;重定向两次请求,request数据丢失,无法共享。4、跳转范围:转发只能跳转本项目资源;重定向可以跳转外部网站、跨项目资源。5、使用场景:转发用于内部页面跳转、携带参数;重定向用于防止表单重复提交、跳转外部地址。八、核心进阶问题17、DispatcherServlet的初始化时机?默认情况下,DispatcherServlet在客户端第一次请求到来时初始化,可以通过配置load-on-startup参数,设置服务器启动时自动初始化,提前加载核心组件,提升首次请求效率。18、SpringMVC怎么解决跨域问题?跨域是浏览器同源策略限制,SpringMVC提供三种主流解决方案:1、局部跨域:在Controller类或方法上添加@CrossOrigin注解,精准放行指定接口跨域;2、全局跨域配置:实现WebMvcConfigurer接口,重写addCorsMappings方法,全局统一配置所有接口跨域规则,企业常用;3、过滤器跨域:自定义CorsFilter过滤器,统一处理跨域请求。19、SpringMVC的单例问题,会不会存在线程安全问题?SpringMVC的Controller默认是单例,本身不存在线程安全问题。原因:Controller的所有请求参数、局部变量都是存储在线程栈中,每个请求对应一个独立线程,线程之间数据隔离。注意:如果在Controller中定义成员变量,多线程并发访问会出现数据覆盖,引发线程安全问题。解决方式:禁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论