Spring MVC 1
什么是Spring Web MVC
官方对Spring MVC的描述是这样的:Spring Web MVC 是基于Severlet API构建的原始Web框架,从一开始就包含在Spring框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它通常被称为“Spring MVC”。
什么是Servlet呢?Servlet 是一种实现动态页面的技术. 准确来讲Servlet是⼀套 Java Web 开发的规范,或者说是⼀套 Java Web 开发的技术标准. 只有规范并不能做任何事情,必须要有人去实现它. 所谓实现 Servlet 规范,就是真正编写代码去实现 Servlet 规范提到的各种功能,包括类、⽅法、属性等.Servlet 规范是开放的,除了 Sun 公司,其它公司也可以实现 Servlet 规范,目前常见的实现了 Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称为"Servlet 容器". Servlet 容器用来管理程序员编写的 Servlet 类.
从上述定义我们可以得出一个信息:Spring Web MVC是一个Web框架。我们简称为:Spring MVC 。
那么什么是MVC呢?
MVC定义
MVC是Model View Controller的缩写,它是软件工程中到的一种软件架构设计模式,它把软件系统分为模型、视图和控制器三个基本部分。
View(视图):指在应用程序中专门用来和浏览器进行交互,展示数据的资源。
Model(模型):是应用程序的主体部分,用来处理程序中数据逻辑的部分。
Controller(控制器):可以理解为分发器,用来决定对于视图发来的请求,需要用哪一个模型来处理,以及处理完后要跳转回哪一个视图。即用来连接视图和模型。
比如我们去面试
我们进到公司之后,会先有一个HR接待我们,然后HR会带我们去找这个公司对应岗位的负责人,负责人会带我们去对接和我们面试的面试官。
在这个过程中,HR就是View(视图),负责接待我们;负责人就是Controller(控制器),根据我们的情况来去对接面试官;面试官就是Model(模型),根据负责人的要求来完成面试。
什么是Spring MVC?
MVC是一种架构设计模式,也是一种思想,而Spring MVC是对MVC思想的具体实现。除此之外,Spring MVC还是一个Web框架。
总的来说,Spring MVC是一个实现了MVC模式的Web框架。所以,Spring MVC是一个实现了MVC模式的Web框架,所以,Spring MVC主要关注有两个点:1、MVC 2、Web框架。
其实,我们早在上一篇文章就已经使用过Spring MVC了,在创建Spring Boot项目是,我们勾选的Spring Web框架其实就是Spring MVC框架:
这时候,有的同学就有疑问了,前面创建的不是Spring Boot 项目吗?怎么又变成Spring MVC项目了?他们之间到底有着什么样的关系呢?
Spring Boot 只是实现Spring MVC的其中一种方式而已。Spring Boot可以添加很多的依赖,借助这些依赖实现不同的功能,Spring Boot 通过添加Spring Web MVC框架,来实现web功能。
打个比方:
Spring是火车的话,那么Spring MVC就是卖火车票这个任务,Spring Boot是123
06,Spring MVC和Spring Boot都不能脱离Spring单独存在,换句话说它们都依赖于Spring。(卖火车票这件事和12306这个程序都不能离开火车),而Spring Boot是实现Spring MVC的一种方式(卖火车票能通过12306售卖,也可以通过售票处售卖)。
不过Spring在实现MVC时,也结合自身特点,做了一些改变,相对而言,下面这个图或许更加合适一些。
学习Spring MVC
既然是Web框架,那么当用户在浏览器中输入了url之后,我们的Spring MVC项目就可以感知到用户的请求,并给与响应。
咱们学习Spring MVC,重点也就是学习如何通过浏览器和用户程序进行交互。
主要分以下三个方面:
1、建立连接:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序。
2、请求:用户请求时会带一些参数,在程序中要想办法获取到参数,所以请求这块主要是获取参数的功能。
3、响应:执行了业务逻辑之后,要把程序执行的结果放回给用户,也就是响应。
对于Spring MVC来说,掌握了以上三个功能就相当于掌握了Spring MVC。
项目准备
SPringleMVC项目创建和Spring Boot创建项目相同,在创建的时候选择Spring Web就相当于创建了Spring MVC项目。
创建项目时勾选上Spring Web模块即可,如下图所示:
建立连接
在Spring MVC中使用@RequestMapping来实现URL路由映射,也就是浏览器连接程序的作用。
先在工作目录中,写一个RequestController类:
再添加上如下代码和注解:
@RestController
public class RequestController {@RequestMapping("/hello")public String sayHello(){return "hello spring mvc";}
}
启动之后,访问:127.0.0.1:8080/hello ,就可以看到程序返回的数据了。
@RequestMapping注解介绍
@RequestMapping是Spring Web MVC应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的。表示服务收到请求时,路径为/hello的请求就会调用sayHello这个方法的代码。
路由映射:当一个用户访问URL时,将用户的请求对应到程序某个类的某个方法的过程就叫做路由映射。
既然@RequestMapping已经可以达到我们的目的了,我们为什么还要加@RestController呢?
我们可以试着把@RestController去掉,重新启动服务器后,再访问一次。
可以看到,程序报了404(Not Found),找不到该页面,这就是@RestController起到的作用。
一个项目中,会有很多的类,每个类可能会有很多的方法,Spring怎么知道要去执行哪个方法呢?Spring会对所有的类进行扫描,如果类加了注解@RestController,Spring才会去看这个类里面的方法有没有加@RequestMapping这个注解。当然它的作用不止这一点,我们先用,后面再详细讲解。
@RequestMapping使用
@RequestMapping既可以修饰类,也可以修饰方法,当修饰类和方法时,访问的地址是类路径+方法路径。
@RequestMapping标识一个类:设置映射请求路径的初始信息。
@RequestMapping标识一个方法:设置映射请求请求路径的具体信息。
在原有代码的基础上,使用@RequestMapping修饰类。
@RequestMapping("/request")
@RestController
public class RequestController {@RequestMapping("/hello")public String sayHello(){return "hello spring mvc";}
}
刷新服务器,并访问:127.0.0.1:8080/request/hello
@RequestMapping是GET还是POST请求
GET请求 :
浏览器发送的请求类型都是get,通过以上案例,可以看出@RequestMapping支持get请求。
我们也可以通过Fiddler抓包进行查看:
也可以得到:@RequestMapping支持get请求。
Post请求:
我们通过form表单来构造请求:在stactic目录下创建test.html。
html代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/request/hello" method="post"><input type="submit" value="提交">
</form>
</body>
</htm
刷新之后,访问:标题。
点击提交的同时,使用Fiddler进行抓包。可以看到@RequestMapping是支持Post请求的。