SpringMVC面试经典题

89 阅读4分钟

欢迎关注WX公众号:“程序猿补课班”,分享Java相关技术知识,学习经验,面试经验等。小伙伴快来补课吧!

正文开始

1、什么是 SpringMvc?说说你对 SpringMVC 的理解

答:SpringMvc 是 spring 的一个模块,基于 MVC 的一个框架,无需中间整合层来整合。做到 M(Model)— V(View)— C(Controller)分层。降低各层次之间的耦合性,简化开发。

2、Spring MVC 的优点:

  • 与 Spring 集成使用非常方便,生态好。
  • 配置简单,快速上手。
  • 支持 RESTful 风格。
  • 支持各种视图技术,支持各种请求资源映射策略。

3、SpringMVC 流程?

答:

1)用户发送请求至前端控制器 DispatcherServlet。

2)DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。

3)处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet。

4)DispatcherServlet 调用 HandlerAdapter 处理器适配器。

5)HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。

6)Controller 执行完成返回 ModelAndView。

7)HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。

8)DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。

9)ViewReslover 解析后返回具体 View。

10)DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。

11)DispatcherServlet 响应用户。

4、@RestController 和 @Controller什么区别?

Controller 返回一个页面:
单独使用 Controller 不加 @ResponseBody 使用的话就要经过视图解析流程 (ViewResolve),最后返回给到前端一页面,这种情况属于比较传统的 Spring MVC 应用,对应前后端不分离的情况;

@RestController 返回 json 或者 xml 形式的数据:
@RestController 返回对象,对象以 json 或者 xml 格式写入到 http 响应中,属于 RESTful 风格,也是目前流行的前后端分离方式;

@Controller + @ResponseBody 返回 json 或者 xml 形式数据:

5、SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?

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

6、SpingMvc 中的控制器的注解一般用那个,有没有别的注解可以替代?

答:一般用@Conntroller 注解,表示是表现层,不能用用别的注解代替。

7、@RequestMapping 注解用在类上面有什么作用?

答:是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

8、怎么样把某个请求映射到特定的方法上面?

答:直接在方法上面加上注解@RequestMapping,并且在这个注解里面写上要拦截的路径

9、如果在拦截请求中,我想拦截 get 方式提交的方法,怎么配置?

答:可以在@RequestMapping 注解里面加上 method=RequestMethod.GET

10、我想在拦截的方法里面得到从前台传入的参数,怎么得到?

答:直接在形参里面声明这个参数就可以,但必须名字和传过来的参数一样

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

答:直接在方法中声明这个对象,SpringMvc 就自动会把属性赋值到这个对象里面。

12、SpringMvc 用什么对象从后台向前台传递数据的?

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

13、SpringMvc 里面拦截器是怎么写的

答:有两种写法,一种是实现接口,另外一种是继承适配器类,然后在 SpringMvc 的配置文件中

配置拦截器即可:

<!-- 配置 SpringMvc 的拦截器 --><mvc:interceptors>
<!-- 配置一个拦截器的 Bean 就可以了 默认是对所有请求都拦截 --> 
<bean id="myInterceptor" class="com.et.action.MyHandlerInterceptor"></bean> 
<!-- 只针对部分请求拦截 -->
<mvc:interceptor> 
<mvc:mapping path="/modelMap.do" /> 
<bean class="com.et.action.MyHandlerInterceptorAdapter" />
</mvc:interceptor>
</mvc:interceptors>

14、SpringMVC怎么样设定重定向和转发的?

(1)在返回值前面加"forward:"就可以让结果转发,譬如"forward:user.do?name=method4"

(2)在返回值前面加"redirect:"就可以让返回值重定向,譬如"redirect:www.baidu.com"

15、当一个方法向AJAX返回特殊对象,譬如Object,List等,需要做什么处理?

答:要加上@ResponseBody注解。

如有错漏之处,敬请指正