欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 时评 > Spring Web MVC入门

Spring Web MVC入门

2025/4/24 1:46:40 来源:https://blog.csdn.net/2301_80235470/article/details/147391183  浏览:    关键词:Spring Web MVC入门

1.什么是Spring Web MVC:

1.1 MVC定义:

官方解释:Spring Web MVC是基于Servlet API构建的原始Web的框架,从一开始就包含在Spring框架中。它的正式名字“Spring Web MVC”,用于构建基于java的web应用程序,遵循模型(Moder)-视图(View)-控制器(Controller)

View(视图):指在运用程序中专门用来与浏览器进行交互, 展示数据资源。

Model(模型):是应用程序的主体部分,代表了程序的数据和业务逻辑。

Controller(控制器):可以理解为一个分发器,用来决定视图传来的请求,并调用相应的模型进行相应的处理,以及处理完后需要调回哪一个视图,即用来连接模型和视图。

 1.2 什么是Spring Web MVC:

MVC是一种架构设计模式,也是一种思想,而Spring Web MVC是对MVC思想的具体实现,除此之外,Spring Web MVC还是一个Web框架。

总结来说,Spring Web MVC是一个实现了MVC思想的Web框架。

不过Spring在实现MVC思想时,也结合了自身项目的特点,做出了一些改变,如下图:

 Controller也可以负责接受用户的请求,并调用相应的模型进行进行处理。

2.学习Spring MVC:

既然是Web框架,在浏览器输入了URL之后,我们的Spring MVC项目就可以感知到用户的请求,并给于相应。重点也就是学习如何通过浏览器和用户程序进行交互。包括下面三个方面:

1.建立连接:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序。

2.请求:用户在发起请求时,会带有一些参数,在程序中要想办法获取到这些参数,所以请求最主要的就是获取参数。

3.响应:执行了业务逻辑之后,要把程序执行的结果返回给用户,也就是响应。

2.1 建立连接:

@RequestMapping介绍:

Spring MVC中使用@RequestMapping来实现URL路由映射

路由映射:当用户访问一个url时,将用户的请求对应到程序中的某个类某个方法的过程就叫路由映射。

@RestController介绍(后面会详细说):

一个项目中很多类,每个类可能有很多的方法,Spring怎么知道要执行哪个方法呢?

Spring会对所有类进行扫描 ,如果类加了RestController,spring才会去这个类里面的方法看有没有加@RequestMapping。(作用并不止于此)

例1:

在浏览器中输入127.0.0.1:8080/Test/hello

 @RequestMapping的使用:

@RequestMapping既可以修饰类,也可以修饰方法。当修饰类和方法时,访问的地址是类路径+方法路径。

@RequestMappiing标识一个类,设置映射请求的请求路径的初始信息

@RequestMapping标识一个方法时,设置映射请求的请求路径的具体信息。

在上面的例1中,在@RequestMapping的URL的路径前加不加 都是可以的,但是在企业中还是加上比较好。

扩展:

因为RequestMapping既是GET也是POST请求,但是我们如果只想要支持GET请求怎么办呢?

其实在RequestMapping可以指定GET/POST请求。

2.2传参(软件POSTMAN):

1.普通传参,也就是通过查询字符串传参

学习HTTP的时候,我们通过URL来访问互联网中的某一资源:

URL格式如下:

其中查询字符串就是请求的参数。

 2.form-data(完整表示为:multipart/form-data)

表单提交数据,在form标签中加上 enctyped="multipart/form-data",通常用于提交一些文件/图片,对应Body中:Content-Type:multipart/form-data

 3.x-www-form-urlencoded:

form表单。对应Content-Type:application/x-www-form-urlencoded。

4.raw:

可以上传任意格式的文本,可以上传text,json,xml,html等。

2.3 请求:

1.传递单个参数:

@RequestMapping("/param")
@RestController
public class ParamController {@RequestMapping("/m1")public String m1(String name){return "姓名:"+name;}
}

 可以看到,后端成功的拿到了name参数。

Spring MVC会根据方法的参数名,找到对应的参数,并赋值给方法,如果参数名不对,则不能赋值成功。

 注意事项:

1.如果传参的类型是基本类型(整数类型:byte,short,int,long 浮点类型:float,double 字符类型:char),参数必须传(除boolean外),否则会报错500

2.类型不匹配时,也会报错400

2.传递多个参数:

接受多个参数,和接受单个参数是一样,直接使用方法的参数接受即可,使用多个形参。

@RequestMapping("/m2")public String m2(String name,Integer age){return "姓名: "+name+" age: "+age;}

 当有多个参数传参时,前后端进行参数匹配时,是以参数的名称进行匹配的,因此参数的位置是不影响后端获取参数的结果的。

3.传递对象:

如果参数比较多时,方法声明就需要有很多的形参,并且后续每次新增一个参数,也需要修改方法声明。我们不妨将这些参数封装为一个对象。

Spring MVC可以自动实现对象参数的赋值

创建一个对象Person

public class Person {private String name;private Integer age;public Integer getAge() {return age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"姓名='" + name + '\'' +", 年龄=" + age +'}';}
}
 @RequestMapping("/m3")public String m3(Person person){return person.toString();}

Spring会根据各个的参数的名字自动绑定到对象的各个属性中去,如果某个属性未传递,则赋值为null(基本类型则是默认初始值)

4.后端参数重命名:

有些情况,前端传参的值的名称和后端接受的参数的名字有可能不一样,这样就会出现接受不到的情况,如果出现这种情况,我们可以使用@RequestParam来重命名后端的参数值。

