Spring Web MVC

目录

一.简介

二.建立连接(客户端和服务器)

三.请求

1.传递单个参数

2.传递多个参数

3.对象

4.数组/集合

5.JSON

6.URL参数

7.上传文件

8.获取cookie和session

(1)获取cookie

(2)获取session

9.设置header

四.响应

1.返回静态页面

2.返回数据

3.返回HTML代码片段

4.返回JSON

5.设置状态码

6.设置Header


一.简介

Spring Web MVC是包含在Spring框架中的用来构造web项目的框架,底层基于Servlet API.

(之前使用的SpringBoot也是创建Spring MVC的一种方式)

MVC(model view controller):把一个项目分成三部分,三部分之间的关系如下

Spring进行实现MVC模式,称为Spring MVC

二.建立连接(客户端和服务器)

@Requestmapping (路由映射):可以修饰方法,也可以修饰类。

访问地址:类的路径+方法路径

修饰方法

修饰类

在postman中观察可得:@Requestmapping支持get请求、post请求...

当想要指定一个具体的方法时,在代码中进行调整。

三.请求

1.传递单个参数

2.传递多个参数

发送请求的参数名称可以调换

注意:在代码中定义类型尽量使用包装类型(int的包装类为Integer),使用基本类型时,当输入的变量为空时会报错,而包装类型会显示为空。

3.对象

单独定义一个对象类,更方便后期根据需求修改代码。

package com.example.demo.controller;public class Person {Integer id;String name;Integer age;@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}
}

后端参数重命名

前端传参是@requesPrama()中的

4.数组/集合

数组

当请求中同一个参数有多个时,浏览器就会帮我们封装成一个数组。

集合

默认传递的参数是数组形式,要是想要传递一个集合的形式,需要在参数前面加上@RequestParam

5.JSON

json本质上是一个字符串,表示对象的字符串。

传递json数据,需要使用@RequestBody

6.URL参数

获取一个url中的参数需要一个@PathVariable,获取多个url中的参数需要多个@PathVariable

需要注意顺序,顺序要与参数相匹配,参数个数也需要匹配

URL参数中的重命名

7.上传文件

@RequestPart

将图片上传到指定位置

8.获取cookie和session

(1)获取cookie

1)spring中获取指定个数的cookie,使用@CookieValue

2)获取多个cookie的方式(不是spring,采用最原始的方式,在控制台获取value值)

    //获取多个cookie的方式@RequestMapping("getCookie")public String getCookie(HttpServletRequest request){Cookie[] cookies=request.getCookies();
//  两种写法
//        for (Cookie cookie : cookies) {
//            System.out.println(cookie.getName()+":"+cookie.getValue());
//        }//空指针异常处理if(cookies!=null){Arrays.stream(cookies).forEach(cookie -> {System.out.println(cookie.getName()+":"+cookie.getValue());});}return "获取cookie成功";}

(2)获取session

1)普通方式

    //设置session@RequestMapping("/setSession")public String setSession(HttpServletRequest request){//创建sessionHttpSession session= request.getSession();//给session赋值session.setAttribute("username","swy");return "success";}//获取session@RequestMapping("/getSession")public String getSession(HttpServletRequest request){//session默认为true,没有session会自动创建一个,设置成false避免自动创建HttpSession session= request.getSession(false);if(session!=null){String username=(String) session.getAttribute("username");return "登录用户:"+username;}return "session为空!";

2)spring方式

@SessionAttribute

    @RequestMapping("/getSession2")//默认是一个必传参数public String getSession2(@SessionAttribute(required = false) String username){return "username:"+username;}

3)使用HttpSession的方式

9.设置header

1)原始方式

2)spring方式

@RequestHeader

以上:

1.传递数组:同一个请求参数有多个时,会自动封装成数组

2.传递集合:@RequestParam

3.传递JSON:@RequestBody

4.上传文件:@RequestPart

5.Cookie :@CookieValue  

6.Session:@SessionAttribute

7.Header:@RequestHeader

8.url:@PathVariable

9.文件:@RequestPart

四.响应

1.返回静态页面

1)创建一个简单的html页面

2)返回该页面

@Controller和@RestController

2.返回数据

@ResponseBody

