java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringMVC入门指南

SpringMVC入门指南:从零掌握核心要点

作者:jjjava2.0

Spring MVC是Spring框架中的一个模块,用于构建基于MVC(模型-视图-控制器)设计模式的Web应用程序,本文给大家介绍SpringMVC入门指南:从零掌握核心要点,感兴趣的朋友一起看看吧

一、初步认识Spring Web MVC

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来自其源模块的名称(Spring-webmvc),但它通常被称为"Spring

MVC"。简而言之:Spring Web MVC是一个Web框架,后续简称为Spring MVC

什么是Servlet

Servlet 是⼀种实现动态页面的技术. 准确来讲Servlet是⼀套 Java Web 开发的规范,或者说是⼀套

Java Web 开发的技术标准. 只有规范并不能做任何事情,必须要有人去实现它. 所谓实现 Servlet 规范,就是真正编写代码去实现 Servlet 规范提到的各种功能,包括类、⽅法、属性等. Servlet 规范是开放的,除了 Sun 公司,其它公司也可以实现 Servlet 规范,目前常见的实现了 Servlet 规范的产品包括 Tomcat、Weblogic、Jetty、Jboss、WebSphere 等,它们都被称为"Servlet 容器". Servlet 容器用来管理程序员编写的 Servlet 类.

MVC定义:

MVC是Model(模型)、 View(视图)、 Controller(控制器)的缩写

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

Model(模型) 是应用程序的主体部分,用来处理程序中数据逻辑的部分.

Controller(控制器)可以理解为⼀个分发器,用来决定对于视图发来的请求,需要用哪⼀个模型

来处理,以及处理完后需要跳回到哪⼀个视图。即用来连接视图和模型

二、正式开始Spring MVC之旅

2.1 了解究竟要干嘛

Spring MVC重点就是如何通过浏览器和用户程序进行交互,主要为以下三个方面:

  1. 建立连接:将用户(浏览器)和Java程序连接起来,也就是访问一个地址能够调用到我们的Spring程序。
  2. 请求:用户请求时会带一些参数,在程序中要想办法获取到参数,所以请求主要目的是获取参数
  3. 响应:执行了业务逻辑之后,要把程序执行的结果返回给用户,就是响应。

2.2 建立链接

在Spring MVC中使用@RequestMapping来实现URL路由映射(链接程序的作用)

具体代码实现:

接下来在浏览器中输入:http://127.0.0.1:8080/hello/v1

2.2.1 @RequestMapping注解介绍

@RequestMapping 是 Spring MVC 应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的。表示服务收到请求时, 路径为 /hello/v1 的请求就会调用/hello/v1 这个方法的代码.

但需注意:这里需要加入@RestController

⼀个项目中, 会有很多类, 每个类可能有很多的方法, Spring程序怎么知道要执行哪个方法呢?Spring会对所有的类进行扫描, 如果类加了注解@RestController, Spring才会去看这个类里面的方法有没有加 @RequestMapping 这个注解, 当然他的作用还有很多,后面再详细介绍

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

2.2.2 @RequestMapping使用

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

注:@RequestMapping的URL路径前加不加 “/” 都行,但为了规范,还是加上比较好

2.2.3 @RequestMapping的请求模式

@RequestMapping 既支持Get请求, 又支持Post请求.如不指定method 属性该接口会同时支持 GET、POST、PUT、DELETE 等所有 HTTP 请求方式

指定GET/POST方法类型,具体操作:

三、认识Postman

访问不同的路径,就是前端给后端发送不同的请求,再发送请求时,可能会带有一些参数,所以了解Spring的请求,需要借助Postman来模拟传参过程。

下面通过具体的例子,来看看到底怎么使用吧:

3.1 传递单个参数

@RequestMapping("h1")
public String v1(String name){
    return "名字是"+name;
}

【使用postman传递】传递前:

传递后:

【直接通过浏览器发送请求并传参】:http://127.0.0.1:8080?name=hhh

参数类型详解:int 与 Integer 的区别

在 Spring MVC 中接收单个参数时,参数类型的选择会影响程序:

示例对比:

// 使用 int 类型 - 必须传参
@RequestMapping("/intDemo")
public String intDemo(int id) {
    return "ID: " + id;  // 前端不传 id 会报错
}
// 使用 Integer 类型 - 可选参数
@RequestMapping("/integerDemo")
public String integerDemo(Integer id) {
    if (id == null) {
        return "ID 未提供";
    }
    return "ID: " + id;
}
  1. 对于必填参数,可以使用 int 类型,但最好配合 @RequestParam(required = true) 明确要求。
  2. 对于可选参数,推荐使用 Integer 等包装类型,避免因前端遗漏参数导致程序崩溃。
  3. 使用包装类型时,注意在方法内部进行 null 值判断,确保逻辑正确性。

