文章目录
Spring MVC框架介绍
SpringMVC是一种基于Java,实现了Web MVC设计模式,请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将Web层进行职责解耦。基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,SpringMVC也是要简化我们日常Web开发。
JavaEE体系结构包括四层,从上到下分别是应用层、Web层、业务层、持久层。Struts和SpringMVC是Web层的框架,Spring是业务层的框架,Hibernate和MyBatis是持久层的框架。
MVC模式的演进
在早期 Java Web 的开发中,统一把显示层、控制层、数据层的操作全部交给 JSP 或者 JavaBean 来进行处理。
如下图所示:
以上便是早期的web开发交互图,但存在以下弊端:
- JSP 和 Java Bean 之间严重耦合,Java 代码和 HTML 代码也耦合
- 要求开发者不仅要掌握 Java ,还要掌握前端技术
- 前端和后端相互依赖,前端需要等待后端完成,后端也依赖前端完成,才能进行有效的测试
- 代码难以复用
很快这种方式被Servlet + JSP + Java Bean 所替代,早期的 MVC 模型就如下图这样:
首先用户的请求会到达 Servlet,然后根据请求调用相应的 Java Bean,并把所有的显示结果交给 JSP 去完成,这样的模式我们就称为 MVC 模式。
- M 代表 模型(Model):模型就是数据,就是dao层、bean层的代码实现。
- V 代表 视图(View):就是页面、JSP用来展示模型中的数据。
- C 代表 控制器(Controller):控制器就是把不同的数据(Model),显示在不同的视图上(View),其中servlet扮演控制器的角色。
在Spring中给出的MVC的方案如下所示:
传统的模型层被拆分为了业务层(Service)和数据访问层(DAO,Data Access Object)。 在 Service 下可以通过Spring 的声明式事务操作数据访问层。
特点:
- 结构松散:几乎所有的SpringMVC使用各类视图
- 松耦合,各个模块分离
- 与Spring无缝集成
Spring架构
- Spring MVC是属于Spring 的一个模块
- SpringMVC和Spring无需通过中间整合即可以进行使用
- Spring MVC 是一个基于MVC的Web框架
SpringMVC的运行原理
具体流程:
- 第一步:用户发起request请求(URL)到前端控制器DispatcherServlet。
- 第二步:前端控制器请求处理映射器HandlerMapping查找Handler,可以通过注解、xml进行查找。
- 第三步:处理器映射器向前端控制器返回映射结果:处理器映射器链HandlerExecutionChain对象,包含一个Handler处理器对象、多个HandlerInterceptor拦截器对象。
- 第四步:前端控制器请求处理器处理器适配器HandlerAdapter请求执行Handler。
- 第五步:处理器适配器找到真正执行的处理器:Handler。
- 第六步:处理器执行完返回给适配器ModelAndView对象,ModelAndView是一个SPring MVC底层的对象,包含了Model和View,Model是业务对象的返回的模型数据,View是逻辑视图名。
- 第七步:处理器适配器返回给前端控制器ModelAndView对象。
- 第八步:前端控制器请求视图解析器ViewResolver解析视图,视图解析器将逻辑视图名解析为具体的View(jsp,pdf,freemarker…)。
- 第九步:视图解析器向前端控制器返回View。
- 第十步:将前端控制器将数据渲染到页面View上。
- 第十一步:前端控制器将填充好的页面响应给用户。
Spring MVC 中各组件的介绍
1、前端控制器(DispatchServlet)
由框架提供,不需要开发人员开发
- 用户的请求首先到达前端控制器,最终响应也是有前端控制器完成的,是用户请求的入口。
- 在各个组件间完成数据的转发,由前端控制器的存在减少了其他组件间的耦合性。
- 前端控制器相当于是控制中心。
2、处理器映射器(HandlerMapping)
由框架提供,不需要开发人员开发
- 根据请求URL查找Handler,即处理器(Controller)。
- Spring MVC中对于映射器的处理有不同的映射方式,配置文件映射,注解进行映射,实现接口方式进行映射。
3、处理器适配器(HandlerAdapter)
由框架提供,不需要开发人员开发
- 按照特定的规则去找到具体执行的执行器。
- 使用适配器模式来进行适配找执行器。
4、处理器(Handler)
需要开发人员进行开发
- 编写Handler是需要按照适配器提供的规则进行开发,这样适配器才能找到处理器。
- Handler在代码上即实现的Controller层的对应的具体的方法入口。
5、视图解析器(View Resolver)
由框架提供,不需要开发人员开发
- 进行视图解析,根据逻辑视图名解析成真正的视图View。
- 根据逻辑视图名解析成物理视图名即具体的页面地址,在生成View的视图对象,最后将View进行渲染将处理结果通过页面展示给用户。
- Spring MVC框架提供和诺的View视图类型,包括jsp,freemarker,pdf…等,一般情况下需要通过页面标签或页面模板的技术将模型数据通过页面展示给用户。
6、视图(View)
需要开发人员进行开发
- 最终展示给用户的页面
- View是一个接口,实现类支持不同的View类型(jsp、freemarker、pdf…)。