SSM开发框架之SpringMVC(一)

101 阅读5分钟
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情

俗话说:温故而知新,学习SSM框架也有一段时间了,在开发项目的时候虽然处于会用的程度,但是对于这个框架的理解仍然不够深刻,因此进行一个复习,加深自己对于SSM框架的理解,同时我也会尽量将这些基础点以我自身的理解写出来,希望能对大家有所帮助

什么是SpringMVC?

SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,目前已经称为最主流之一的MVC框架之一,并且随着Spring3.0的发布,全面超越Struts2,称为最优秀的MVC框架。它通过一套注解,让一个简单的Java类称为处理请求的控制器,并且无须实现任何接口,同时它还支持RESTful编程风格的请求

那么在一段关于SpringMVC的概述中出现了两个我们可能会比较陌生的词:MVC设计模型、RESTful编程风格

RESTful编程风格

RESTful是一种软件的架构风格、设计风格,并非标准,它只是提供了一组设计原则和约束条件。主要用于客户端与服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。

那么上述所说的RESTful编程风格的请求就是使用"url+请求方式"表示一次请求目的,我们在HTTP协议中的四种请求方式有如下使用规范

  • Get:用于获取资源
  • POST:用于新建资源
  • PUT:用于更新资源
  • DELETE:用于删除资源

举个例子:如果用户想要获取用户id为1的用户的信息,那么用户发送的请求url就应该是/user/1

如果用户想要新增一个用户user,那么他发送的请求url就应该是/user

什么是MVC设计模型

我们实际开发的项目以及产品中,客户通过浏览器或者app等进行数据的增删改查之类的操作,其实可以分成三个部分:接收并处理客户发送的请求、根据客户发送的请求进行相应的业务逻辑处理、访问数据库进行数据的增删改查等操作。如果我们将这三部分放在一起,那么就会造成代码的耦合度很高,不利于项目的功能拓展,代码的复用等。因此,就有了代码分层的思想,将以上三个部分分为三层,分别是:模型层(Model)、显示层(View)、控制层(Controller)

模型层:一般指的是数据库中的entity对象模型,它封装了数据和对数据的操作,是实际进行数据处理的地方

显示层:负责将数据展现给用户

控制层:处理用户的请求并返回给用户对应的响应结果

我们今天分享的就是应用于控制层的框架——SpringMVC

为什么要使用SpringMVC

在之前的JavaWeb学习当中,我们对于不同的请求,我们都单独的使用一个Servlet进行请求的接送和响应的发送,但是在这个过程中,我们可以发现很多行为都是这些Servlet共有的,比如获取方法的名称找到用户调用的对应方法,获取用户请求这些步骤。因此SpringMVC的出现,将所有的Servlet的共有行为提取出来并且将其封装,让每个类都执行其特有的功能,不再需要执行共有行为,从而简化了开发流程,提高了代码的复用性。

SrpingMVC的快速入门

  1. 导入SpringMVC坐标(Maven)

  1. 在web.xml配置SpringMVC核心控制器DispatcherServlet

  1. 创建Controller类和视图页面,使用注解(RequestMapping)配置Controller类中业务方法的映射地址

  1. 在SpringMVC核心配置文件spring-mvc.xml中配置组件扫描(扫描@Controller注解)

然后在web.xml中让核心控制器DispatcherServlet读取spring-mvc.xml

配置文件

  1. 客户端发起请求测试

SpringMVC流程图示

  1. 用户发送请求到前端控制器DispatcherServlet
  2. DispaatcherServlet收到请求调用HandlerMapping处理器映射器
  3. 处理器映射器找到具体的处理(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
  4. DispatcherServlet调用HandlerAdapter处理器适配器
  5. HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)
  6. Controller执行完成返回ModelAndView
  7. HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
  8. DispatcherServlet将ModelAndView传给ViewResolver视图解析器
  9. ViewResolver解析后返回具体View
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户

@RequestMapping

作用:用于建立请求URL和处理请求的方法之间的对应关系 位置:

  • 放在类上,请求URL的第一级访问目录。如果不写在类上的话,就相当于应用的根目录
  • 放在方法上:请求URL的第二级访问目录,与类上的使用@RequestMapping标注的一级目录一起组成访问虚拟路径属性: @RequestMapping的成员属性:
  • value:用于指定请求的URL。
  • method:用于指定请求的方式
  • params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的key和value必须和配置的一模一样 例如:
  • params = {"accountName"},表示参数必须有accountName
  • params = {"money!100"},表示请求参数中money不能是100