当前位置: 首页 > article >正文

SpringBoot:SpringMVC(上)

文章目录

  • 前言
  • 一、SpringMVC是什么?
    • 1.1 MVC的定义:
    • 1.2 MVC 和 Spring MVC 的关系
  • 二、Spring MVC 创建和连接
    • 2.1创建springmvc
    • 2.2接下来,创建⼀个 UserController 类,实现⽤户到 Spring 程序的互联互通,具体实现代码如下:
    • 2.1.2 @RequestMapping 注解介绍
    • 2.1.3 @RequestMapping 是 post 还是 get 请求?
    • 2.2 获取参数
    • 2.2.1传递参数
    • 2.2.2传递对象
    • 2.2.3 后端参数重命名(后端参数映射)
    • 2.2.4@RequestBody 接收JSON对象
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:


提示:以下是本篇文章正文内容,下面案例可供参考

一、SpringMVC是什么?

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为”SpringMVC“。
从上述定义我们可以得出两个关键信息:

  1. Spring MVC 是⼀个 Web 框架。
  2. Spring MVC 是基于 Servlet API 构建。

1.1 MVC的定义:

MVC 是 Model View Controller 的缩写,它是软件⼯程中的⼀种软件架构模式,它把软件系统分
为模型、视图和控制器三个基本部分
在这里插入图片描述
Model(模型)是应⽤程序中⽤于处理应⽤程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
View(视图)是应⽤程序中处理数据显示的部分。通常视图是依据模型数据创建的。
Controller(控制器)是应⽤程序中处理⽤户交互的部分。通常控制器负责从视图读取数据,
控制⽤户输⼊,并向模型发送数据。

1.2 MVC 和 Spring MVC 的关系

MVC 是⼀种思想,⽽ Spring MVC 是对 MVC 思想的具体实现。
总结来说,Spring MVC 是⼀个实现了 MVC 模式,并继承了 Servlet API 的 Web 框架。既然是 Web框架,那么当⽤户在浏览器中输⼊了 url 之后,我们的 Spriing MVC 项⽬就可以感知到⽤户的请求。

二、Spring MVC 创建和连接

2.1创建springmvc

在这里插入图片描述
创建这个就行了

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

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller // 让 spring 框架启动时,加载
@ResponseBody // 返回⾮⻚⾯数据
@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.1.2 @RequestMapping 注解介绍

@RequestMapping 是 Spring Web 应⽤程序中最常被⽤到的注解之⼀,它是⽤来注册接⼝的路
由映射的

路由映射:所谓的路由映射指的是,当⽤户访问⼀个 url 时,将⽤户的请求对应到程序中某个类
的某个⽅法的过程就叫路由映射

当在类上用到这个注解时

package com.example.demo;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/h")
public class UserController2 {
    @RequestMapping("/hi")
    public String sayHi(){
        return "hello";
    }

}

在这里插入图片描述
就把类上的@ReuquestMapping都给写上,@RequestMapping 即可修饰类,也可以修饰⽅法,当修饰类和⽅法时,访问的地址是类 + ⽅
法。
@RequestMapping 也可以直接修饰⽅法,那就直接写方法后面的@RequestMapping

2.1.3 @RequestMapping 是 post 还是 get 请求?

默认情况下时GET的
在这里插入图片描述
指定 GET/POST ⽅法类型

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@Controller
@ResponseBody
@RestController
public class UserController2 {
    @RequestMapping(value = "/hi",method= RequestMethod.POST)
    public String sayHi(){
        return "hello";
    }

}

2.2 获取参数

2.2.1传递参数

package com.example.demo;
import lombok.Data;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
    @RequestMapping("/m3")
    public String sayHi(String name, String pwd){
        System.out.println(name);
        System.out.println(pwd);
        return "<html><body>Hello from /hi</body></html>";
    }
}

2.2.2传递对象

并且 Spring MVC 可以⾃动实现参数对象的赋值,⽐如 User对象:

package com.example.demo;

import lombok.Data;

@Data
public class User {
    private String Name;
    private int id;
    private String Password;
}

package com.example.demo;
import lombok.Data;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
    @RequestMapping("/m3")
    public String sayHi(User u){
        System.out.println(u.getName());
        System.out.println(u.getId());
        return "<html><body>Hello from /hi</body></html>";
    }
}

在这里插入图片描述

http://localhost:8080/m3?name=java&pwd=18

抓包看一下
在这里插入图片描述
当然最终执行的结果在这里插入图片描述
当然因为我刚才刷新了一下,所以打印了俩次

2.2.3 后端参数重命名(后端参数映射)

某些特殊的情况下,前端传递的参数 key 和我们后端接收的 key 可以不⼀致,⽐如前端传递了⼀个time 给后端,⽽后端⼜是有 createtime 字段来接收的,这样就会出现参数接收不到的情况,如果出现
这种情况,我们就可以使⽤ @RequestParam 来重命名前后端的参数值

⾮必传参数设置:
如果我们的实际业务前端的参数是⼀个⾮必传的参数,我们可以通过设置 @RequestParam 中的
required=false 来避免不传递时报错,具体实现如下

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
    @RequestMapping("/m4")
    public String method(@RequestParam("time")String creattime){
        System.out.println("时间:" + creattime);
        return "/index.html";
    }
}

2.2.4@RequestBody 接收JSON对象

@RequestMapping(value = "/m5", method = RequestMethod.POST)
public Object method_5(@RequestBody Person person) {
System.out.println("Person:" + person);
return "redirect:/index.html";
}

`

总结

先到这里把,欢迎大佬在评论区提意见哦


http://www.kler.cn/news/161875.html

相关文章:

  • 2023-12-04 AIGC-Stable Diffusion和SadTalker-搭建及使用
  • Linux_CentOS_7.9 VNC安装卸载以及相关配置开机自启动服务简易记录
  • 字符串排序
  • 【华为数据之道学习笔记】3-2 基础数据治理
  • JavaEE之多线程编程(一):基础篇
  • 手机升级到iOS15.8后无法在xcode(14.2)上真机调试
  • ubuntu 14.04的git 错误: gnutls_handshake() failed: Handshake failed
  • 华为云安全组规则
  • Android 11.0 MTK Camera2 设置默认拍照尺寸功能实现
  • vue3日常知识点学习归纳
  • 第 7 部分 — 增强 LLM 安全性的策略:数学和伦理框架
  • 微前端 -- wujie 预加载和原理 无界传参
  • 探索图像生成中的生成对抗网络 (GAN) 世界
  • 唯创知音WTV380语音芯片高品质声音播放提示IC在骨盆按摩器上的应用介绍
  • 1、命名空间、C++的复合类型、缺省参数
  • 精通Nginx(21)-大幅度提升性能优化方法
  • 石头剪刀布python
  • TCP通信
  • qt中sokect断开的几种情况
  • keil添加了头文件仍然报找不到头文件的原因
  • 4-Docker命令之docker stop
  • Apache Flink(九):集群基础环境搭建-Centos7节点配置
  • LeetCode 每日一题 Day 6(DFS+BFS)
  • ChatGPT在国内的使用限制,国内的ChatGPT替代工具
  • C#winform上下班打卡系统Demo
  • 基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(一)——创建Glue
  • 两个分数相加。
  • 持续集成交付CICD:GitLabCI 运行前后端项目
  • react经验6:使用SVG图片
  • Ray构建GPU隔离的机器学习平台