SpringMvc框架(SpringMvc初识MVC三层架构)
⽬录,更新ing,学习Java的点滴记录
  ⽬录放在这⾥太长了,附⽬录链接⼤家可以⾃由选择查看--------
SpringMvc知识
第⼀篇---->
第⼆篇---->
第三篇---->
第四篇---->
第五篇---->spring ioc注解
第六篇---->
第七篇---->
第⼋篇---->
第九篇---->
第⼗篇---->
1. 三层架构和MVC设计概述
1.1 MVC发展
MVC的全名是Model View Controller,分别是模型(Model)--视图(View)--控制器(Controller)的缩写.
  1) Model(模型):通常指的就是我们所说的数据模型,⼀般作⽤都是封装数据
  2) View(视图):通常指html或者jsp.作⽤是⽤来展⽰数据
  3) Controller(控制器):是应⽤程序中处理⽤户交互的部分,作⽤是处理程序业务逻辑.
MVC框架是⼀种设计理念,它不仅存在于Java世界中,⽽且⼴泛存在于各类语⾔和开发中,包括Web的前端应⽤,PHP等语⾔.根本作⽤是解耦各个模块.在早起的JavaWeb开发中,主要是`JSP+Java Bean模式,称之为Model1.
缺点和⾮常明显,JSP和JavaBean之间耦合程度过⾼,Java和HTML也耦合在⼀起,这样开发者不仅需要掌握Java,还需要有不低 的前端⽔平.更严重的时候,出现了页⾯前端和后端相互依赖的情况,前端等待后端完成,⽽后端也等待前端完成,才能进⾏有效测试,并且复⽤性很差,因为业务逻辑基本都是由jsp完成.
由于种种弊端,这种⽅式很快被Servlet+JSP+JavaBean取代了,这也可以说是早起的MVC模型,暂称为Model2
早起的MVC模型多了⼀个Servlet组件,⾸先是⽤户的请求到达Servlet,Servlet组件主要作为控制器,这样Servlet就接受了这个请求,可以通过它调度JavaBean,来读写数据库中的数据,然后将结果放到JSP中,这样就可以获取数据并将数据展⽰给⽤户了.
这样的模式成为MVC模式,⽽Servlet扮演控制器(Controller)的功能,JavaBean则是⼀个专门操作数据库组件的模型层(Model),JSP主要是展⽰给⽤户看的,它是⼀个视图(View)的功能.使⽤MVC的⼀个根本
好处在于前后端得到了⼀定的分离,但是仍旧存在⼀定的耦合,对于后端⽽⾔,由于控制器和模型层的分离使得⼤量的Java代码可以得到重⽤,⽽这个时候作为MVC框架的经典–Struts1/2和作为模型层的Hibernate纷纷崛起了.
但是仍旧存在⼀些问题,Web页⾯的⼤部分采⽤Ajax请求,他们之间的交互只需要JSon数据⽽已,这样对于JSP的耦合度的依赖就⼤⼤降低了.但是⽆论是Struts1还是Struts2和前端JSP都有着⽐较紧密的关联,尤其是在Struts1中,存在⼤量的关于jsp的jar包,但是⼤部分请求来⾃于⼿机端等,对于jsp的依赖⼤⼤减少,这注定了依赖于页⾯编程的Struts已经不适合时代的发展.
1.2 三层架构
⼤部分的开发结构都是基于两种形式,⼀种是C/S架构,也就是客户端/服务器,另⼀种是B/S架构,也就是浏览器/服务器.在JavaEE开发中,⼏乎全部都是基于B/S架构的开发.在B/S架构中,系统标准的三层架构包括:表现层,业务层,持久层.
表现层:
  是常说的web层.负责接收客户端请求,向客户端响应结果,通过客户端使⽤http协议请求web层,web需要接收http请求,完成http响应,  表现层包括展⽰层和控制层:控制层负责接收请求,展⽰层负责结果的显⽰.
  表现层依赖业务层,接收到客户端请求⼀般会调⽤业务层进⾏业务处理,并将处理结果响应给客户端.
  表现层⼀般都是⽤MVC模型(MVC是表现层的设计模型,和其它层没有关系)
业务层:
  是我们常说的service层.它负责业务逻辑处理,和项⽬的需求息息相关.web层依赖业务层,但是业务层不依赖web层,可能会依赖持久层.
  如果要对数据持久化需要保证事务⼀致性.事务应该放到业务层来控制
持久层:
  是我们常说的dao层,负责数据持久化,包括数据层和数据访问层.数据层即数据库,它是对数据进⾏持久化的载体,数据访问层是业务层和持久层交互的接⼝,业务层(service)需要通过数据访问层将数据持久化到数据库中.
1.3 SpringMvc是什么
SpringMvc是⼀种基于Java实现的MVC设计模型的Web框架,它属于Spring FrameWork的后续产品.Spring框架提供了构建web应⽤程序的各种MVC模块,可以使⽤SpringMvc或者其他MVC开发框架.
SpringMvc已经成为⽬前最主流的MVC框架之⼀,在Spring3.0之后全⾯超越Struts2,成为最优秀的MVC框架
它通过⼀套注解,让⼀个简单的Java类称为处理请求的控制器,⽽⽆需实现任何借⼝,同时还⽀持RESTful风格的请求.
1.4 SpringMvc的架构
对于持久层⽽⾔,随着软件的发展,迁移数据库的可能性很⼩,所以在⼤部分情况下都⽤不到Hibernate的HQL来满⾜移植数据库的要求.与此同时,性能对互联⽹更为重要,不可优化SQL,不够灵活成了Hibernate难以治愈的伤痛,这样MyBatis就崛起了,⽆论是Hibernate还是MyBatis都没处理好数据库事务的编程,同时随着各种NoSQL的崛起,使得JavaWeb应⽤不仅可以从数据库获取数据,也可以从NoSQL获取数据库,这些已经不是持久层框架能处理的了,⽽SpringMvc给出了⽅案
图中将传统的模型层分为了业务层(Service)和数据访问层(Dao,Data Access Object).在Service下可以通过Spring声明式事务操作数据访问层,⽽在业务层上还允许访问NoSQL,这样就能够满⾜对于NoSQL的使⽤了,它的使⽤可以⼤⼤提⾼互联⽹系统的性能.对于SpringMvc⽽⾔,它最⼤的特⾊是结构松散,⽐如可以在SpringMvc中使⽤各类视图,包括json,jsp,xml等.
1.5 SpringMvc组件与流程
SpringMvc的核⼼在于其流程,这也是使⽤SpringMvc框架的基础,SpringMvc是⼀种基于Servlet的技术,它提供了核⼼控制器
DispatcherServlet和相关组件,并制定了松散的结构,以适合各种灵活地需要.
SpringMvc的组件和其流程图如下:
各组件简介
  DispatcherServlet:前端控制器:⽤户请求到达前端控制器,它就相当于mvc模式中的C,它是整个流程控制的中⼼,由它调⽤其他组件处理⽤户的请求,DispatcherServlet的存在降低了组件之间的耦合性
  HandlerMapping:处理器映射器,负责根据⽤户请求到Handler处理器,SpringMvc提供了不同的映射器实现不同的映射⽅式.
  Handler:处理器,开发中主要编写的具体业务控制器,由DispatcherServlet把⽤户请求转发到Handler.由Handler对具体的⽤户请求进⾏处理
  HandlerAdapter:处理器适配器,通过HandlerAdapter对处理器进⾏执⾏,这是适配器模式的应⽤,通过扩展适配器可以对更多类型的处理器进⾏执⾏
  ViewResolver:视图解析器,负责将处理结果⽣成View视图,⾸先根据逻辑视图名解析成物理视图名即具体的页⾯地址,再⽣成View视图对象,最后对View进⾏渲染将处理结果通过页⾯展⽰给⽤户,需要由开发⼈员根据业务需求开发具体的页⾯.
上图中通过序号标注了各个组件的运⾏顺序,这是SpringMvc的核⼼
⾸先,SpringMvc框架是围绕DispatcherServlet⽽⼯作,所以这个类是最为重要的类.从他的名字来看,它是⼀个Servlet,他可以拦截http发送过来的请求,在Servlet初始化(调⽤init⽅法)是,SpringMvc会根据配置,获取配置信息,从⽽得到统⼀资源标识符和处理器之间的映射关系(HandlerMapping),为了更加灵活和增强功能,SpringMvc还会给处理器加⼊,所以还可以在处理器执⾏前后加⼊⾃⼰的代码,这样就构成了⼀个处理器的执⾏链,并根据上下⽂初始化视图解析器等内容,当处理器返回的时候就可以通过视图解析器定位视图,然后将数据模型渲染导视图中,⽤来响应⽤户的请求了.
SpringMvc完整流程⽂字描述:当⼀个请求到来时,DispatcherServlet⾸先通过请求和事先解析好的HandlerMapping配置,到对应的处理器(Handler),这样就准备开始运⾏处理器和组成的执⾏链,⽽运⾏处理器需要有⼀个对应的环境,这样它就有了⼀个处理器的适配器(HandlerAdapter),通过这个适配器就能运⾏对应的处理器及其,这⾥的处理器包含了控制器的内容和其他增强的功能,在处理器返回模型和视图给DispatcherServlet后,DispatcherServlet就会把对应的视图信息传递给视图解析器(ViewResolver).注意,这⼀步取决于是否使⽤逻辑视图,如果是逻辑视图,那么视图解析器就会解析它,然后把模型渲染到视图中去,最后响应⽤户的请求;如果不是逻辑视图,则不会进⾏处理,⽽是直接通过视图渲染数据模型.
从SpringMvc的流程和组件中可以看出,它是⼀个⾮常松散的结构,可以满⾜各类请求的需要,它也实现了⼤部分的请求所需的类库,并且流程中⼤部分组件不需要我们去实现,只是我们必须要知道整
个流程,这样才能更有利于我们掌握SpringMvc
在SpringMvc系列更新完的最后⼀篇,会给出⼀篇超详细的源码级流程分析,帮助⼤家深层次去理解掌握
1.6 SpringMvc⼊门案例–不变的HelloWorld
开发⼯具IDEA(使⽤Eclipse的话,步骤也不会差太多,能建好项⽬即可)
初学者很可能⼀些细节看不懂,没有关系,能够了解基本流程即可,各个部分后⾯更新后都会详细说滴
创建项⽬(建议⾸先创建⼀个空Project,然后⾥⾯新建Module,这样⽬录结构更美观)创建空Project
创建Module

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。