文章目录
1 , SpringMVC的工作流程?
SpringMVC执行流程:
1.用户发送请求至前端控制器DispatcherServlet
2.DispatcherServlet收到请求调用处理器映射器HandlerMapping。
3.处理器映射器根据请求url找到具体的处理器,生成处理器执行链HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给DispatcherServlet。
4.DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter执行HandlerAdapter处理一系列的操作,如:参数封装,数据格式转换,数据验证等操作
5.执行处理器Handler(Controller,也叫页面控制器)。
6.Handler执行完成返回ModelAndView
7.HandlerAdapter将Handler执行结果ModelAndView返回到DispatcherServlet
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9.ViewReslover解析后返回具体View
10.DispatcherServlet对View进行渲染视图(即将模型数据model填充至视图中)。
11.DispatcherServlet响应用户。
组件说明:
1.DispatcherServlet:前端控制器。用户请求到达前端控制器,它就相当于mvc模式中的c,dispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,dispatcherServlet的存在降低了组件之间的耦合性,系统扩展性提高。由框架实现
2.HandlerMapping:处理器映射器。HandlerMapping负责根据用户请求的url找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,根据一定的规则去查找,例如:xml配置方式,实现接口方式,注解方式等。由框架实现
3.Handler:处理器。Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
4.HandlAdapter:处理器适配器。通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。由框架实现。
5.ModelAndView是springmvc的封装对象,将model和view封装在一起。
6.ViewResolver:视图解析器。ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
7View:是springmvc的封装对象,是一个接口, springmvc框架提供了很多的View视图类型,包括:jspview,pdfview,jstlView、freemarkerView、pdfView等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
2 , spring以及springMVC常用注解有哪些?
(1)问题分析:
考官主要对spring和springMVC注解的考核,如Controller、Service、Repository、Autowired、RequestMapping、RequestBody、ResponseBody、PathVariable、RequestParam、RestController。
(2)核心答案讲解:
@Controller用于标记在一个类上,代表这个类是控制层组件。
@Service用于标记在一个类上,代表这个类是业务层组件。
@Repository用于标记在一个类上,代表这个类是数据访问层组件。
@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
@RequestParam用于将指定的请求参数赋值给方法中的形参。
@PathVariable可以获取URL中的动态参数。
@RequestBody用于读取Request请求的body部分数据,通过适当的消息转换器转换为对象。
@ResponseBody用于将Controller的方法返回的对象,通过适当的消息转换器转换。
@RestController=@Controller+@ResponseBody,用于标记在一个类上。
(3)问题扩展
在使用@RequestBody 和@ResponseBody注解时,springMVC默认使用MappingJackson2HttpMessageConverter转换器将json格式的字符串和对象相互转换。
(4)结合项目中使用
对于前后端分离的项目,我们往往会给前端直接返回json格式的字符串由前端接收处理。
3 ,springmvc前端控制器是什么?处理器映射器是什么?
(1)问题分析:
考官主要是对springMVC组件的考核。前端控制器是DispatcherServlet,处理器映射器是HandlerMapping。
(2)核心答案讲解:
DispatcherServlet:前端控制器。用户请求到达前端控制器,它就相当于mvc模式中的c,DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。
HandlerMapping:处理器映射器。HandlerMapping负责根据用户请求找到Handler即处理器,springmvc提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等
(3)问题扩展:
Handler:处理器。Handler是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。
HandlerAdapter:处理器适配器。通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
ViewResolver:视图解析器。ViewResolver负责将处理结果生成View视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
View:视图。SpringMVC框架提供了很多的View视图类型的支持,包括:jstlView、freemarkerView、pdfView等。我们最常用的视图就是jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。
(4)结合项目中使用:
在web.xml中配置前端控制器。
4 ,springmvc如何进行参数绑定
(1) 问题分析:
考官主要针对springMVC进行参数绑定的考核。
(2)核心答案讲解:
处理器适配器调用springmvc提供的参数绑定组件将前端传入的key/value数据转成controller方法的形参。
(3)问题扩展:
参数绑定组件:springmvc提供了很多converter(转换器),在特殊情况下需要自定义converter,比如对日期数据的绑定。
(4)结合项目中使用:
SpringMVC配置任何类型转换器 Converter(以时间类型为例)。
1. 定义时间DateConverter转换类实现 Converter<String, Date> 接口。
public class DateConverter implements Converter<String, Date> {
@Override
public Date convert(String dateStr) {
Date date = null;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
date = dateFormat.parse(dateStr);
} catch (ParseException e) {
//e.printStackTrace();
dateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
date = dateFormat.parse(dateStr);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
return date;
}
}
2.配置spring-mvc.xml
<!-- 配置配置类型转换器注解驱动 -->
<mvc:annotation-driven conversion-service="conversionService" />
<!-- 配置类型转换器 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.itcast.controller.DateConverter" />
</set>
</property>
</bean>
3. 页面把时间字符串按格式转成时间类型传往后台。