1. Spring MVC 的执行流程
流程说明:
- 客户端(浏览器)发送请求,直接请求到
DispatcherServlet
。 DispatcherServlet
根据请求信息调用HandlerMapping
,解析请求对应的Handler
。- 解析到对应的
Handler
(也就是我们平常说的Controller
控制器)后,开始由HandlerAdapter
适配器处理。 HandlerAdapter
会根据Handler
来调用真正的处理器开处理请求,并处理相应的业务逻辑。- 处理器处理完业务后,会返回一个
ModelAndView
对象,Model
是返回的数据对象,View
是个逻辑上的View
。 ViewResolver
会根据逻辑View
查找实际的View
。DispaterServlet
把返回的Model
传给View
(视图渲染)。- 把渲染结果
View
返回给请求者(浏览器)。2. Spring MVC 的核心组件
前端控制器 DispatcherServlet
Spring MVC 的入口函数。接受请求、响应结果,相当于转发器。DispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。处理器映射器 HandlerMapping
根据请求的 URL 查找 Handler。HandlerMapping 负责根据用户请求找到 Handler 即处理器(Controller),SpringMVC 提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。处理器适配器 HandlerAdapter
按照 HandlerAdapter 要求的规则执行 Handler,通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用。处理器 Handler
编写 Handler 时按照 HandlerAdapter 的要求去做,这样适配器才可以正确执行 Handler。Handler 是继 DispatcherServlet 前端控制器的后端控制器,在 DispatcherServlet 的控制下,Handler 对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况需要工程师根据业务需求开发 Handler。视图解析器 View resolver
进行视图解析,根据逻辑视图名解析成真正的视图(View )。View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。视图 View
View 是一个接口,实现类支持不同的 View 类型(jsp、freemarker…)。3. Spring MVC 的常用注解有哪些?
- @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
- @RequestBody:注解实现接收 HTTP 请求的 json 数据,将 json 转换为 Java 对象。
@ResponseBody:注解实现将 Controller 方法返回对象转化为 json 对象响应给客户。
4. Spring MVC 的控制器是不是单例模式?
是单例模式,所以在多线程访问的时候有线程安全问题。但是不要使用同步,会影响性能,解决方案是控制器里不能写字段。
5. Spring MVC 怎么设定重定向和转发?
转发:在返回值前面加 “forward:”,譬如:
"forward:user.do?name=method2"
重定向:在返回值前面加 “redirect:”,譬如:
"redirect:http://www.zju.com"