【Spring】Spring MVC

简介: 1. 什么是 Spring MVC1.1 MVC 定义1.2 MVC 和 Spring MVC 的关系2. Spring MVC 创建和连接2.1 创建 Spring MVC 项目2.2 @RequestMapping 注解2.2.1 修饰方法2.2.2 修饰类2.3 @GetMapping 和 @PostMapping2.3.1 get 请求三种写法2.3.2 post 请求的两种写法2.3 获取参数2.3.1 获取单个参数2.3.2 传递多个参数2.3.3 传递对象的几种方法2.4 获取 URL 中的参数2.5 上传文件并保存到磁盘3. 请求转发和请求重定

1. 什么是 Spring MVC

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


1.1 MVC 定义

MVC 是 Model View Controller 的缩写,它是软件工程中的一种软件架构模式,它把软件系统分为模 型、视图和控制器三个基本部分。


11.png


Model(模型) 是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

View(视图) 是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller(控制器) 是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制 用户输入,并向模型发送数据。

1.2 MVC 和 Spring MVC 的关系

MVC 是一种思想,而 Spring MVC 是对 MVC 思想的具体实现。 总结来说,Spring MVC 是一个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web 框

架,那么当用户在浏览器中输入了 url 之后,我们的 Spring MVC 项目就可以感知到用户的请求。


2. Spring MVC 创建和连接

Spring MVC 项目创建和 Spring Boot 创建项目相同(Spring MVC 使用 Spring Boot 的方式创建),在 创建的时候选择 Spring Web 就相当于创建了 Spring MVC 的项目。


2.1 创建 Spring MVC 项目

Spring MVC 可以基于 Spring Boot 创建,也就是创建一个 Spring Boot 项目,勾选上 Spring Web 模块 即可,如下图所示:


12.png


接下来,创建一个 UserController 类,实现用户到 Spring 程序的互联互通,具体实现代码如下:

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody;
@Controller // 让 spring 框架启动时,加载 
@ResponseBody // 返回一个 text/html 信息 
@RequestMapping("/user") // 路由器规则注册 
public class UserController { 
    // 路由器规则注册 
    @RequestMapping("/hi") 
    public String sayHi(){ 
        return "<h1>Hi,Spring MVC.</h1>";
  }
}

这样实现之后,当访问地址:http://localhost:8080/user/hi 时就能打印“hello,spring mvc”的信息 了。


2.2 @RequestMapping 注解

@RequestMapping 是 Spring Web 应用程序中最常被用到的注解之一,它是用来注册接口的路由映射的。


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


2.2.1 修饰方法

方法地址:http://localhost:8080/hi

import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class UserController { 
    @RequestMapping("/hi") 
    public String sayHi(){ 
        return "<h1>Hi,Spring MVC.</h1>";
  }
}

2.2.2 修饰类

当修饰类的时候,这个类下的所有方法访问地址前都必须加类的地址,当方法也被修饰时,则访问地址就是 类 + 方法

如图方法访问地址为:http://localhost:8080/p/hi


import org.springframework.stereotype.Controller; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/p") 
public class UserController { 
    @RequestMapping("/hi") 
    public String sayHi(){ 
        return "<h1>Hi,Spring MVC.</h1>";
  }
}

2.3 @GetMapping 和 @PostMapping

2.3.1 get 请求三种写法

// 写法1 
@RequestMapping("/index")
// 写法2 
@RequestMapping(value = "/index",method = RequestMethod.GET)
// 写法3
@GetMapping("/index")

2.3.2 post 请求的两种写法

// 写法1 
@RequestMapping(value = "/index",method = RequestMethod.POST)
// 写法2
@PostMapping("/index")

2.3 获取参数

  • @RequestParam:设置必传参数,当请求体中的参数和方法中的参数相同时,可以省略
  • @RequestBody:接受 JSON 参数,用此注解修饰方法之后,此方法的返回值会被自动 JSON 序列化

2.3.1 获取单个参数


@RequestMapping(value = "/hello4")
@ResponseBody
public String hello4(@RequestParam(value = "target", defaultValue = "世界") String target) {
    return "你好" + target;
}

方法访问地址: http://127.0.0.1:8080/hello4?target=hello


13.png

2.3.2 传递多个参数

@RequestMapping(value = "/hello5")
@ResponseBody
public String hello5(String a, String b) {
    return a + b;
}
\

方法访问地址: http://127.0.0.1:8080/hello5?a=Hello&b=World

14.png

2.3.3 传递对象的几种方法

@GetMapping("/method1")
@ResponseBody
public Cat createCat() {
    return new Cat("喵喵", 5);
}

15.png

