1.3 Spring MVC、Redis介绍 -《SSM深入解析与项目实战》

文章目录

  • 声明
  • 1.3 了解Spring MVC
  • 1.4 了解Redis
  • 1.5 Spring、Spring MVC、MyBatis的分工合作

声明

专栏链接:https://chenhx.blog.csdn.net/category_10263372.html
作者:谙忆

1.3 了解Spring MVC

Spring MVC是属于表现层的框架,是属于Spring框架Web Flow模块的一部分。

Spring MVC是一个模型-视图-控制(MVC)框架,实现了Model-View-Controller模式,将数据、业务和展示之间进行了分离,这种分离使我们的开发更容易定制。

Spring MVC中模型-视图-控制说明:

  • 模型:模型一般封装数据,通常由基本的Java对象(POJO)组成

  • 视图:主要用来呈现数据模型,通常是生成浏览器可以解析的HTML输出,用户可以浏览查看

  • 控制:也就是控制器,用来处理用户的请求,通过请求构建合适的模型将其传递到视图进行呈现给用户浏览

1.3 Spring MVC、Redis介绍 -《SSM深入解析与项目实战》_第1张图片
图1-5 Spring MVC请求流程图

Spring MVC相关流程说明:

  • DispatcherServlet接口,Spring提供的前端控制器,所有的请求都需要它来进行分发给对应的Handler(根据不同请求信息,比如说Url来进行分发)。在前端控制器将请求分发给Controller之前,需要先通过HandlerMapping(处理器映射器)解析请求链接,然后根据请求链接找到执行这个请求的类,也就是Handler。然后定位到具体页面控制器(Controller)

  • 页面控制器(Controller)进行功能处理,将收集的参数绑定到一个对象,该对象在Spring MVC中称为命令对象,再将命令对象委托给业务对象进行业务处理,处理后将返回ModelAndView(模型数据和逻辑视图)

  • 前端控制器根据返回的逻辑视图名,选择对应的视图进行渲染,并把模型数据传入以便进行视图渲染。最后将视图返回给用户。

整个运行原理可以整理如下几个步骤:

1、用户提交请求到DispatcherServlet

2、由DispatcherServlet前端控制器根据请求链接查询一个或者多个HandlerMapping,找到处理请求的Controller

3、前端控制器将请求委托到Controller

4、Controller调用业务对象,处理完逻辑以后,返回ModelAndView

5、前端控制器根据Controller返回的ModelAndView,找到ModelAndView指定的视图

6、最后将视图结果显示到客户端,展示给用户看

Spring MVC的运行流程基本是上面所述了,了解流程是开始学习Spring MVC的第一步。

关于Spring MVC的更多知识,将在第二篇Spring MVC框架进行大篇幅详解。

1.4 了解Redis

Redis是一个开源的Key-Value数据库,底层是使用ANSI C编写的。是目前最流行的键值对存储数据库之一。由于Redis读写的高性能,所以在Java项目中,开发者一般使用它来作为第三方缓存。

Redis属于人们常说的NoSQL数据库或者说是非关系型数据库。Redis除了能存储普通的字符串之外,还可以存储list、set、zset、hash等数据结构的存储。一般来说,只有在对性能要求非常高或者是其他必要的情况下,才会使用Redis,因为Redis是内存数据库,存储费用相比关系型数据库来说是要高一些的。在平时的使用中,应该根据需要来进行选择是否使用Redis,并且考虑是将Redis作为数据库还是仅仅只是缓存,以及应该如何通过复制、持久化和事务等手段保证数据的可靠性和完整性。

Redis虽然是单线程模型,但是由于Redis的性能非常优异,所以在绝大多数的场景下,Redis的性能都不会是瓶颈。

Redis 的优势:

  • Redis的性能非常高,Redis读的速度大约11万次/秒,写的速度大约是8.1万次/秒

  • Redis具有丰富的数据类型存储,支持string、list、hash、set、zset等数据类型的存储

  • Redis的所有操作都是原子性的,所以对于Redis来说,操作要么是成功执行,要么就是失败(完全不执行)。对于多个操作,Redis支持事务,可以通过MULTI和EXEX指令进行包装,然后进行原子性执行。

  • Redis具有丰富的特性,支持publish/subscribe(消息的发布和订阅),通知,设置key过期时间等特性
    Redis可以用来作为存储的数据库,队列,以及缓存系统。
    Redis作为缓存系统的时候,可以对每个键值对设置过期时间(强烈建议对于每个键值对都设置过期时间,即时过期时间很长都没事,但不要不设置过期时间)。
    Redis作为队列,LPUSH类型建可以用来实现队列,支持阻塞时读取,非常容易实现一个高性能的优先级队列。
    Redis也是可以用来作为数据库直接存储数据,但是这个场景并不实用,基本上都是将Redis作为高速缓存和session状态的存储层,搭配其他的关系型数据库使用。
    Redis不适合作为数据库存储数据的部分原因如下:

  • Redis的数据全部是内存占用,在数据量非常大的情况下,每次重启,进行备份,需要将数据全部加载进内存,显然是不合理的,内存的成本比磁盘大很多

  • Redis半持久化模式下,并不是实时的,一旦断电,即会丢失一些数据

  • Redis的查询主要是对于Key的查询,进行复杂的数据查询非常麻烦

  • Redis的事务支持过于简单

不排除在某些特定场景下使用Redis作为数据更为实用的情况(比如说对性能要求非常高,内存足够大,允许一定程度的数据丢失的情况),但是建议还是使用关系型数据库作为存储数据库更好。

1.5 Spring、Spring MVC、MyBatis的分工合作

经过前面的几个小节,对于Spring,Spring MVC和MyBatis都有了一定的了解。本小节将梳理这三个框架是如何分工合作的。

Java程序主要分为以下几层:

  • 视图层,也就是View层
    用户通过视图层来和我们的应用进行交互
    进行页面的展示,比如说JSP,html等
    该层与controller层结合开发

  • 表现层,也就是controller层(Handler层)
    主要是负责控制用户分发访问对应的业务模块
    controller层通过调用service层接口来控制具体的业务流程,service层的接口通过Spring配置进行注入。

  • 业务层,service层
    负责业务模块的逻辑处理
    先设计接口,再实现接口的实现类,通过Spring配置文件中的配置初始化
    在service进行一些逻辑处理后再调用DAO层定义的接口实现数据库的操作

  • 持久层,DAO层
    负责和数据库进行交互,用来处理数据的增删改查
    DAO层的设计只需要设计DAO层的接口,实现则通过MyBatis的配置来进行映射到执行具体的SQL语句

Spring、Spring MVC、MyBatis分别负责的模块流程图如图1-6所示。

1.3 Spring MVC、Redis介绍 -《SSM深入解析与项目实战》_第2张图片
图1-6 Spring、SpringMVC、MyBatis流程图

Spring负责的是整个项目中Bean的管理,理解成一个容器框架。

Spring MVC已经可以算是融合在Spring中的产品,主要负责的是Controller层,让开发者更容易定制某些技术,例如,不局限于前端展示只能用JSP技术。将控制器,模型对象以及处理程序的对象进行了分离。

MyBatis负责让开发者使用简单的XML配置或注解实现将接口和POJO映射成数据库中的数据以及操作。

你可能感兴趣的:(SSM深入解析与项目实战,spring,redis,java)