SpringMVC——基本操作

news2024/11/24 5:47:54

获取url中的参数

一般来说get请求中参数是这样的

127.0.0.1:8080/login?username=san&password=123

可以获取到下面两个参数

keyvalue
usernamesan
password123

但是事实上,还有一种url的参数的写法

127.0.0.1:8080/login/san/123

这样的写法更像是一个直接获取网站的方式,而没有传递参数
在浏览器中,第二种写法更受浏览器的喜爱(会排在搜索结果的前列)

在SpringMVC中,使用@PathVariable注解来接收参数

@RequestMapping("/url/{参数}")
public String showInfo(@PathVariable("参数")String 命名){
    return 返回值;
}

例如,获取/show/用户名/and/密码这个url中的用户名和密码

@RequestMapping("/show/{username}/and/{password}")
public String showInfo(@PathVariable("username")String username,
                       @PathVariable("password")String password){
    return "username: " + username + " | password: " + password;
}

在这里插入图片描述

上传文件

@RequestMapping(url)
public String upFile(@RequestPart("参数名")MultipartFile file) throws IOException {
    String path = 文件路径;
    //保存文件
    file.transferTo(new File(path));
    return 返回值;
}

使用@RequestPart注解,MultipartFile对象可以接收文件

其中,如果我们将文件的路径设置成一样的,前端若多次传输文件给后端,这些文件会进行复写,最后只会保存最后一个文件
可以使用UUID.randomUUID().toString来生成一个程序中唯一的字符串,这样多次接收文件不会被复写

使用MultipartFile对象的transfer方法可以保存文件

例如:

@RequestMapping("/upFile")
public String upFile(@RequestPart("myfile")MultipartFile file) throws IOException {
    String rootPath = "/Users/lixiao/Desktop/";
    String path = rootPath + UUID.randomUUID().toString();
    //加文件后缀
    path += file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
    //保存文件
    file.transferTo(new File(path));
    return path;
}

使用postman中的Body,form-data可以发送文件
在这里插入图片描述
可以看到图片放到了设置的路径下
在这里插入图片描述

获取Cookie

可以在方法中加上HttpServletRequest和HttpServletResponse对象,像servlet中一样获取cookie

@RequestMapping("/getCookies")
public String getCookies(HttpServletRequest request){
    Cookie[] cookies = request.getCookies();
    for (int i = 0; i < cookies.length; i++) {
        log.error(cookies[i].getName() + ": " + cookies[i].getValue());
    }
    return "getCookies";
}

先在浏览器中存储cookie
在这里插入图片描述
可以看到控制台上打印出了所有cookie
在这里插入图片描述

也可以使用@CookieValue注解,获取单一Cookie

@RequestMapping("/getCookie")
public String getCookie(@CookieValue("username") String username){
    return "username: " + username;
}

在这里插入图片描述

获取Header

使用@RequestHeader注解可以获取header

@RequestMapping("/getua")
public String getUA(@RequestHeader("User-Agent")String userAgent){
    return userAgent;
}

在这里插入图片描述

存储session

对于存储session,SpringMVC并没有注解,我们只能使用传统的servlet方式存储

@RequestMapping("/setSession")
public String setSession(HttpServletRequest request, HttpServletResponse response){
    HttpSession session = request.getSession();
    session.setAttribute("userInfo","userInfo");
    return "Set session success";
}

在这里插入图片描述

获取session

使用servelt传统方式获取session

@RequestMapping("/getSession")
public String getSession(HttpServletRequest request, HttpServletResponse response){
    HttpSession session = request.getSession(false);
    if(session != null && session.getAttribute("userInfo") != null){
        return session.getAttribute("userInfo").toString();
    }
    return "no session";
}

在这里插入图片描述
也可以通过@SessionAttribute注解来获取

@RequestMapping("/getSession2")
public String getSession2(@SessionAttribute(value = "userInfo" ,required = false)String userinfo){
    return userinfo;
}

需要注意,这里的required一定要使用false,这样的话如果session不存在,就不会主动创建session