// 如果变量比较多,可以直接在对象内完成
// Spring 内部会构造好对象
@GetMapping("/method4")
@ResponseBody
public Cat createCat(Cat cat) {
    return cat;
}

方法访问地址: http://127.0.0.1:8080/method2?name=喵喵&age=1

16.png


@GetMapping("/method2")
@ResponseBody
public Cat createCa2(String name, String age) {
    int ageInt = Integer.parseInt(age);
    return new Cat(name, ageInt);
}

方法访问地址: http://127.0.0.1:8080/method2?name=喵喵&age=1

17.png

// 让 Spring 内部做数据转换,Spring -> int
@GetMapping("/method3")
@ResponseBody
public Cat createCa3(String name, int age) {
    return new Cat(name, age);
}

2.4 获取 URL 中的参数

使用@PathVariable注解修饰参数

@GetMapping("/{username}/article/details/{aid}")
@ResponseBody
public String getMessage(@PathVariable("username") String username, @PathVariable("aid") String aid) {
    log.info("得到的 username = {}, aid = {}", username, aid);
    return "成功";
}

2.5 上传文件并保存到磁盘

@RequestMapping("/param9") 
public String param9(String name, @RequestPart("myfile") MultipartFile file) throws IOException { 
    // 获取文件后缀名 
    String fileName =file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") );
// 文件保存地址 
    String filePath =ClassUtils.getDefaultClassLoader().getResource("static").getPath() + "/" + UUID.randomUUID() + fileName;
// 保存文件 
    file.transferTo(new File(filePath)); 
    return filePath + " 上传成功.";
}

3. 请求转发和请求重定向

  • forward 是请求转发;
  • redirect:请求重定向。


// 请求重定向 
@RequestMapping("/index") public String index(){ 
    return "redirect:/index.html";
}
// 请求转发 
@RequestMapping("/index2") public String index2(){ 
    return "forward:/index.html";
}

3.1 forward 和 redirect 具体区别

请求重定向(redirect)将请求重新定位到资源;请求转发(forward)服务器端转发。

请求重定向地址发生变化,请求转发地址不发生变化。

请求重定向与直接访问新地址效果一直,不存在原来的外部资源不能访问;请求转发服务器端转发 有可能造成原外部资源不能访问。


目录
相关文章
|
9天前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
16天前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
34 2
|
1月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
18天前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
54 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
1月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
2月前
|
Java 数据库连接 Spring
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
文章是关于Spring、SpringMVC、Mybatis三个后端框架的超详细入门教程,包括基础知识讲解、代码案例及SSM框架整合的实战应用,旨在帮助读者全面理解并掌握这些框架的使用。
后端框架入门超详细 三部曲 Spring 、SpringMVC、Mybatis、SSM框架整合案例 【爆肝整理五万字】
|
2月前
|
XML JSON 数据库
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
这篇文章详细介绍了RESTful的概念、实现方式,以及如何在SpringMVC中使用HiddenHttpMethodFilter来处理PUT和DELETE请求,并通过具体代码案例分析了RESTful的使用。
SpringMVC入门到实战------七、RESTful的详细介绍和使用 具体代码案例分析(一)
|
2月前
|
前端开发 应用服务中间件 数据库
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
这篇文章通过一个具体的项目案例,详细讲解了如何使用SpringMVC、Thymeleaf、Bootstrap以及RESTful风格接口来实现员工信息的增删改查功能。文章提供了项目结构、配置文件、控制器、数据访问对象、实体类和前端页面的完整源码,并展示了实现效果的截图。项目的目的是锻炼使用RESTful风格的接口开发,虽然数据是假数据并未连接数据库,但提供了一个很好的实践机会。文章最后强调了这一章节主要是为了练习RESTful,其他方面暂不考虑。
SpringMVC入门到实战------八、RESTful案例。SpringMVC+thymeleaf+BootStrap+RestFul实现员工信息的增删改查
|
2月前
|
JSON 前端开发 Java
Spring MVC返回JSON数据
综上所述,Spring MVC提供了灵活、强大的方式来支持返回JSON数据,从直接使用 `@ResponseBody`及 `@RestController`注解,到通过配置消息转换器和异常处理器,开发人员可以根据具体需求选择合适的实现方式。
130 4
|
2月前
|
XML 前端开发 Java
Spring MVC接收param参数(直接接收、注解接收、集合接收、实体接收)
Spring MVC提供了灵活多样的参数接收方式,可以满足各种不同场景下的需求。了解并熟练运用这些基本的参数接收技巧,可以使得Web应用的开发更加方便、高效。同时,也是提高代码的可读性和维护性的关键所在。在实际开发过程中,根据具体需求选择最合适的参数接收方式,能够有效提升开发效率和应用性能。
112 3