其他注意事项:

参数名匹配:Spring MVC 默认通过参数名进行匹配。前端传递的参数名必须与方法参数名一致(区分大小写)。例如,方法参数为 String userName,则前端必须传递 userName 参数。

使用 @RequestParam 注解:可以通过 @RequestParam 注解更精确地控制参数绑定:

  1. 参数类型转换:Spring MVC 会自动进行基本类型转换(如 String 转 int、long、boolean 等)。如果转换失败(例如传递 "abc" 给 int 类型),会抛出 TypeMismatchException 并返回 400 错误。
  2. 中文参数处理:如果传递中文参数出现乱码,需要在配置中设置字符编码过滤器(如 CharacterEncodingFilter),或在请求头中指定 Content-Type: application/x-www-form-urlencoded; charset=UTF-8
  3. GET vs POST:GET 请求的参数通过 URL 传递(如 ?name=value),POST 请求的参数通常在请求体中。Spring MVC 对两种方式都支持,但需要注意 POST 请求的 Content-Type
  4. 参数验证:对于重要参数,建议使用校验注解(如 @NotNull@Size@Min@Max)配合 @Valid 进行参数校验,确保数据合法性。

3.2 传递多个参数

@RequestMapping("h2")
public String v2(String name,Integer age){
   return "名字是"+name+"今年"+age;
}

对比两个图可以发现,前后端进行参数匹配时,参数的位置不影前后端获取参数结果

3.3 传递对象

public class Student {
    private int id;
    private String name;
    private String password;
    public Student(int id) {
        this.id = id;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

3.4 后端参数重命名

某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致,比如前端传递了⼀个age给后端,而后端是使用 userage 字段来接收的,这样就会出现参数接收不到的情况,如果出现这种情况,我们就可以使用 @RequestParam 来重命名前后端的参数值.

 @RequestMapping("/h4")
    public Object h(@RequestParam("age") String userage) {
        return "接收到的参数userage是"+userage;
    }

可以得出结论:

1. 使用 @RequestParam 进行参数重命名时, 请求参数只能和 @RequestParam 声明的名称⼀

致, 才能进行参数绑定和赋值.

2. 使用 @RequestParam 进行参数重命名时, 参数就变成了必传参数.

非必传参数设置

RequestMapping("/h5")
    public Object h1(@RequestParam(value="age", required = false) String userage) {
        return "接收到的参数userage是"+userage;
    }

3.5 传递数组

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

3.6 传递集合

集合参数:和数组类似, 同⼀个请求参数名有为多个, 且需要使用@RequestParam 绑定参数关系

@RequestMapping("/h7")
public String h7(@RequestParam List<String> list) {
    return "list:"+list+"  size: "+list.size();
}

3.7 传递JSON数据

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

JSON的语法:

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

2. 数据由逗号 , 分隔

3. 对象用 {} 表示

4. 数组用 [] 表示

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

JSON的两种结构

1. 对象: 大括号 {} 保存的对象是⼀个无序的键值对集合. ⼀个对象以左括号 { 开始, 右括号 } 结束。每个"键"后跟⼀个冒号 : 键值对使用逗号 , 分隔

2. 数组: 中括号 [] 保存的数组是值(value)的有序集合. ⼀个数组以左中括号 [ 开始, 右中括

] 结束,值之间使用逗号 , 分隔。

JSON优点

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

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

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

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

5. 安全性: JSON数据格式是⼀种纯⽂本格式,不包含可执行代码, 不会执行恶意代码,因此具有较高的安全性

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对象:接受JSON对象,需要使用 @RequestBody 注解

RequestBody: 请求正文,意思是这个注解作用在请求正文的数据绑定,请求参数必须在写在请求正文中

 @RequestMapping("/h8")
 public Object h8(@RequestBody Student s) {
     return s.toString();
 }

3.8 获取URL中的参数@PathVariable

这个注解主要作用在请求URL路径上的数据绑定

默认传递参数写在URL上,SpringMVC就可以获取到

  @RequestMapping("/h9/{id}/{name}")
    public String method8(@PathVariable Integer id, @PathVariable("name") String userName) {
        return "解析参数id:"+id+",name:"+userName;
    }

3.9 上传文件 @RequestPart

@RequestMapping("/h10")
      public String getfile(@RequestPart("file") MultipartFile file) throws IOException {
        //获取⽂件名称
         String fileName = file.getOriginalFilename();
        //⽂件上传到指定路径
        file.transferTo(new File("D:/code/" + file.getOriginalFilename()));
         return "接收到⽂件名称为: "+fileName;
    }

检查是否传递成功:

四、小结

到此这篇关于SpringMVC入门指南:从零掌握核心要点的文章就介绍到这了,更多相关SpringMVC入门指南内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文