版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SpringMVC高频面试题及详细答案(实战版)一、基础概念类1、什么是SpringMVC?它的核心作用是什么?SpringMVC是Spring框架自带的一款轻量级Web层MVC框架,基于MVC设计模式实现,专门用于JavaWeb项目的请求接收、处理、响应全流程管控。核心作用主要有三点:彻底解耦Web层代码,拆分请求分发、业务处理、视图渲染逻辑,让代码结构更清晰;封装原生Servlet繁琐操作,开发者无需手动处理request、response、参数解析、乱码处理等基础工作;适配REST风格接口,完美适配前后端分离开发模式,是目前JavaWeb项目的主流Web框架。2、SpringMVC的MVC分别代表什么?各自职责?M(Model模型):数据模型,包含业务数据和业务逻辑。一般指实体类、Service层、DAO层,负责封装数据、处理业务逻辑、操作数据库,不参与页面和请求交互。V(View视图):数据展示层,负责将处理后的结果展示给用户。传统项目指JSP、HTML,前后端分离项目中视图由前端页面承担,后端只返回JSON数据。C(Controller控制器):请求调度核心,接收前端请求,调用对应Service处理业务,接收返回数据,最终封装结果响应前端,不直接处理业务逻辑。3、SpringMVC和Struts2的核心区别?(高频对比题)日常开发中最核心的区别集中在控制器、线程安全、性能、配置四个方面:控制器实现:SpringMVC基于方法拦截,Controller是单例;Struts2基于类拦截,每个请求都会创建一个新的Action实例。线程安全:SpringMVC单例无成员变量,线程安全;Struts2多实例,不存在线程安全问题,但会频繁创建销毁对象。性能:SpringMVC无需频繁创建对象,启动和运行速度更快;Struts2性能相对较差。参数接收:SpringMVC直接绑定方法参数,简洁高效;Struts2通过成员变量接收参数,容易出现参数污染。适配场景:目前企业基本全部使用SpringMVC,Struts2已基本淘汰,仅老旧项目可见。二、核心原理与执行流程4、SpringMVC核心组件有哪些?各自作用?SpringMVC整套流程依赖5大核心组件,缺一不可:DispatcherServlet(前端控制器):整个SpringMVC的入口,统一接收所有客户端请求,负责请求分发、流程调度、整体管控,相当于总调度员。HandlerMapping(处理器映射器):根据请求的URL地址,匹配对应的Controller处理器,找到处理当前请求的方法,返回处理器执行链。HandlerAdapter(处理器适配器):适配不同类型的处理器,统一调用规则,帮助DispatcherServlet执行目标Controller方法,解决不同处理器调用方式不一致的问题。ViewResolver(视图解析器):对方法返回的视图名称进行解析,拼接前缀后缀,找到真实视图资源;前后端分离项目中该组件基本失效。Handler(处理器):也就是我们自定义的Controller接口方法,真正执行业务请求、处理逻辑。5、详细说一下SpringMVC完整执行流程?(必考题)以客户端发起一次接口请求为例,完整执行步骤如下:客户端(浏览器/前端)发起HTTP请求,请求被DispatcherServlet统一拦截接收;DispatcherServlet将请求交给HandlerMapping,根据请求URL匹配对应的Controller方法,生成处理器执行链;DispatcherServlet调用HandlerAdapter,由适配器适配并准备执行目标方法;HandlerAdapter完成请求参数解析、封装、校验,调用对应的Controller接口方法;Controller调用Service、DAO层处理业务逻辑,处理完成后返回数据(视图名/JSON数据);如果是传统视图模式,ViewResolver解析视图路径,渲染视图;如果是前后端分离,直接封装返回结果;DispatcherServlet统一封装响应结果,返回给客户端,流程结束。6、DispatcherServlet的初始化时机?默认情况下,DispatcherServlet在客户端第一次请求到来时初始化,可以减少项目启动耗时;可以通过配置load-on-startup参数,设置为正数,让项目启动时就初始化DispatcherServlet,提前加载核心资源,避免首次请求卡顿。三、注解与参数绑定核心7、@RequestMapping、@GetMapping、@PostMapping区别和使用场景?@RequestMapping:通用请求映射,不限制请求方式(GET/POST/PUT/DELETE都支持),可以作用在类和方法上。缺点是安全性低、接口语义不清晰,开发中不推荐单独使用。@GetMapping:仅支持GET请求,用于查询数据,参数拼接在URL中,请求速度快、有缓存,适合列表查询、详情查询接口。@PostMapping:仅支持POST请求,参数放在请求体中,无缓存、数据传输安全,适合新增、提交表单、上传数据等接口。企业开发规范:严格区分请求方式,查询用GET,新增/修改用POST,保证接口语义统一。8、SpringMVC常用的参数接收方式有哪些?日常开发5种主流参数接收方式,覆盖所有业务场景:直接接收简单参数:方法参数名和前端传参名一致,自动绑定,适合少量简单参数;@RequestParam接收参数:适用于URL拼接参数、表单参数,可设置默认值、是否必填,解决参数名不一致问题;@PathVariable接收路径参数:用于REST风格接口,接收URL路径中的变量,如/user/{id};实体类接收参数:前端参数和实体类属性名一致,自动封装,适合多参数表单提交;@RequestBody接收JSON参数:前后端分离必备,接收前端传递的JSON格式请求体,自动解析封装为实体对象。9、@RequestParam和@PathVariable的核心区别?传参位置不同:@RequestParam接收URL问号后面的参数(?id=1&name=test);@PathVariable接收URL路径中的参数(/user/1)。使用场景不同:@RequestParam适用于普通查询、表单提交;@PathVariable适用于REST风格接口,路径层级清晰。参数定义不同:@RequestParam可设置defaultValue、required;@PathVariable默认必填,无默认值配置。10、@RequestBody注解的作用?为什么前后端分离必须用它?SpringMVC默认只能解析表单、URL拼接参数,无法直接解析JSON格式数据。@RequestBody的核心作用是读取请求体中的JSON数据,通过内置的Jackson工具自动封装为Java对象。前后端分离项目中,前端统一传递JSON格式参数,表单传参方式基本废弃,因此所有接收JSON参数的接口都必须添加该注解。注意:GET请求没有请求体,因此@RequestBody不能用于GET接口。四、乱码、异常、拦截器核心问题11、SpringMVC如何解决请求乱码问题?POST乱码和GET乱码解决方案不同,企业标准配置如下:POST请求乱码:在web.xml中配置Spring自带的CharacterEncodingFilter,统一设置编码为UTF-8,强制请求和响应编码一致,彻底解决POST乱码。GET请求乱码:过滤器无法解决GET乱码,需要修改Tomcat配置,将server.xml中URIEncoding设置为UTF-8;SpringBoot项目可直接在配置文件中配置编码,无需修改Tomcat。12、SpringMVC拦截器(HandlerInterceptor)的作用和执行流程?拦截器是SpringMVC专属组件,用于对Controller请求进行预处理和后处理,可以统一做权限校验、登录拦截、日志记录、参数校验,区别于Servlet过滤器,只拦截Controller请求。三大核心方法及执行顺序:preHandle:Controller方法执行前执行,返回true放行请求,返回false拦截请求(常用做登录校验、权限拦截);postHandle:Controller方法执行完毕、视图渲染前执行,可修改视图数据;afterCompletion:整个请求流程结束、视图渲染完成后执行,用于资源释放、日志记录。13、拦截器和过滤器(Filter)的区别?(高频面试题)对比维度过滤器Filter拦截器Interceptor归属层级Servlet原生组件,属于Web层底层SpringMVC自定义组件,隶属于Spring框架拦截范围拦截所有请求,包括静态资源、JSP、图片只拦截Controller接口请求,不拦截静态资源执行顺序先执行过滤器,后执行拦截器过滤器之后,Controller之前执行依赖容器依赖Tomcat容器,不依赖Spring依赖Spring容器,可注入SpringBean使用场景统一乱码处理、跨域、请求过滤登录校验、权限控制、接口日志、限流14、SpringMVC全局异常处理器的作用?如何实现?开发中如果每个接口都单独try-catch,代码冗余极高。SpringMVC提供全局异常处理机制,统一捕获项目所有Controller层异常,统一封装异常返回结果,保证前端响应格式统一。主流实现方式(SpringBoot常用):使用@RestControllerAdvice定义全局异常处理类;通过@ExceptionHandler捕获指定异常(空指针、参数异常、自定义业务异常等);统一返回标准化的JSON结果,避免前端收到杂乱的异常信息。五、转发、重定向与REST风格15、SpringMVC中转发(forward)和重定向(redirect)的区别?转发(forward):服务器内部跳转,只发起一次请求,浏览器地址栏URL不变,共享request数据,效率更高,只能跳转项目内部资源。重定向(redirect):客户端二次跳转,服务器返回302状态码,浏览器重新发起新请求,地址栏URL改变,不共享request数据,可跳转外部链接。开发场景:内部页面跳转用转发,跳转外部地址、防止表单重复提交用重定向。16、什么是REST风格接口?优势是什么?REST是一种接口设计规范,通过请求方式区分操作类型,URL只定义资源路径,不出现动词。标准规范:GET:查询资源POST:新增资源PUT:修改资源DELETE:删除资源优势:接口语义清晰、统一规范、简洁易维护、适配前后端分离、便于接口文档生成。六、高频疑难实战问题17、为什么Controller可以是单例?会不会有线程安全问题?Spring默认将Controller交由工厂单例创建,全程只有一个对象。没有线程安全问题,核心原因:Controller中基本不定义成员变量,所有请求数据都是以方法局部变量的形式存在,每个线程都有独立的栈空间,互不干扰,因此单例运行安全且高效。如果自定义了成员变量且对其修改,就会出现线程安全问题,这是开发中需要规避的写法。18、SpringMVC静态资源放行怎么配置?SpringMVC默认会拦截所有请求,包括静态资源(图片、JS、CSS、html),需要手动放行:传统SSM项目:在spring-mvc.xml中配置<mvc:resources>标签,指定静态资源路径;SpringBoot项目:实现WebMvcConfigurer接口,重写addResourceHandlers方法,放行静态资源,无需XML配置。19、@ResponseBody注解作用?默认情况下,Controller方法返回字符串会被视图解析器解析为视
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 蔬菜栽培工风险识别知识考核试卷含答案
- 2026年税收执法资格考试模拟题及答案详解
- 2026年辽宁省公务员申论(A卷)模拟题及答案详解
- 2026年高级维修电工模拟试卷及答案详解
- 2026年太空探索模拟题及答案详解
- 2026年事业单位c类专业考试模拟题及答案详解
- 中式面点师安全宣教知识考核试卷含答案
- 2026年杭州考职高模拟试题(含答案)
- 2026年航空法规考试模拟试卷(含答案)
- 2026年热电集团考试模拟题及答案详解
- 江苏省2025年普通高中学业水平合格性考试语文试卷(含答案)
- 陕西省西安市高新唐南中学2026届生物高二上期末统考模拟试题含解析
- 扫黄打非安全课课件
- 国家义务教育质量监测劳动试题
- GB/T 17843-2025船舶与海上技术挖泥船术语
- 张家口市人民医院输血相容性检测室内质控操作与分析试题
- 2.2大气的受热过程和大气运动课件-高中地理人教版必修1
- 产品项目技术问题记录及跟踪管理模板
- 光纤通信技术应用与发展
- 铁路信号设计与施工铁路信号电缆配线09课件
- 学前儿童归属感的发展与教育
评论
0/150
提交评论