可以修饰类、可以修饰方法。修饰类的时候,表示这个类下的所有方法,返回的均为数据。修饰方法时,表示该方法返回的是数据。

如果一个类中返回的都是数据则把注释加在类上,如果一个类中只有相对应的方法中返回数据,则把该注释添加在相对应的方法上。

3.返回HTML代码片段

4.返回JSON

当返回的接口是String类型、Integer类型时,content-Type是text/html

当接口返回的是对象/Map时,content-Type自动设置成application/json

这里举例是返回一个对象:

5.设置状态码

设置状态码与页面展示无关

6.设置Header

平时很少用到

举例:设置header的返回类型属性:

举例:自定义header属性

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

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

相关文章

Ubuntu 设置Nginx开机自启

1.建立自启动服务文件 vim /usr/lib/systemd/system/nginx.service Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Typeforking ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx…

三菱PLC定时中断应用编程(计数器+比较器)

三菱PLC如何开启定时中断可以查看下面文章链接: PLC定时中断程序应用注意事项(西门子三菱信捷)_plc设置断点之后会怎样_RXXW_Dor的博客-CSDN博客文章浏览阅读2.5k次,点赞5次,收藏6次。首先我们了解下什么是中断。中断(打断的意思),在PLC执行当前程序时,由于系统出现了…

6个免费在线工具推荐

NSDT 三维场景建模工具GLTF/GLB在线编辑器Three.js AI自动纹理化开发包YOLO 虚幻合成数据生成器3D模型在线转换三维模型预览图生成器 1、NSDT 三维场景建模 访问地址:NSDT 编辑器 基于WebGL技术,依托丰富的模型资产库,通过拖拽式的操作&…

pytest-html测试报告这样写,某易测开都直呼:大哥受小弟一拜

在 pytest 中提供了生成html格式测试报告的插件 pytest-html 安装 安装命令如下: pip install pytest-html使用 我们已经知道执行用例的两种方式,pytest.main()执行和命令行执行,而要使用pytest-html生成报告,只需要在执行时加…

RabbitMQ 安装(在docker容器中安装)

为什么要用? RabbitMQ是一个开源的消息代理和队列服务器,主要用于在不同的应用程序之间传递消息。它实现了高级消息队列协议(AMQP),并提供了一种异步协作机制,以帮助提高系统的性能和扩展性。 RabbitMQ的作…

Instrumentation 是什么?和 ActivityThread 是什么关系?

Instrumentation 可以理解为应用进程管家,ActivityThread 要执行创建或暂停某个 Activity 的操作时,都需要通过 Instrumentation 来进行具体的操作,即回调 Activity 的生命周期。 每一个应用程序只有一个 Instrumentation 对象,每…

17 redis集群方案

1、RedisCluster分布式集群解决方案 为了解决单机内存,并发等瓶颈,可使用此方案解决问题. Redis-cluster是一种服务器Sharding技术,Redis3.0以后版本正式提供支持。 这里的集群是指多主多从,不是一主多从。 2、redis集群的目标…

Rust UI开发(二):iced中如何为窗口添加icon图标

注:此文适合于对rust有一些了解的朋友 iced是一个跨平台的GUI库,用于为rust语言程序构建UI界面。 想要了解如何构建简单窗口的可以看本系列的第一篇: Rust UI开发:使用iced构建UI时,如何在界面显示中文字符 本篇是系…

哦?是吗|兜兜转转,最后还是选择了盖雅排班系统

在之前发布的和「人效案例集」中,我们为大家呈现了很多关于人效提升的理论方法,以及各家企业的人效提升提升实践。 回过头来,我们发现:排班管理渗透于人效九宫格之中,也因此成为很多企业人效提升的一个重要中介&#x…

《opencv实用探索·二》根据RGB的像素排列来理解图像深度、像素深度和位深度

通常对于RGB图像主要分为RGB16,RGB24和RGB32。RGB16从高位到低位的排列为R->G->B,RGB24和RGB32从高位到低位的排列为B->G->R。 RGB16: 16 位为一个存储单元(一个像素),来存储一个RGB像素;因为人眼对绿色比…

从零学算法400

400.给你一个整数 n ,请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。 示例 1: 输入:n 3 输出:3 示例 2: 输入:n 11 输出:0 解释:第…