MVC设计的根本原因在于解耦各个模块
Spring MVC的架构 对于持久层⽽⾔,随着软件发展,迁移数据库的可能性很⼩,所以在⼤部分情况下都⽤不到Hibernate的HQL来满⾜移植数据库的要求。与此同时,性能对互联⽹更为重要,不可优化SQL、不够灵活成了Hibernate难以治愈的伤痛,这样MyBatis就崛起了。⽆论是Hibernate还是MyBatis都没处理好数据库事务的编程,同时随着各种NoSQL的强势崛起,使得Java Web应⽤不仅能够在数据库获取数据,也可以从NoSQL中获取数据这些已经不是持久层框架能够处理的了,⽽Spring MVC给出了⽅案,如图所⽰。
图展⽰了传统的模型层被拆分为业务层(Service)和数据访问层(DAO,Data Access Object)。在Service下可以通过Spring的声明式事务操作数据访问层,⽽在业务层上还允许我们访问NoSQL,这样就能够满⾜现今异军崛起的NoSQL的使⽤了,它的使⽤将⼤⼤提⾼互联⽹系统的性能。对于Spring MVC⽽⾔,其最⼤的特⾊是结构松散,⽐如⼏乎可以在Spring MVC中使⽤各类视图,包括JSON、JSP、XML、PDF等,所以它能够满⾜⼿机端、页⾯端和平板电脑端的各类请求,这就是现在它如此流⾏的原因
Spring MVC组件与流程 Spring MVC的核⼼在于其流程,这是使⽤Spring MVC框架的基础,Spring MVC是⼀种基于Servlet的技术,它提供了核⼼控制器
DispatcherServlet和相关的组件,并制定了松散的结构,以适合各种灵活的需要。为了让⼤家对Spring MVC有⼀个最简单的认识,⾸先给出其组件和流程图,如图所⽰。
图中的阿拉伯数字给出了Spring MVC的服务流程及其各个组件运⾏的顺序,这是Spring MVC的核⼼。
⾸先,Spring MVC框架是围绕着DispatcherServlet⽽⼯作的,所以这个类是其最为重要的类。从它的名字来看,它是⼀个Servlet,那么根据Java EE基础的学习,我们知道它可以拦截HTTP发送过来的请求,在Servlet初始化(调⽤init⽅法)时,Spring MVC会根据配置,获取配置信息,从⽽得到统⼀资源标识符(URI,Uniform Resource Identifier)和处理器(Handler)之间的映射关系(HandlerMapping),为了更加灵活和增强功能,Spring MVC还会给处理器加⼊拦截器,所以还可以在处理器执⾏前后加⼊⾃⼰的代码,这样就构成了⼀个处理器的执⾏链
(HandlerExecutionChain),并且根据上下⽂初始化视图解析器等内容,当处理器返回的时候就可以通过视图解析器定位视图,然后将数据模型渲染到视图中,⽤来响应⽤户的请求了。
当⼀个请求到来时,DispatcherServlet⾸先通过请求和事先解析好的HandlerMapping配置,找到对应的处理器(Handler),这样就准备开始运⾏处理器和拦截器组成的执⾏链,⽽运⾏处理器需要有⼀个对应的环境,这样它就有了⼀个处理器的适配器(HandlerAdapter),通过这个适配器就能运⾏对应的处理器及其拦截器,这⾥的处理器包含了控制器的内容和其他增强的功能,在处理器返回模型和视图给DispacherServlet
后,DispacherServlet就会把对应的视图信息传递给视图解析器(ViewResolver)。注意,这⼀步取决于是否使⽤逻辑视图,如果是逻辑视图,那么视图解析器就会解析它,然后把模型渲染到视图中去,最后响应⽤户的请求;如果不是逻辑视图,则不会进⾏处理,⽽是直接通过视图渲染数据模型。这就是⼀个SpringMVC完整的流程,它是⼀个松散的结构,所以可以满⾜各类请求的需要,为此它也实现了⼤部分的请求所需的类库,拥有较为丰富的类库供我们使⽤,所以流程中的⼤部分组件并不需要我们去实现,只是我们应该知道整个流程,熟悉它们的使⽤就可以构建出强⼤的互联⽹系统了。
⽂章来源:SSM14.1
因篇幅问题不能全部显示,请点此查看更多更全内容