显示页面

如果不在方法上加@ResponseBody,那么会返回存储在项目中的页面
在这里插入图片描述

package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@RequestMapping("/resp")
@Controller
public class RespController {
    @RequestMapping("/hi")
    public String hi(){
        return "/hello.html";
    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【蓝桥杯集训·每日一题】AcWing 2058. 笨拙的手指

文章目录一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解三、知识风暴哈希表秦九韶算法一、题目 1、原题链接 2058. 笨拙的手指 2、题目描述 奶牛贝茜正在学习如何在不同进制之间转换数字。 但是她总是犯错误&#xff0c;因为她无法轻易的用两…

求职一个月,收割12家offer,想给大家总结一下面试软件测试岗,一般问什么问题?

前言 下面是我根据工作这几年来的面试经验&#xff0c;加上之前收集的资料&#xff0c;整理出来350道软件测试工程师 常考的面试题。字节跳动、阿里、腾讯、百度、快手、美团等大厂常考的面试题&#xff0c;在文章里面都有 提到。 虽然这篇文章很长&#xff0c;但是绝对值得你…

【2023】Prometheus-相关知识点(面试点)

目录1.Prometheus1.1.什么是Prometheus1.2.Prometheus的工作流程1.3.Prometheus的组件有哪些1.4.Prometheus有什么特点1.5.Metric的几种类型&#xff1f;分别是什么&#xff1f;1.6.Prometheus的优点和缺点1.7.Prometheus怎么采集数据1.8.Prometheus怎么获取采集对象1.9.Promet…

产业安全公开课:2023年DDoS攻击趋势研判与企业防护新思路

2023年&#xff0c;全球数字化正在加速发展&#xff0c;网络安全是数字化发展的重要保障。与此同时&#xff0c;网络威胁日益加剧。其中&#xff0c;DDoS攻击作为网络安全的主要威胁之一&#xff0c;呈现出连年增长的态势&#xff0c;给企业业务稳定带来巨大挑战。2月21日&…

【数据结构与算法】顺序表增删查改的实现(动态版本+文件操作)附源码

目录 一.前言 二.顺序表 1.概念及结构 2.顺序表结构体的定义 3.初始化顺序表&#xff0c;销毁顺序表和打印 3.接口 a.尾插 SepListpushback 头插 SepListpushfront b.尾删 SepListpopback 头删 SepListpopfront c.查询 SepListsearch d.修改 SepListmodify 三…

搜索引擎 Elasticsearch 的三大坑

搜索引擎的坑 ES 搜索引擎系列文章汇总&#xff1a; 一、别只会搜日志了&#xff0c;求你懂点原理吧 二、ES 终于可以搜到”悟空哥“了&#xff01; 三、1W字&#xff5c;40 图&#xff5c;硬核 ES 实战 本文主要内容如下&#xff1a; 搜索引擎现在是用得越来越多了&#…

赛宁网安“网络安全卓越中心”:立足科技创新 推动网安产业高质量发展

​​2月22日上午&#xff0c;网络安全卓越中心CPCOE——圆桌论坛活动在南京召开。本次论坛由南京未来科技城主办&#xff0c;南京赛宁信息技术有限公司承办。论坛上&#xff0c;江苏省科协副主席、南京理工大学教授李千目&#xff0c;江苏省互联网协会副理事长兼秘书长刘湘生&a…

【Pytorch学习】获取当前的学习率Learning Rate(lr)

optimizer.state_dict()[param_groups][0][lr]from&#xff1a; https://blog.csdn.net/ftimes/article/details/120975402 PyTorch可视化动态调整学习率lr_scheduler&#xff1a;https://blog.csdn.net/ayiya_Oese/article/details/120704261 或者&#xff1a;scheduler.get_…

谷歌留痕代发技术指南_谷歌留痕怎么霸屏的?

本文主要分享谷歌留痕技术的一些常见问题&#xff0c;霸屏的原理是什么。 本文由光算创作&#xff0c;有可能会被修改和剽窃&#xff0c;我们佛系对待这种行为吧。 谷歌留痕也叫谷歌搜索留痕&#xff0c;那么谷歌搜索留痕的霸屏原理是什么&#xff1f; 答案是&#xff1a;利…

如何做好APP性能测试?

随着智能化生活的推进&#xff0c;我们生活中不可避免的要用到很多程序app。有的APP性能使用感很好&#xff0c;用户都愿意下载使用&#xff0c;而有的APP总是出现卡顿或网络延迟的情况&#xff0c;那必然就降低了用户的好感。所以APP性能测试对于软件开发方来说至关重要&#…

【Android视频号④ 问题总结】

这节坑比较多~ 差点没把我给整死&#xff01;&#xff01;&#xff01; 环境介绍 首先我调试都是root过的真机&#xff0c;但是生产环境都是没有Root的云机&#xff0c;属于自己改的Rom框架也不是XP或LSP 是技术人员利用Xposed源码改的框架 问题&解决 模块源码更改 这…

Leetcode第235题二叉搜索树的最近公共祖先|C语言

struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {if(root->val>p->val&&root->val<q->val)return root;//若p结点的值<q结点的值&#xff0c;而根节点的值位于两者之间&#xff0c;说明…

Java StringBuffer StringBuilder,超详细整理,适合新手入门

目录 一、StringBuffer和StringBuilder的区别是什么&#xff1f; 二、StringBuffer的示例 三、StringBuilder的示例 四、为什么StringBuffer和StringBuilder比String更适合在循环中使用&#xff1f; 五、如何将String对象转换为StringBuilder或StringBuffer对象&#xff1…

论文投稿指南——中文核心期刊推荐(综合性经济科学)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

常见的排序算法 | 直接插入排序 | 希尔排序 | 选择排序 | 堆排序 | 冒泡排序 | 快速排序 | 归并排序 |(详解,附动图,代码)

思维导图&#xff1a; 一.插入排序 1.直接插入排序&#xff08;InsertSort&#xff09; ①手机通讯录时时刻刻都是有序的&#xff0c;新增一个电话号码时&#xff0c;就是使用插入排序的方法将其插入原有的有序序列。 ②打扑克 步骤&#xff1a; ①如果一个序列只有一个数&am…

【Android视频号③ Xposed插件编写】

这节 就是将frida代码翻译为Xposed 然后利用Sekiro服务进行接口调用 Xposed环境 我的测试环境是 LSPosed 它是完全兼容XP模块的 &#xff08;免重启调试起来方便一点&#xff09;下载后用Magisk安装即可. 模块编写可以参考这篇文章 XPosed模块编写教程 翻译代码 首先需要拦…

Java数据结构与算法第十一课---反射、枚举以及lambda表达式

一 : 反射 1.定义 Java的反射&#xff08;reflection&#xff09;机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff0c;既然能拿到&#xff0c;那么…

k8s1.23.0+ubuntu20.04+docker23+hyperv

问题 k8s node节点加入到集群时卡住 “[preflight] Running pre-flight checks” # master节点重新生成加入命令 kubeadm token create --ttl 0 --print-join-command参考 注意 k8s1.24使用containerd而不再使用docker&#xff0c;因此使用k8s1.23版本 环境 k8s: 1.23.0 u…

【Python入门第十五天】Python字典

字典&#xff08;Dictionary&#xff09; 字典是一个无序、可变和有索引的集合。在 Python 中&#xff0c;字典用花括号编写&#xff0c;拥有键和值。 实例 创建并打印字典&#xff1a; thisdict {"brand": "Porsche","model": "911&q…

2023年湖北施工员怎么报考?甘建二告诉你

湖北施工员怎么报考&#xff1f;考施工员需要了解哪些知识呢&#xff1f;跟甘建二一起来看下 一、湖北施工员报名条件&#xff1a; 甘建二告诉你&#xff0c;施工员报名条件基本没有限制&#xff0c;年满18岁即可。个人名义都可以报考&#xff0c;限制不多&#xff0c;不是跟安…