SpringMVC使用

文章目录

    • 一.MVC基础概念
      • 1.MVC定义
      • 2.SpringMVC和MVC的关系
    • 二.SpringMVC的使用
      • 1.@RequestMapping
      • 2.获取参数
        • 1.获取单个参数
        • 2.传递对象
        • 3.后端参数重命名(后端参数映射)
        • 4.获取URL中参数@PathVariable
        • 5.上传文件@RequestPart
        • 6.获取Cookie/Session/header
      • 3.返回数据
        • 1.返回静态⻚⾯
        • 2.返回 JSON 对象
        • 3.请求转发或请求重定向
        • 4.@ResponseBody 说明

一.MVC基础概念

1.MVC定义

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

在这里插入图片描述

  • Model:处理程序数据的逻辑部分
  • View: 处理显示数据的部分
  • Controller:处理服务器与用户交互的部分

2.SpringMVC和MVC的关系

MVC是一种思想,SpringMVC是框架,有MVC的具体实现

二.SpringMVC的使用

代码样例:

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>";}
}

1.@RequestMapping

@RequestMapping是Spring MVC中的一个注解,用于处理请求地址映射。

@RequestMapping的六个属性如下:

  • value:指定请求的实际地址,指定的地址可以是URI Template模式。
  • method:指定请求的method类型,如GET、POST、PUT、DELETE等。
  • consumes:指定处理请求的提交内容类型(Content-Type),例如application/json,text/html。
  • produces:指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
  • params:指定request中必须包含某些参数值才让该方法处理。
  • headers:指定request中必须包含某些指定的header值,才能让该方法处理请求。

2.获取参数

1.获取单个参数

URL http://127.0.0.1:8080/hello?name=张三

@RequestMapping("/m1")public Object method_1(String name){System.out.println("参数 name:"+name);return "/index.html";
}
如果post在body中的name=张三,那么不能够传递

2.传递对象

@Datapublic class Person {private int id;private String name;private String password;
}
——————————————————————————————————————————————————————————————
@RequestMapping("/m2")
public Object method_2(Person p){System.out.println("对象中的 name:"+p.getName());System.out.println("对象中的 password:"+p.getPassword());return "/index.html";
}

URL:http://127.0.0.1:8080/hello?name=张四&password=120

注意

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

3.后端参数重命名(后端参数映射)

如果前端传递的参数和我们后端接受的名字冲突,这时候就需要重命名

@RequestMapping("/m4")public Object method_4(@RequestParam("time") String createtime) {System.out.println("时间:" + createtime);return "/index.html";
}

4.获取URL中参数@PathVariable

@PostMapping("/m6/{name}/{password}")public Object method_6(@PathVariable String name, @PathVariable String pass
word) {System.out.println("name:" + name);System.out.println("password:" + password);return "redirect:/index.html";
}

{}的值要和形参中的name对应

5.上传文件@RequestPart

@RequestMapping(“/param9”)

public String param9(String name, @RequestPart("myfile") MultipartFile file) throws IOException {// 获取⽂件后缀名String fileName = file.getOriginalFilename().substring(file.getOrigina
lFilename().lastIndexOf("."));// ⽂件保存地址String filePath = ClassUtils.getDefaultClassLoader().getResource("	").getPath() + "/" + UUID.randomUUID() + fileName;// 保存⽂件file.transferTo(new File(filePath));return filePath + " 上传成功.";
}
  • @RequestPart注解用于将HTTP请求的一部分映射到控制器处理方法的参数中,通常用于处理multipart/form-data类型的请求

获取项⽬⽬录的⼏种⽅式:

ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX).getPath();new ClassPathResource("").getFile().getAbsolutePath();ClassUtils.getDefaultClassLoader().getResource("").getPath();ResourceUtils.getFile("classpath:static/").getPath();

6.获取Cookie/Session/header

获取 Request 和 Response 对象

@RequestMapping("/param10")public String param10(HttpServletResponse response, HttpServletRequest requ
est) {String name = request.getParameter("name");// 获取所有 cookie 信息Cookie[] cookies = request.getCookies();return name + " 你好.";
}

这就到了我们熟悉的Servlet环节了

简洁的获取 Cookie—@CookieValue

@RequestMapping("/cookie")
@ResponseBodypublic String cookie(@CookieValue("bite") String bite) {return "cookie:" + bite;
}

简洁获取 Header—@RequestHeader

@RequestMapping("/header")
@ResponseBodypublic String header(@RequestHeader("User-Agent") String userAgent) {return "userAgent:"+userAgent;
}

获取 Session 更简洁的⽅式:

@RequestMapping("/sess2")
@ResponseBodypublic String sess2(@SessionAttribute(value = "username",required = false) String username) {return "username:"+username;
}

3.返回数据

1.返回静态⻚⾯

