SpringMVC面试
1、什么是SpringMVC(或者MVC是什么);*
Spring MVC 是spring框架的一个模块,是一个基于mvc的web框架。
Model(模型):数据模型,提供要展示的数据;
View(视图):负责进行模型的展示;
Controller(控制器)是应用程序中处理用户交互的部分;
2、SpringMVC工作流程;*
1.用户发送请求至前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用处理器映射器HandlerMapping。
3.处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet(此时处理器映射器返回的处理器对象包含:包名+类名+方法名)。
4.DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5.处理器适配器HandlerAdapter将会根据适配的结果去执行Handler。
6.Handler执行完成返回ModelAndView。
7.HandlerAdapter将Handler执行结果ModelAndView返回到前端控制器DispatcherServlet
8.前端控制器DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9.视图解析器ViewReslover解析后返回具体View
10.前端控制器DispatcherServlet对View进行渲染视图。
11.前端控制器DispatcherServlet向用户响应结果。
3、SpringMVC主要组件(五大组件);*
DispatcherServlet:前端控制器,用于请求到达前端控制器,由它调用其他组件处理用户的请求。
HandlerMapping:处理器映射器,负责根据用户请求找到Handler(处理器),springmvc提供了不同的映射器实现方式。
Handler:后端控制器(处理器),对具体的用户请求进行处理。
HandlerAdapter:处理器适配器,通过HandlerAdapter对处理器进行执行。
View Resolver:视图解析器,负责将处理结果生成view视图。
4、SpringMVC九大组件;
1、MultipartResolver(文件处理器) 对应的初始化方法是initMultipartResolver(context),用于处理上传请求。 处理方法是将普通的request包装成MultipartHttpServletRequest,后者可以直接调用getFile方法获取File。
2、LocaleResolver(当前环境处理器) 对应的初始化方法是initLocaleResolver(context),这就相当于配置数据库的方言一样,有了这个就可以对不同区域的用户显示不同的结果。SpringMVC主要有两个地方用到了Locale: 1、是ViewResolver视图解析的时候; 2、是用到国际化资源或者主题的时候。
3、ThemeResolver(主题处理器) 对应的初始化方法是initThemeResolver(context),用于解析主题。 SpringMVC中一个主题对应一个properties文件,里面存放着跟当前主题相关的所有资源,如图片、css样式等。 SpringMVC的主题也支持国际化。
4、HandlerMapping(处理器映射器) 对应的初始化方法是initHandlerMappings(context),这就是根据用户请求的资源uri来查找Handler的。 在SpringMVC中会有很多请求,每个请求都需要一个Handler处理,具体接收到一个请求之后使用哪个Handler进行处理呢?这就是HandlerMapping需要做的事。
5、HandlerAdapters(处理器适配器) 对应的初始化方法是initHandlerAdapters(context),从名字上看,它就是一个适配器。 Servlet需要的处理方法的结构却是固定的,都是以request和response为参数的方法。 如何让固定的Servlet处理方法调用灵活的Handler来进行处理呢?这就是HandlerAdapters要做的事情。
6、HandlerExceptionResolvers(异常处理器) 对应的初始化方法是initHandlerExceptionResolvers(context),其它组件都是用来干活的。 在干活的过程中难免会出现问题,出问题后怎么办呢?这就要有一个专门的角色对异常情况进行处理,在SpringMVC中就是HandlerExceptionResolver。
7、RequestToViewNameTranslator(视图名称翻译器), 对应的初始化方法是initRequestToViewNameTranslator(context),有的Handler处理完后并没有设置View也没有设置ViewName,这时就需要从request获取ViewName了,如何从request中获取ViewName就是RequestToViewNameTranslator要做的事情了。
8、ViewResolvers(页面渲染处理器) 对应的初始化方法是initViewResolvers(context),ViewResolver用来将String类型的视图名和Locale解析为View类型的视图。 View是用来渲染页面的,也就是将程序返回的参数填入模板里,生成html(也可能是其它类型)文件。
9、FlashMapManager(参数传递管理器) 对应的初始化方法是initFlashMapManager(context),用来管理FlashMap的,FlashMap主要用在redirect重定向中传递参数。
5、SpringMVC有哪些注解;*
@RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
@ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
@Resource和@Autowired:@Resource和@Autowired都是做bean的注入时使用,其实 @Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。
@PathVariable用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数
6、SpringMVC怎么样设定重定向和转发的?
1、转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"
2、重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"可能会问转发与重定向的区别。
7、Spring事务传播机制是什么;
Spring事务定义了7种传播机制:
1、PROPAGATION_REQUIRED:默认的Spring事物传播级别,若当前存在事务,则加入该事 务,若不存在事务,则新建一个事务。
2、PAOPAGATION_REQUIRE_NEW:若当前没有事务,则新建一个事务。若当前存在事务,则新建一个事务,新老事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交。
3、PROPAGATION_NESTED:如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务,则新建一个事务,类似于REQUIRE_NEW。
4、PROPAGATION_SUPPORTS:支持当前事务,若当前不存在事务,以非事务的方式执行。
5、PROPAGATION_NOT_SUPPORTED:以非事务的方式执行,若当前存在事务,则把当前事务挂起。
6、PROPAGATION_MANDATORY:强制事务执行,若当前不存在事务,则抛出异常。
7、PROPAGATION_NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。
8、扩展
1、Spring、SpringMVC和Springboot的区别;
2、拦截器与过滤器的区别;
3、SpringMVC或者SpringBoot有哪些设计模式;
以上内容仅供参考,请合理利用搜索引擎!

