spring-mvc的工作原理
【基本流程】
- 客户端发送请求,到DispatcherServlet(SpringMVC前端控制器,主要负责分发)
- DispatcherServlet根据请求的url信息调用HandlerMapping,解析请求对应的Handler
- 解析到对应的Handler(controller的实现类,也叫action)之后,发送给处理器适配器进行适配(处理器有两种实现方式:实现接口、基于注解,所以执行之前需要先适配)
- HandlerAdapter根据Handler来调用真正的处理器,处理请求并进行业务处理,然后返回ModelAndView(Model 是返回的数据对象,View 是个逻辑上的 View)
- DispatcherServlet接收到ModelAndView之后,向ViewResolver请求真正的view(jsp页面等)
- DispatcherServlet将model发送给view进行视图渲染
- 返回响应
【组件说明】
------前端控制器DispatcherServlet <框架提供>
Spring MVC 的入口函数。
接收请求,响应结果,相当于转发器,中央处理器。
用户请求到达前端控制器,它就相当于mvc模式中的c,DispatcherServlet是整个流程控制的中心,由它调用其它组件处理用户的请求。
DispatcherServlet的存在降低了组件之间的耦合性。
------处理器映射器HandlerMapping <框架提供>
根据请求的url查找Handler。
HandlerMapping负责根据用户请求找到Handler即处理器(Controller),SpringMVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
------处理器适配器HandlerAdapter <框架提供>
按照特定规则(HandlerAdapter要求的规则)去执行Handler ,通过扩展适配器可以对更多类型的处理器进行执行。
------处理器Handler <工程师提供>
编写Handler时按照HandlerAdapter的要求去做,这样适配器才可以去正确执行Handler。
Handler 是继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理。
------视图解析器View resolver <框架提供>
进行视图解析,根据逻辑视图名解析成真正的视图(view)。
View Resolver负责将处理结果生成View视图,View Resolver首先根据逻辑视图名解析成物理视图名(即具体的页面地址),再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
springmvc框架提供了很多的View视图类型,包括:jstlView、freemarkerView、pdfView等。
一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由工程师根据业务需求开发具体的页面。
------视图View <工程师提供>
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf...)