@Controller@RequestMapping("/p")public class PersonController {@RequestMapping("/index")public Object index(){// 执⾏业务...// 返回view -> index.htmlreturn "/index.html";  }
}

2.返回 JSON 对象

@RequestMapping("/m8")
@ResponseBodypublic HashMap<String, String> method_8() {HashMap<String, String> map = new HashMap<>();map.put("Java", "Java Value");map.put("MySQL", "MySQL Value");map.put("Redis", "Redis Value");return map;
}

添加ResponseBody自动将返回值转换为json格式

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

forward VS redirect

return 不但可以返回⼀个视图,还可以实现跳转,跳转的⽅式有两种:
forward 是请求转发;
redirect:请求重定向。

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

两者区别

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

  2. 请求重定向地址发⽣变化,请求转发地址不发⽣变化。

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

  4. 前者客户端会进行两次请求,后者一次即可

4.@ResponseBody 说明

@ResponseBody 返回的值如果是字符会转换成 text/html,如果返回的是对象会转换成
application/json 返回给前端。
@ResponseBody 可以⽤来修饰⽅法或者是修饰类,修饰类表示类中的所有⽅法都会返回 html 或者
json,⽽不是视图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/97342.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink+Paimon多流拼接性能优化实战

目录 &#xff08;零&#xff09;本文简介 意外收获&#xff1a; &#xff08;一&#xff09;背景 &#xff08;二&#xff09;探索梳理过程 &#xff08;三&#xff09;源码改造 &#xff08;四&#xff09;修改效果 1、JOB状态 2、Level5的dataFile总大小 3、数据延…

企业网络安全:威胁情报解决方案

什么是威胁情报 威胁情报是网络安全的关键组成部分&#xff0c;可为潜在的恶意来源提供有价值的见解&#xff0c;这些知识可帮助组织主动识别和防止网络攻击&#xff0c;通过利用 STIX/TAXII 等威胁源&#xff0c;组织可以检测其网络中的潜在攻击&#xff0c;从而促进快速检测…

OJ练习第160题——LRU 缓存

LRU 缓存 力扣链接&#xff1a;146. LRU 缓存 题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓…

用迅为RK3568开发板使用OpenCV处理图像颜色通道提取ROI

本小节代码在配套资料“iTOP-3568 开发板\03_【iTOP-RK3568 开发板】指南教程 \04_OpenCV 开发配套资料\07”目录下&#xff0c;如下图所示&#xff1a; 在计算机的色彩图像中存有三个通道&#xff0c;即 BGR 通道&#xff0c;根据三个颜色通道的亮度值来显示出不同的颜色&…

ubuntu22.04搭建verilator仿真环境

概述 操作系统为 Ubuntu(22.04.2 LTS)&#xff0c;本次安装verilator开源verilog仿真工具&#xff0c;进行RTL功能仿真。下面构建版本为5.008的verilator仿真环境。先看一下我系统的版本&#xff1a; 安装流程 安装依赖 sudo apt-get install git perl python3 make autoc…

Echarts遇到Vue3时遇到的问题

将vue2的Echarts代码迁移到了vue3项目上&#xff0c;引发的问题 问题描述&#xff1a; 1. 点击图例legend时刻度轴偏移&#xff0c;图像不展示&#xff0c;以及报错 初始chart正常.图 点击图例后的chart和报错.图 2. 调用resize()不生效且报错 初始正常.图 修改屏幕尺寸调用r…

ReentrantLock 原理

可以看到ReentrantLock提供了两个同步器&#xff0c;实现公平锁和非公平锁&#xff0c;都继承自AQS。 默认是非公平锁&#xff01; 下面是对ReentrantLock 的源码解析&#xff1a; 加锁源码 // Sync 继承自 AQS static final class NonfairSync extends Sync {private stati…

[C++网络协议] I/O复用

具有代表性的并发服务器端实现模型和方法&#xff1a; 多进程服务器&#xff1a;通过创建多个进程提供服务。 多路复用服务器&#xff1a;通过捆绑并统一管理I/O对象提供服务。✔ 多线程服务器&#xff1a;通过生成与客户端等量的线程提供服务。 目录 1. I/O复用 2. select函…

构建简单的Node.js HTTP服务器,发布公网远程访问的快速方法

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

测试靶场bWAPP安装部署

bWAPP&#xff08;Buggy Web Application&#xff09;是一个用于学习和练习网络应用安全的漏洞测试平台。它是一个开源的虚拟机或Docker映像&#xff0c;旨在为安全研究人员、开发人员和学生提供一个实践和演示各种Web应用漏洞的环境。 bWAPP包含了许多已知的Web应用程序漏洞&…

C#面试十问

1&#xff1a;C#中变量类型分为哪两种&#xff1f;它们的区别是什么&#xff1f;2&#xff1a;Class和Struct的区别&#xff1f;3&#xff1a;C#中类的修饰符和类成员的修饰符有哪些&#xff1f;4&#xff1a;面向对象的三个特征&#xff08;特点&#xff09;是什么&#xff1f…

【算法系列篇】分冶-快排

文章目录 前言什么是分冶1.颜色分类1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 排序数组2.1 题目要求2.2 做题思路2.3 Java代码实现 3.数组中的第k个最大元素3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 最小的k个数4.1 题目要求4.2 做题思路4.3 Java代码实现 总结 前言 …