对于 Spring MVC 了解?
之前 Model1 和 Model2 这两个没有 Spring MVC 的时代。
Model1 时代 : 整个 Web 应用几乎全部用 JSP 页面组成,只用少量的 JavaBean 来处理数据库连接、访问等操作。 JSP 既是控制层又是表现层,存在很多问题,如①将控制逻辑和表现逻辑混杂在一起,导致代码重用率极低;②前端和后端相互依赖,难以进行测试并且开发效率极低;
Model2 时代 :Java Bean(Model)+ JSP(View,)+Servlet(Controller) 这种开发模式是早期的 JavaWeb MVC 开发模式,Model:系统涉及的数据,也就是 dao 和 bean。View:展示模型中的数据,只是用来展示。Controller:处理用户请求都发送给返回数据给 JSP 并展示给用户。 Model2 模式下还存在很多问题,抽象和封装程度还远远不够,开发时不可避免会重复造轮子,大大降低了程序的可维护性和复用性,于是很多JavaWeb开发相关的 MVC 框架应运而生,如 Struts2,但 Struts2 比较笨重。
随着 Spring 轻量级开发框架的流行, Spring 生态圈出现了 Spring MVC 框架, Spring MVC 是当前最优秀的 MVC 框架。相比于 Struts2 , Spring MVC 使用更加简单和方便,开发效率更高,并且 Spring MVC 运行速度更快。
MVC 是一种设计模式,Spring MVC 是一款很优秀的 MVC 框架
Spring MVC 可以帮助进行更简洁的Web层的开发,并且它天生与 Spring 框架集成,把后端项目分为 Service层(处理业务)、Dao 层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面)
Spring MVC 的简单原理图如下:
SpringMVC 的执行流程?
1. 客户端的所有请求都交给前端控制器DispatcherServlet来处理,它会负责调用系统的其他模块来真正处理用户的请求
2. DispatcherServlet收到请求后,将根据请求的信息(包括URL、HTTP协 议方法、请求头、请求参数、Cookie等)以及HandlerMapping的配置找到处理该请求的Handler(任何一个对象都可以作为请求的Handler)
3. 在这个地方Spring会通过HandlerAdapter对该处理器进行封装
4. HandlerAdapter是一个适配器,它用统一的接口对各种Handler中的方法进行调用
5. Handler完成对用户请求的处理后,会返回一个ModelAndView对象给 DispatcherServlet,ModelAndView 包含了数据模型以及相应的视图的信息
6. ModelAndView的视图是逻辑视图,DispatcherServlet还要借助 ViewResolver完成从逻辑视图到真实视图对象的解析工作
7. 当得到真正的视图对象后,DispatcherServlet会利用视图对象对模型数据进行渲染
8. 客户端得到响应,可能是一个普通的HTML页面,也可以是XML或JSON字 符串,还可以是一张图片或者一个PDF文件
SpringMVC 的核心是什么?
控制反转和面向切面
SpringMVC 请求的流程是怎么处理的?
1、首先用户发送请求到前端控制器,前端控制器根据请求信息(如URL) 来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分
2、页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名)
3、前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染
4、前端控制器再次收回控制权,将响应返回给用户
SpringMVC 控制反转怎么实现的?
每次使用spring框架都要配置xml文件,这个xml配置了bean的id和 class。
spring中默认的bean为单实例模式,通过bean的class引用反射机制可以创建这个实例。
因此,spring框架通过反射替我们创建好了实例并维护他们。 A需要引用B类,spring框架就会通过xml把B实例的引用传给了A的成员变量。