JavaSpringMVC的题库及答案解析_第1页
JavaSpringMVC的题库及答案解析_第2页
JavaSpringMVC的题库及答案解析_第3页
JavaSpringMVC的题库及答案解析_第4页
JavaSpringMVC的题库及答案解析_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

JavaSpringMVC题库及答案一、单项选择题(共10题,每题1分,共10分)SpringMVC框架中负责拦截所有请求、作为总入口的核心组件是?A.DispatcherServletB.HandlerAdapterC.ModelAndViewD.ViewResolver答案:A解析:DispatcherServlet是SpringMVC的前端核心控制器,所有请求都会先经过它进行分发,是框架的总入口。选项B的HandlerAdapter作用是适配执行处理器方法;选项C的ModelAndView是封装返回数据和视图信息的对象;选项D的ViewResolver作用是将逻辑视图名解析为实际的视图对象。下列哪个注解的作用是将请求路径和控制器方法建立映射关系?A.@RequestMappingB.@AutowiredC.@ExceptionHandlerD.@RequestParam答案:A解析:@RequestMapping的核心作用就是配置请求路径与处理器方法的映射规则,还可以指定请求方式、参数要求等属性。选项B的@Autowired是Spring的依赖注入注解;选项C的@ExceptionHandler是异常处理注解;选项D的@RequestParam是获取请求参数的注解。ModelAndView对象中,用来设置逻辑视图名的方法是?A.setViewName()B.addObject()C.setView()D.addView()答案:A解析:setViewName()方法可以直接传入字符串类型的逻辑视图名,后续由视图解析器解析为实际视图。选项B的addObject()是向模型中添加返回数据的方法;选项C的setView()是传入已封装好的View对象的方法,并非设置视图名;SpringMVC中不存在addView()方法,因此选项D错误。当请求参数名和控制器方法形参名不一致时,使用哪个注解可以完成参数的映射绑定?A.@RequestParamB.@PathVariableC.@RequestBodyD.@RequestHeader答案:A解析:@RequestParam可以通过value属性指定请求参数名,完成与形参的映射,还可以设置默认值、是否必填等属性。选项B的@PathVariable是获取URL路径占位符参数的注解;选项C的@RequestBody是接收JSON格式请求体的注解;选项D的@RequestHeader是获取请求头参数的注解。想要将控制器方法的返回值直接转换为JSON格式写入响应体,需要使用哪个注解?A.@ResponseBodyB.@ComponentC.@ServiceD.@Repository答案:A解析:@ResponseBody的作用是跳过视图解析流程,直接将方法返回值通过消息转换器转换为指定格式(通常是JSON)写入响应体。选项B、C、D都是Spring的组件注册注解,分别用于通用组件、业务层组件、持久层组件的注册,和响应体输出无关。SpringMVC中自定义拦截器需要实现的核心接口是?A.HandlerInterceptorB.InterceptorC.WebInterceptorD.RequestInterceptor答案:A解析:HandlerInterceptor是SpringMVC官方提供的拦截器标准接口,自定义拦截器必须实现该接口并重写对应方法才能生效。选项B、C、D都不是SpringMVC提供的合法拦截器接口。下列哪个注解可以用来实现全局的控制器增强,常用来做全局异常处理?A.@ControllerAdviceB.@ExceptionHandlerC.@RestControllerD.@Configuration答案:A解析:@ControllerAdvice是全局控制器增强注解,结合@ExceptionHandler可以实现全局异常处理,还可以实现全局数据绑定、全局数据预处理等功能。选项B的@ExceptionHandler只能处理单个控制器内部的异常,单独使用无法实现全局处理;选项C的@RestController是控制器注解;选项D的@Configuration是配置类注解。传统基于commons-fileupload的文件上传功能,需要在Spring容器中注册哪个解析器?A.CommonsMultipartResolverB.ViewResolverC.HandlerMappingD.HandlerAdapter答案:A解析:CommonsMultipartResolver是专门用来解析文件上传请求的解析器,需要依赖commons-fileupload和commons-io包。选项B的ViewResolver是视图解析器;选项C的HandlerMapping是处理器映射器,负责根据请求找到对应的处理器;选项D的HandlerAdapter是处理器适配器,负责执行处理器方法。REST风格的接口中,想要获取URL路径中占位符的参数值,需要使用哪个注解?A.@PathVariableB.@RequestParamC.@RequestBodyD.@RequestPart答案:A解析:@PathVariable可以将URL路径中{xxx}格式的占位符值绑定到方法形参上,是REST风格接口的常用注解。选项B的@RequestParam获取的是URL问号后的查询参数;选项C的@RequestBody获取的是请求体中的数据;选项D的@RequestPart用来接收复杂请求中的文件参数。SpringMVC执行流程中,负责根据请求路径找到对应处理器方法和拦截器链的组件是?A.HandlerMappingB.HandlerAdapterC.ViewResolverD.DispatcherServlet答案:A解析:HandlerMapping的核心职责就是根据请求信息匹配到对应的处理器执行链。选项B的HandlerAdapter负责适配执行处理器方法;选项C的ViewResolver负责解析视图;选项D的DispatcherServlet是总控制器,负责调度各个组件,本身不做路径匹配工作。二、多项选择题(共10题,每题2分,共20分)下列属于SpringMVC核心组件的有?A.DispatcherServletB.HandlerMappingC.HandlerAdapterD.ViewResolver答案:ABCD解析:四个选项都是SpringMVC的核心组件,DispatcherServlet是总入口,HandlerMapping负责匹配处理器,HandlerAdapter负责执行处理器,ViewResolver负责解析视图,四个组件配合完成完整的请求处理流程。关于@RequestMapping注解的使用,下列说法正确的有?A.可以标注在控制器类上,作为父路径统一配置B.可以标注在控制器方法上,配置子路径和请求规则C.可以标注在成员属性上,完成属性的路径注入D.可以标注在方法形参上,完成参数的路径绑定答案:AB解析:@RequestMapping只能标注在类和方法上,标注在类上时,类上的路径会和方法上的路径拼接成完整的请求路径,方便同一控制器的路径统一管理。该注解不能标注在属性和参数上,因此选项C、D错误。下列属于SpringMVC支持的参数绑定类型的有?A.基本数据类型及其包装类B.自定义POJO类型C.List、Map等集合类型D.日期、文件等特殊类型答案:ABCD解析:SpringMVC的参数绑定机制非常完善,以上所有类型都支持,对于自定义类型、集合类型、特殊类型都可以通过内置的参数解析器完成绑定,还支持自定义转换器扩展支持更多类型。自定义HandlerInterceptor接口时,可以重写的方法有?A.preHandle()B.postHandle()C.afterCompletion()D.doFilter()答案:ABC解析:HandlerInterceptor接口包含三个默认方法,preHandle()在处理器执行前调用,postHandle()在处理器执行后、视图渲染前调用,afterCompletion()在整个请求处理完成后调用。选项D的doFilter()是Servlet过滤器的方法,不属于拦截器的方法。关于@RestController注解,下列说法正确的有?A.是组合注解,相当于@Controller加@ResponseBodyB.标注的类下所有方法默认都带有@ResponseBody的效果C.标注的类下所有方法都可以直接返回JSON格式数据D.标注的类只能处理GET类型的请求答案:ABC解析:@RestController是SpringMVC为REST接口开发提供的组合注解,省去了每个方法都加@ResponseBody的麻烦,所有方法的返回值都会直接写入响应体,支持所有请求方式,只要配合路径注解指定method即可,因此选项D错误。下列属于SpringMVC解决中文乱码的可行方案的有?A.配置CharacterEncodingFilter过滤器,统一设置请求响应编码为UTF-8B.在@RequestMapping注解上设置produces属性,指定响应的编码和格式C.手动设置HttpServletResponse的characterEncoding属性为UTF-8D.仅使用@RequestBody注解接收参数,自动处理所有中文乱码问题答案:ABC解析:前三个选项都是解决中文乱码的有效方案,CharacterEncodingFilter是最常用的全局编码解决方案,produces属性可以针对单个接口指定编码,手动设置response编码适合特殊场景的自定义处理。@RequestBody本身没有处理乱码的功能,依然需要依赖全局编码配置,因此选项D错误。下列注解可以用于SpringMVC异常处理的有?A.@ExceptionHandlerB.@ControllerAdviceC.@RestControllerAdviceD.@Autowired答案:ABC解析:@ExceptionHandler用来标记异常处理方法,@ControllerAdvice和@RestControllerAdvice都是全局控制器增强注解,结合@ExceptionHandler可以实现全局异常处理,@RestControllerAdvice是带@ResponseBody效果的全局增强注解,适合REST接口的全局异常处理。选项D的@Autowired是依赖注入注解,和异常处理无关。SpringMVC的视图解析器支持的视图类型有?A.JSP视图B.Thymeleaf视图C.Freemarker视图D.PDF、Excel等特殊视图答案:ABCD解析:SpringMVC的视图解析器是可扩展的,默认支持JSP,集成对应依赖后可以支持Thymeleaf、Freemarker等模板引擎视图,还可以自定义视图解析器支持PDF、Excel、图片等特殊类型的视图输出。关于SpringMVC和Servlet的关系,下列说法正确的有?A.DispatcherServlet本质上就是一个ServletB.SpringMVC是基于ServletAPI实现的Web框架C.SpringMVC的控制器本身就是Servlet类D.SpringMVC可以不依赖Servlet容器独立运行答案:AB解析:DispatcherServlet继承自HttpServlet,本质就是Servlet,SpringMVC整个框架都是基于ServletAPI封装的,必须运行在Tomcat等Servlet容器中。选项C错误,SpringMVC的控制器是普通的JavaBean,不是Servlet;选项D错误,必须依赖Servlet容器才能运行。下列属于SpringMVC框架优势的有?A.和Spring生态无缝集成,不需要额外的整合配置B.原生支持REST风格的接口开发,使用便捷C.组件化设计,各个组件都可以自定义扩展D.内置ORM框架,无需整合其他持久层框架答案:ABC解析:SpringMVC作为Spring全家桶的Web层组件,天生和Spring生态无缝集成,对REST的支持非常完善,所有核心组件都可以自定义替换,灵活性很高。选项D错误,SpringMVC本身是Web层框架,不内置ORM功能,需要整合MyBatis、SpringDataJPA等持久层框架使用。三、判断题(共10题,每题1分,共10分)SpringMVC的DispatcherServlet必须在配置类或者web.xml中注册并配置映射路径才能生效。答案:正确解析:DispatcherServlet是请求的总入口,只有配置了映射路径(通常是”/“),才能拦截到对应的请求进行处理,否则框架无法生效。@RequestMapping注解只能标注在控制器方法上,不能标注在类上。答案:错误解析:@RequestMapping可以同时标注在类和方法上,类上的路径作为父路径,方法上的路径作为子路径,二者拼接成完整的请求路径,方便同一控制器的路径统一管理。拦截器的preHandle方法返回true时,请求才会继续向下执行,返回false会直接终止请求。答案:正确解析:preHandle方法在处理器执行前调用,返回值代表是否放行请求,返回true会继续执行后续的拦截器和处理器,返回false会直接结束请求,不会进入处理器方法。@ResponseBody注解只能将返回值转换为JSON格式,不能返回普通字符串。答案:错误解析:@ResponseBody的作用是将返回值直接写入响应体,不仅可以返回JSON,也可以返回普通字符串、XML等其他格式,具体格式由消息转换器决定。使用CommonsMultipartResolver实现传统文件上传,必须依赖commons-fileupload和commons-io两个第三方包。答案:正确解析:CommonsMultipartResolver是基于Apache的commons-fileupload工具实现的,必须导入对应的依赖才能正常工作,Servlet3.0之后的内置文件上传解析器不需要额外依赖。REST风格的请求规范中,DELETE请求方式用来新增资源。答案:错误解析:REST规范中,GET用来查询资源,POST用来新增资源,PUT用来修改资源,DELETE用来删除资源,因此该说法错误。HandlerAdapter的作用是根据请求路径找到对应的处理器方法。答案:错误解析:根据请求路径找处理器方法的是HandlerMapping组件,HandlerAdapter的作用是适配执行不同类型的处理器方法,屏蔽不同处理器的调用差异。标注@ControllerAdvice的类只能用来做全局异常处理,不能实现其他功能。答案:错误解析:@ControllerAdvice是全局控制器增强注解,除了全局异常处理之外,还可以实现全局数据绑定、全局请求参数预处理等功能。SpringMVC的控制器默认是单例模式,因此不要在控制器中定义可修改的成员变量,否则会出现线程安全问题。答案:正确解析:Spring管理的Bean默认都是单例模式,多个请求会共享同一个控制器实例,如果有可修改的成员变量,多个线程同时修改会导致数据混乱,出现线程安全问题。视图解析器的作用是将处理器返回的逻辑视图名解析为实际的View对象,最终完成视图渲染。答案:正确解析:视图解析器会根据配置的前缀、后缀等规则,将逻辑视图名拼接为实际的视图资源路径,生成对应的View对象,后续由DispatcherServlet完成模型数据的填充和渲染。四、简答题(共5题,每题6分,共30分)简述SpringMVC的核心执行流程。答案要点:第一,用户发送请求,被DispatcherServlet拦截;第二,DispatcherServlet调用HandlerMapping组件,根据请求路径匹配到对应的处理器执行链(包含处理器方法和拦截器);第三,DispatcherServlet调用HandlerAdapter组件,适配执行对应的处理器方法;第四,处理器方法执行完成后返回ModelAndView对象,经HandlerAdapter返回给DispatcherServlet;第五,DispatcherServlet将ModelAndView传递给ViewResolver组件,解析得到实际的View对象;第六,DispatcherServlet对View进行渲染,将模型数据填充到视图中,最终生成响应返回给用户。解析:该流程是SpringMVC的核心逻辑,按照请求从进入到响应的顺序依次经过各个核心组件,每个组件各司其职,组件之间解耦,方便自定义扩展。记忆时可以按照“请求接入-匹配处理器-执行处理器-解析视图-渲染响应”的顺序梳理,每个步骤对应组件的职责要明确区分。简述SpringMVC中拦截器和过滤器的区别。答案要点:第一,归属不同:过滤器是Servlet规范定义的原生组件,拦截器是SpringMVC自己提供的框架组件;第二,执行时机不同:过滤器在请求进入Servlet容器之后、进入DispatcherServlet之前执行,拦截器在请求进入DispatcherServlet之后、处理器方法执行的前后执行;第三,拦截范围不同:过滤器可以拦截所有进入容器的Web请求,包括静态资源、控制器请求等,拦截器默认只能拦截控制器的请求,不会拦截静态资源;第四,依赖不同:过滤器不需要依赖Spring容器就可以使用,拦截器必须由Spring容器管理才能生效,可以直接注入Spring中的其他Bean使用。解析:二者都可以实现请求的预处理和拦截,但是适用场景不同,如果是请求编码过滤、跨域处理等通用的Web层请求处理可以用过滤器,如果需要结合Spring容器的功能做登录校验、权限控制、日志记录等,用拦截器更方便。简述@RequestParam和@PathVariable的区别。答案要点:第一,获取的参数位置不同:@RequestParam获取的是URL问号后面的查询参数,@PathVariable获取的是URL路径中占位符里的参数;第二,适用场景不同:@RequestParam适用于传统的参数传递方式,比如/user?id=1,@PathVariable适用于REST风格的路径参数传递,比如/user/1;第三,使用规则不同:二者都可以通过required属性设置是否必填,当请求参数名和@RequestParam标注的形参名一致时,可以省略该注解,当路径占位符名和@PathVariable标注的形参名一致时,也可以省略注解的value属性。解析:二者都是常用的参数获取注解,核心区分点就是参数的位置,REST风格接口普及后,@PathVariable的使用频率越来越高,实际开发中通常会结合使用两种注解完成复杂的参数获取。简述SpringMVC中实现全局异常处理的三种常见方式。答案要点:第一,局部异常处理:在单个控制器类中使用@ExceptionHandler注解标记异常处理方法,只能处理当前控制器内部抛出的异常;第二,全局注解异常处理:使用@ControllerAdvice或者@RestControllerAdvice注解标记全局增强类,在类中使用@ExceptionHandler注解标记异常处理方法,可以处理所有控制器抛出的异常;第三,自定义异常解析器:实现HandlerExceptionResolver接口,自定义异常处理逻辑,是最底层的异常处理方式,可以处理所有异常包括框架层面的异常。解析:三种方式各有适用场景,局部异常处理适合处理单个控制器的特殊异常,全局注解异常处理是目前最常用的方式,使用简单灵活,自定义异常解析器适合需要深度定制异常处理逻辑的场景。简述SpringMVC参数绑定的核心过程。答案要点:第一,DispatcherServlet接收到请求后,将请求的所有信息(包括请求参数、请求头、请求体等)封装到ServletRequest对象中;第二,HandlerAdapter在执行处理器方法之前,根据方法的形参列表,匹配合适的参数解析器;第三,参数解析器从ServletRequest中取出对应的数据,完成类型转换、格式化、数据校验等操作,将数据转换为形参对应的类型;第四,将转换完成的参数值传递给处理器方法,完成参数绑定。解析:参数绑定是SpringMVC最实用的特性之一,开发者不需要手动从ServletRequest中获取参数、转换类型,框架自动完成整个流程,还支持自定义转换器、自定义校验规则等扩展点,满足不同场景的参数绑定需求。五、论述题(共3题,每题10分,共30分)结合实际开发场景,论述SpringMVC拦截器的应用场景以及自定义拦截器的完整实现步骤。答案:论点1:拦截器的核心应用场景拦截器是SpringMVCAOP思想的体现,可以在不修改原有业务代码的前提下对请求进行增强,常见的应用场景有四个:第一是登录校验,比如后台管理系统所有以/admin开头的请求都需要验证用户是否登录,不需要在每个控制器方法中写重复的校验代码,统一在拦截器中处理即可;第二是操作日志记录,统一记录每个接口的访问用户、访问时间、请求参数、响应结果等信息,方便后续问题排查和审计;第三是权限校验,统一判断当前登录用户是否有访问当前接口的权限,避免每个业务方法都做权限判断;第四是接口性能统计,统计每个接口的执行耗时,方便后续性能优化。论点2:自定义拦截器的实现步骤实现自定义拦截器总共分为两步:第一步,创建自定义拦截器类,实现HandlerInterceptor接口,根据需求重写对应的方法,比如登录校验场景只需要重写preHandle方法,在方法中从Session或者Token中获取当前登录用户信息,如果用户不存在就返回false,并重定向到登录页面,如果用户存在就返回true放行请求;第二步,将自定义拦截器注册到SpringMVC的配置中,编写配置类实现WebMvcConfigurer接口,重写addInterceptors方法,将自定义拦截器添加到拦截器列表中,同时配置要拦截的路径和要放行的路径,比如登录拦截器要拦截所有/admin开头的路径,放行/admin/login等不需要登录的路径,以及静态资源路径。结论拦截器大幅减少了重复代码的开发,降低了维护成本,实际开发中我们曾用登录拦截器实现后台管理系统的登录校验,省去了上百行重复的登录判断代码,后续修改登录校验逻辑时只需要修改拦截器中的代码即可,不需要修改每个业务方法,维护效率提升了很多,同时拦截器的性能损耗极低,不会影响接口的响应速度。结合实际开发经验,论述SpringMVC实现RESTful风格接口的优势以及具体的实现方式。答案:论点1:RESTful风格接口的优势RESTful是目前主流的接口设计规范,使用SpringMVC开发REST接口有四个核心优势:第一,接口可读性高,不同的请求方式对应不同的操作,GET表示查询、POST表示新增、PUT表示修改、DELETE表示删除,开发者看到请求方式和路径就能知道接口的作用,降低前后端对接的沟通成本;第二,跨端兼容性好,接口和客户端类型解耦,PC端、移动端、小程序都可以调用同一套接口,不需要为不同端开发单独的接口,节省开发成本;第三,支持无状态设计,接口不存储会话信息,每次请求都携带必要的身份信息,方便分布式部署,服务可以水平扩展,提升系统的并发能力;第四,缓存友好,GET类型的请求可以被浏览器、CDN缓存,提升访问速度,降低服务器压力。论点2:SpringMVC实现REST接口的具体方式SpringMVC对REST接口的支持非常完善,实现步骤非常简单:第一,使用@RestController注解标注控制器类,该注解是组合注解,相当于@Controller加@ResponseBody,类下所有方法的返回值都会直接写入响应体,不需要每个方法都加@ResponseBody;第二,使用请求方式派生注解配置路径,比如@GetMapping、@PostMapping、@PutMapping、@DeleteMapping,分别对应四种请求方式,路径中使用{xxx}占位符传递资源ID,比如@GetMapping(“/user/{id}”)对应查询ID为指定值的用户;第三,参数获取使用对应的注解,路径参数用@PathVariable获取,请求体的JSON参数用@RequestBody获取,查询参数用@RequestParam获取;第四,统一响应规范,按照HTTP状态码返回响应,比如查询成功返回200、新增成功返回201、无权限返回403、资源不存在返回404,符合HTTP规范,客户端可以根据状态码快速判断请求结果。结论实际开发中我们用SpringMVC开发的用户管理模块REST接口,总共5个接口就完成了用户的增删改查操作,接口结构非常清晰,前端开发人员不需要额外的文档就能快速理解接口的作用,同时这套接口同时提供给PC后台和移动

温馨提示

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

评论

0/150

提交评论