SpringMVC 是 Spring 的 MVC 模块,也就是来实现 Web 功能的模块。Spring 里面包含有很多的模块,比如说 Spring Framework 是它的基础模块,Spring JDBC 是封装了 JDBC 来实现持久化的模块,还有比如说 Spring Security 是它的安全模块,当然还有 Spring Boot 和 Spring Cloud,SpringMVC 是 Spring 的模块之一。
那么 SpringMVC 它到底是什么?这个框架到底有什么作用?首先我们需要知道什么是 MVC。
MVC 是一种软件架构思想,将软件按照模型(Model)、视图(View)、控制器(Controller)来进行划分。也就是说当我们在实现一个 Web 工程的时候,我们需要来按照模型、视图、控制器来实现我们当前一个完整的 Web 功能。
首先那就是 M 层,M 层指的是 Model 层,即模型层,其实就是工程中的 JavaBean。JavaBean 指的是当前工程里面所有处理数据的类,而不仅是我们的实体类。
处理数据的类有哪些?第一是实体类,实体类的作用就是存储数据,在实现持久化操作的时候,我们去查询一个表中的数据,让它来对应我们当前的一个实体类对象。还有一种是业务处理的 Bean,比如说 Service 是来处理业务逻辑的,Dao 是用来查询数据库、实现持久化操作的,它们两个也是来对我们当前的数据进行处理的,因为处理数据的类就叫做 JavaBean,所以说它们也是 JavaBean,是进行处理业务的 Bean。
所以我们的 JavaBean 就分为两类,一种是用来存储业务数据的实体类,然后还有一种就是来处理业务逻辑和数据访问的业务处理的类。
好,再往下就是我们的第二个叫做 View,叫做视图层,这个视图层是用来干嘛的?视图是来展示数据的,主要指的是我们工程中的 .html 或者是 .jsp 这些页面。我们就可以通过 .html 和 .jsp 来与用户进行交互,用户可以通过页面,向服务器中发送请求。同样我们处理完请求之后,也会响应用户一个完整的页面来展示最终的结果。这个就是我们的视图层,主要就是来展示数据、与用户进行交互的。
最后一个 C 代表的是 Controller,也就是控制器或控制层,其实主要就是 Servlet。控制层,主要来接收请求和响应,比如说现在有一个请求从浏览器发送到服务器之后,我们的服务器该如何去接收、处理这个请求,该如何响应浏览器呢?那就是由我们的 Servlet 来完成的。
好,我们现在知道了 MVC 的每一个部分到底指的是什么,接下来可以来看一下 MVC 的一个整个的工作流程到底是怎样的。首先我们的用户通过我们的视图层,来发送请求到我们的服务器,服务器中我们能够接收请求处理请求响应浏览器的,那就是我们的控制层了。控制层接收完请求之后,他就会去调用我们相对应的 Service 来处理业务逻辑,然后 Service 调用我们当前的 Dao 来进行数据库的操作,然后将访问数据库所得到的结果返回给 Service,再返回到我们的控制层,这个时候控制层就可以根据我们最终的结果,然后来响应浏览器了。
比如说对于一个书城项目。如果说我们在实现登录功能的时候,我们通过用户名跟密码查询数据库查询出来了一条数据,也就是说我们登录成功了,我们最终应该是重定向到我们的登录成功页面,而如果说我们当前没有登录成功,我们应该是转发到我们的登录页面,让用户重新来进行登录。
SpringMVC 就是 Spring 的一个 MVC 模块的内容,再往下,我们来看 SpringMVC 它到底是用来干什么的。
SpringMVC 是 Spring 为表述层开发提供的一整套完整的解决方案。
什么是表述层?我们学过三层架构,那三层架构分别就是表述层(或表示层)、业务逻辑层,还有我们的持久层,也就是数据访问层 Dao。
表述层指的是前台页面和我们的后台 Servlet。前台页面来发送请求到我们的服务器中,我们的服务器使用 Servlet 来接收请求、处理请求,最终来响应我们的浏览器。SpringMVC 处理的也就是这样的一个过程。
我们可以想想在这个过程里面我们都需要做什么,我们从浏览器中,以不同的方式来发送一个请求(超链接、form 表单提交),后端接收到一个请求之后,根据请求地址,来找到相对应的 Servlet,Servlet 生命周期中有三个方法:init 初始化、service 服务,还有一个就是 destroy 销毁。其中 service 方法就是我们处理请求和响应的方法。
当我们通过请求地址匹配到了 Servlet 之后,我们就需要在 service 中来处理请求了。比如说首先设置编码,设置编码的这些代码,我们可以统一把它给放在过滤器中。然后再往下的话,我们需要来获取请求参数,获取完请求参数之后来调用我们的 service 来处理业务逻辑。
service 处理完业务逻辑之后,会给我们返回来一个结果,这个时候我们就可以——比如说我们是查询操作,我们就把我们当前的数据给放在指定的域对象中,比如说我们当前查询所有数据展示在页面里面的功能,我们就需要将我们的这些信息然后放在我们的请求域中。或者说我们的登录功能,如果我们登录成功,我们要来记录用户的登录状态,这个时候我们就需要将我们的用户信息给放在我们当前的 session 里面。
然后再往下的话,我们就可以根据 service 处理业务逻辑之后的结果,来选择不同的方式响应浏览器。比如说登录有成功的情况,也有失败的情况,成功时应该通过重定向跳转到成功页面,而如果失败的话,我们就需要通过转发再次跳转到登录页面,为用户展示一个错误信息,让用户重新进行登录。
其实 SpringMVC 帮助我们来实现的也就是这些功能。
既然 SpringMVC 帮能帮助我们实现这些功能,我们在实现这些功能处理的时候,我们还需要像上一个阶段一样在 Servlet 里面把这些过程给写出来吗?不需要,因为 SpringMVC 它就是基于 Servlet 的,SpringMVC 把我们当前处理请求的这些过程都进行了封装,我们只需要使用 SpringMVC 为我们所提供的实现各个功能的这些代码,就可以来完成一个请求的处理了。
目前业界我们普遍来选择的就是 SpringMVC 来作为 Java 项目表述层开发的首选方案。其他表述层框架:Struts1、WebWork、Struts2。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/282024.html