SpringMVC框架介绍
Spring MVC是一种基于Java,实现了Web的MVC设计模式,请求驱动类型的轻量级web框架,即使用了MVC架构模式的思想,将Web层进行指责解耦,基于请求驱动指的就是请求响应模型,框架存在的目的是帮助简化开发,Spring MVC简化了web开发。
Java EE体系结构包括四层,从上到下为应用层,web层,业务层和持久层。Struts和Spring MVC是web层的框架,Spring是业务层的框架,Hibernate和Mybatis是持久层框架。
MVC模式的演进
在早期的Java Web的开发中,一般情况下会统一将显示层,控制层、数据层的操作交给JSP或者是JavaBean来进行处理。
从早期的web开发的交互图可以看出其存在很大的弊端,JSP和JavaBean之间严重耦合,Java代码和HTML代码也存在耦合,因此在开发中不仅要掌握Java,还需要掌握前端技术,使得前后端存在相互依赖,前端需要等待后端完成,后端也依赖前端完成,才能进行有效的测试,代码难以复用(现如今大部分场景下会前后端分离)。
因此很快提出了新的方式:servlet+Jsp_JavaBean
锁替代,早期的MVC模式演进如下:
用户请求首先到达servlet,然后根据请求调用相应的Java Bean,将结果显示交给JSP去完成,这样的模式称为MVC模式。
- M代表模型(Model):模型就是数据,就是dao层、bean层的代码实现。
- V代表视图(View):就是页面、JSP用来展示模型中的数据。
- C代表控制器(Controller):控制器就是把不同的数据(Model),显示在不同的视图上(View),其中servlet扮演控制器的角色。
在Spring中给出的MVC的方法如下:
传统的模型层被拆分成业务层(Service)和数据访问层(Dao),在service下可以通过Spring的声明式操作数据访问层。
特点:
- 结构松散:几乎所有的SpringMVC使用各类视图。
- 松耦合,各个模块分离。
- 与Spring无缝集成。
Spring架构
- Spring MVC是属于Spring 的一个模块。
- SpringMVC和Spring无需通过中间整合即可以进行使用。
- Spring MVC 是一个基于MVC的Web框架。
Spring眼中的MVC
相比MVC模式,SpringMVC增加了一个前端控制器(Front Controller)。
- ①现在所有的请求由前端控制器接收到,然后经过匹配将请求转给能处理的控制器。
- ②控制器调用相应的业务逻辑组件,业务逻辑组件处理完就返回数据模型给控制器,进而返回给前端控制器。
- ③前端控制器拿到数据模型后,经过匹配将数据派发给能够对此数据展示的页面,页面收到数据后进行渲染,渲染后返回给前端控制器,进而响应给用户。
前端控制器类似于现实生活中医院的导诊台。
SpringMVC的优点
- ①分工明确,容易扩展。
- ②可适配,可定制。
- ③与Spring框架无缝集成。
- ④功能强大的数据验证、格式化、绑定机制。
- ⑤利用Spring提供的Mock对象能够非常简单的进行Web层单元测试。
- ⑥强大的JSP标签库,使JSP编写更容易。
Spring MVC的运行原理
具体流程:
- 第一步:用户发起request请求(URL)到前端控制器DispatcherServlet。
- 第二步:前端控制器请求处理映射器HandlerMapping查找Handler,可以通过注解、xml进行查找。
- 第三步:处理器映射器向前端控制器返回映射结果:处理器映射器链HandlerExecutionChain对象,包含一个Handler处理器对象、多个HandlerInterceptor拦截器对象。
- 第四步:前端控制器请求处理器处理器适配器HandlerAdapter请求执行Handler。
- 第五步:处理器适配器执行Handler。
- 第六步:处理器执行完返回给适配器ModelAndView对象,ModelAndView是一个SPring MVC底层的对象,包含了Model和View,Model是业务对象的返回的模型数据,View是逻辑视图名。
- 第七步:处理器适配器返回给前端控制器ModelAndView对象。
- 第八步:前端控制器请求视图解析器ViewResolver解析视图,视图解析器将逻辑视图名解析为具体的View(jsp…)。
- 第九步:视图解析器向前端控制器返回View。
- 第十步:前端控制器进行页面渲染,视图渲染将模型数据(ModelAndView对象)填充到response域。
- 第十一步:前端控制器向用户响应结果。
Spring MVC各组件的介绍
1、前端控制器DispatcherServlet
由框架提供,不需要开发人员开发
Spring MVC的入口函数,接收请求,响应结果,相当于转发器,中央处理器,有了DispatcherServlet减少其他组件之间的耦合度。它相当于MVC模型中的C(控制器)。
2、处理器映射器HandlerMapping
由框架提供,不需要开发人员开发
根据请求URL查找Handler,即处理器(Controller),Spring MVC提供不同的映射器实现不同的映射方式,例如:配置文件方法,实现接口方式,注解方式等。
3、处理器适配器HandlerAdapter
由框架提供,不需要开发人员开发
按照特定的规则(HandlerAdapter要求的规则)去执行Handler,进而通过适配器适配到真正执行的处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
4、处理器Handler
需要开发人员进行开发
按照HandlerAdapter的要求进行编写,这样适配器才可以正确的找到执行Handler,处理器是后端控制器。由于Handler处理用户的具体业务逻辑,一般情况下需要开发人员根据业务进行开发。
5、视图解析器ViewResolver
由框架提供,不需要开发人员开发
进行视图解析,根据逻辑视图名解析成真正的视图View。首先根据逻辑视图名解析成物理视图名即具体的页面地址,在生成View的视图对象,最后将View进行渲染将处理结果通过页面展示给用户,Spring MVC框架提供和诺的View视图类型,包括jstlView,freemarkerView,pdfView…等,一般情况下需要通过页面标签或页面模板的技术将模型数据通过页面展示给用户。
6、视图View
需要开发人员进行开发
View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)。