@RequestMapping("/m4")public String m4(@RequestParam("name") String n){return n;}

 注意:

1.使用@RequestParam进行参数重命名时,请求参数只能和@RequestParam声明的名称一样,才能进行参数绑定和赋值

2.使用@RequestParam进行参数重命名时,此时参数就成了必传参了,要想让他是非必传参,只需要修改@RequestParam中的require为false

此时参数就是非必传参数了。

5.传递数组:

Spring MVC可以自动绑定数组参数的赋值。

  @RequestMapping("/m5")public String m5(String[] str){return Arrays.toString(str);}

6.传递集合:

集合传递和数组传递是相似的,集合传递需要@RequestParam来绑定参数关系。

@RequestMapping("/m6")public String m6(@RequestParam List<String> str){return "结果:"+str;}

7.传递JSON:

7.1 JSON(JavaScript Object Notation)概念:

json是一种轻量级的数据交互格式,有着自己的格式和语法,使用文本表示一个对象或者数组的信息,因此JSON的本质是一个字符串,主要负责在不同语言中数据的传递和交换。

7.2Json语法:

Json是一个字符串,我们看一段Json代码:

{"squadName": "Super hero squad","homeTown": "Metro City","formed": 2016,"secretBase": "Super tower","active": true,"members": [{"name": "Molecule Man","age": 29,"secretIdentity": "Dan Jukes","powers": ["Radiation resistance","Turning tiny","Radiation blast"]},{"name": "Madame Uppercut","age": 39,"secretIdentity": "Jane Wilson","powers": ["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name": "Eternal Flame","age": 1000000,"secretIdentity": "Unknown","powers": ["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]
}

也可以压缩表示为:

{"squadName":"Super hero squad","homeTown":"Metro City","formed":2016,"secretBase":"Super tower","active":true,"members":[{"name":"Molecule Man","age":29,"secretIdentity":"Dan Jukes","powers":
["Radiation resistance","Turning tiny","Radiation blast"]},{"name":"Madame Uppercut","age":39,"secretIdentity":"Jane Wilson","powers":["Million tonne punch","Damage resistance","Superhuman reflexes"]},{"name":"Eternal Flame","age":1000000,"secretIdentity":"Unknown","powers":["Immortality","Heat Immunity","Inferno","Teleportation","Interdimensional travel"]}]}

两种数据的描述方式都一样,只不过第一种进行了格式化,更易读。

语法:

1.数据在键值对(Key/Value)中。

2.数据由逗号分隔开。

3.对象用{ }表示

4.数组用[ ]表示

5.值可以为对象,也可以为数组,数组中也可以包含多个对象。

7.3 Json的两种格式:

1.对象:大括号{ }保存的对象是一个无序的键值对集合,一个对象以左括号 { 开始,右括号 } 结束,每个键后面用:(冒号)键值对之间用,(逗号)隔开

2.数组:中括号[ ]保存的数组是值(value)有序的集合,一个数组以左中括号 [ 开始,右中括号 ] 结束,值之间使用逗号,隔开。

7.4 Json字符串和Java对象互转:

Spring MVC中也集成了JSON的转换工具,我们可以直接使用,来完成JSON字符串和JAVA对象的互转。

本质上是Jackson-databind提供的功能,Spring MVC把该工具包引入进来了,直接使用即可。

如果脱离了Spring MVC,我们就需要引入依赖。

< dependency >
< groupId >com.fasterxml.jackson.core</ groupId >
< artifactId >jackson-databind</ artifactId >
< version >2.13.5</ version >
</ dependency >

 json的转换工具很多,Jackson-databind只是其中一种。

public class JSONutils {private static ObjectMapper objectMapper = new ObjectMapper();public static void main(String[] args) throws JsonProcessingException {Person person = new Person();person.setName("酷酷的森");person.setAge(18);//java对象转json字符串String json=objectMapper.writeValueAsString(person);System.out.println("json字符串为:"+json);//json字符串转java对象Person p=objectMapper.readValue(json, Person.class);System.out.println("name"+p.getName()+",age"+p.getAge());}
}

 总结:

使用ObjectMapper对象提供的两种方法,可以完成java对象和json的互转。

writeValueAsString:把对象转为JSON字符串。

readValue:把字符串转成对象。

 7.5JSON的优点:

1 简单易用:语法简单,易于理解和编写,可以快速的进行数据交换。

2 跨平台支持:JSON可以被多种语言解析和生成,可以在不同平台和语言之间进行数据交互和传输。

3.轻量级:相较于XML格式,JSON数据格式更加轻量级,传输数据时占用带宽较小,可以提高传输数据的速度。

4.易于扩展:JSON数据格式灵活,支持嵌套对象和数组等复杂的数据结构,便于扩展和使用。

5.安全性高:JSON是纯文本格式,不包含可执行代码,不会执行恶意代码。

注意:传递JSON字符串时,后端要用RequestBody注解,才能接收到JSON字符串。

2.4 获取URL中参数:

这里要介绍一个新的注解:@PathVariable

PathVariable:路径变量。

和字面表达的一样,其主要作用于请求URL路径上的数据绑定。

1.如果方法参数名称和需要绑定的URL中的变量名称⼀致时, 可以简写, 不⽤给@PathVariable的属性赋值, 如上述例⼦中的id变量
2.如果⽅法参数名称和需要绑定的URL中的变量名称不⼀致时, 需要@PathVariable的属性value赋值, 如上述例⼦中的userName变量

注意:上传文件时,介绍新的注解:@RequestPart

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词