SpringMVC相关面试题总结

一、简介

本文将总结一些现在非常流行的开源框架SpringMVC相关的面试题。

二、面试题

【1】什么是SpringMVC?

SpringMvc是Spring的一个模块。基于MVC的一个框架,无需中间整合层来整合。

【2】Spring MVC的优点?

  • 清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command obect)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、试图解析器(view resoler)等等。每一个角色都可以由一个专门的对象来实现。
  • 强大而直接的配置方式:将框架类和应用程序类都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器validator)的引用。
  • 可适配、非侵入:可以根据不同的应用场景,选择何事的控制器子类(simple型、command型、from型、wizard型、multi-action型或者自定义),而不是一个单一控制器(比如Action/ActionForm)继承。
  • 可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。
  • 可定制的绑定(binding)和验证(validation):比如将类型不匹配作为应用级的验证错误,这可以保证错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。
  • 可定制的handler mapping和view resolution:Spring提供从最简单的URL映射,到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。
  • 灵活的model转换:在Springweb框架中,使用基于Map的键/值对来达到轻易的与各种视图技术集成。
  • 可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。
  • 简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme)之类的许多功能。他提供在标记方面的最大灵活性。
  • JSP表单标签库:在Spring2.0中引入的表单标签库,使用在JSP编写表单更加容易。
  • Spring Bean的生命周期:可以被限制在当前的HTTP Request或者HTTP Session。准确的说,这并非Spring MVC框架本身特性,而应归属于Spring MVC使用的WebApplicationContext容器。

【3】请谈谈Spring MVC工作原理?Spring MVC的请求流程?

文字描述: 

  • 1. 用户发起一个request请求,这个请求将会首先到达前端控制器DispatcherServlet中,由DispatcherServlet统一调度其他组件的使用;
  • 2.DispatcherServlet接收到请求后会调用HandlerMapping处理器映射器,由此得知,这个请求该由哪一个Controller来进行处理(并未调用Controller);
  • 3. DispatcherServlet调用HandlerAdapter处理器适配器,告诉处理器适配器应该要去执行哪个Controller;
  • 4. HandlerAdapter处理器适配器去执行Handler,即我们的Controller,然后Handler处理器返回ModelAndView(数据和视图)给HandlerAdapter;
  • 5. HandlerAdapter再将ModelAndView(数据和视图)返回给DispatcherServlet;
  • 6. DispatcherServlet将ModelAndView交给ViewReslover视图解析器请求进行视图解析,然后返回真正的视图;
  • 7. 视图渲染, DispatcherServlet将模型数据填充到request域中;
  • 8、DispatcherServlet将结果响应给用户; 

【4】SpringMVC的控制器是不是单例模式,如果是,有什么问题,怎么解决?

SpringMVC的控制器是单例模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能,解决方案是在控制器里面不能写字段。

【5】 @RequestMapping注解用到类上面有什么作用?

 @RequestMapping是一个用来处理请求地址映射的注解,可用于类上、方法上。用在类上面表示类中的所有请求访问的根路径。

【6】怎么样在方法里面得到Request或者Session对象?

直接在Controller方法形参中加入HttpServletRequest对象,然后根据request.getSession()方法获取Session对象

【7】在拦截的方法里面得到从前台传入的参数,怎么得到?

在Controller控制层中方法形参中加入对应的参数,注意参数名称需要对应上。

@RequestParam("name") String name

【8】如果前台有很多个参数传入,并且这些参数都是一个对象的,怎么快速得到这个对象?

直接在Controller方法的形参中加入该对象,SpringMVC就会自动把属性赋值到该对象中,注意前端传过来的参数名称与对象里面的属性名称必须相同

【9】SpringMVC中函数的返回值是什么?

  • String,通常情况下都使用String
  • ModelAndView
  • ModelMap

【10】SpringMVC怎么样设定重定向和转发?

  • 请求转发:"forward:user.do?name=method4
  • 重定向:"redirect:http://www.baidu.com"

【11】SpringMVC用什么对象从后台向前台传递数据?

通过ModelMap对象,可以在这个对象里面用put方法,把对象加到里面,前台就可以通过el表达式拿到该值。

【12】怎么样把ModelMap里面的数据放入Session里面?

可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key

【13】SpringMVC怎么和Ajax相互调用?

通过JSON进行序列化,然后再通过反序列接收,结合@ResponseBody注解使用。

三、总结

下面分享脑图总结:

发布了250 篇原创文章 · 获赞 112 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/Weixiaohuai/article/details/105623237