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

Springboot Web开发


文章目录

  • 一. 静态资源访问
      • 1. 配置静态资源访问前缀
      • 2. 修改默认静态资源存放目录
      • 3. Webjars
      • 4. 欢迎页支持
      • 5. 自定义Favicon
  • 二. 请求处理
      • 1. 路径变量
      • 2. 请求头处理
      • 3. 查询字符串处理
      • 4. 获取Cookie的值
      • 5. 获取请求体的值
      • 6. 获取请求域中的数据
      • 7. 矩阵变量


一. 静态资源访问

只要静态资源放在类路径下: called /static (or /public or /resources or /META-INF/resources)
在这里插入图片描述
则可以直接通过: 当前项目根路径/ + 静态资源名
进行静态资源的访问,这都是Springboot已经约定好的配置。
原理: 请求进来的时候,先去找Controller看能不能处理,不能处理的所有请求又都交给静态资源处理器,静态资源也找不到则响应404页面。
而 resources 下的 templates 目录,只能通过控制器来进行访问比如:
在这里插入图片描述
在这里插入图片描述
访问: 当前项目根路径/hello 才能访问到 success.html 的内容

1. 配置静态资源访问前缀

有时候我们为了区分静态资源请求和其他动态请求,所以一般我们都会设置一个静态资源的访问前缀,这个功能我们只需要修改配置文件即可(默认无前缀):

spring:mvc:static-path-pattern: /res/**  # 静态资源访问前缀

自此静态资源的访问路径为: 当前项目 + /res/ + 静态资源名
但是访问前缀的配置会导致 Favicon、welcome page功能失效

2. 修改默认静态资源存放目录

默认的静态资源存放目录就是上面提到的 called /static (or /public or /resources or /META-INF/resources) 这都是Springboot项目约定好的配置,如果需要自定义静态资源存放目录,也可以通过修稿配置文件的方式实现:

spring:mvc:static-path-pattern: /res/**resources:static-locations: [classpath:/haha/]

这样只有haha目录下存放的才是能通过访问路径得到的静态资源,其他存放静态资源的目录都失效。

3. Webjars

将我们常用的JQuery等前端实用库通过Maven依赖的方式引入 官网地址: 点击跳转

        <dependency><groupId>org.webjars</groupId><artifactId>jquery</artifactId><version>3.5.1</version></dependency>

在这里插入图片描述
这样我们也可以以访问静态资源的方式访问引入的JQuery: http://localhost:8080/webjars/jquery/3.5.1/jquery.js

4. 欢迎页支持

只要在静态资源目录下放置 index.html 文件,这个文件就会被当成欢迎页,只要访问项目的根路径就会访问到该文件。

spring:
#  mvc:
#    static-path-pattern: /res/**   这个会导致welcome page功能失效resources:static-locations: [classpath:/haha/]

值得注意的是: 但是不可以配置静态资源的访问前缀,否则导致 index.html不能被默认访问

5. 自定义Favicon

只要将favicon.ico 放在静态资源目录下即可

spring:
#  mvc:
#    static-path-pattern: /res/**   这个会导致 Favicon 功能失效

二. 请求处理

1. 路径变量

将传递的参数存放在请求路径中,如果使用@PathVariable 标注Map集合,那么传递过来的所有参数都会以键值对的方式存放进去。

@GetMapping("/car/{id}/owner/{username}")
public String getCar(@PathVariable("id") Integer id,@PathVariable("username") String name,@PathVariable Map<String,String> pv){}

2. 请求头处理

可以使用@RequestHeader注解获取请求中对应请求头的值,如果标注的是一个Map集合,那么请求中所有请求头的信息都会以键值对的方式存放在这个Map集合中

@GetMapping("/car/{id}/owner/{username}")
public String getCar(@PathVariable("id") Integer id,@PathVariable("username") String name,@RequestHeader("User-Agent") String userAgent,@RequestHeader Map<String,String> header){}

3. 查询字符串处理

@RequestParam注解获取以查询字符串的方式传递过来的值,如果传递的键对应多个值则可以标注一个List集合,会将所有键对应的值存放到List集合中,也可以标注一个Map集合这样所有的值会以键值对的方式存储进这个Map集合

@GetMapping("/car")
public String getCar(@RequestParam("age") Integer age, @RequestParam("inters") List<String> inters,@RequestParam Map<String,String> params){
}

4. 获取Cookie的值

可以使用 @CookieValue注解进行Cookie值的获取,根据Cookie的键获取其对应的值,也可以标注一个Cookie类型,这样会将对应键Cookie的信息全部封装进去。

@GetMapping("/car")
public String getCar(@CookieValue("_ga") String _ga,@CookieValue("_ga") Cookie cookie){
}

5. 获取请求体的值

可以使用@RequestBody注解获取Post请求中请求体的值,获取到类似 name=zhangsan&age=44的数据类型

@PostMapping("/save")
public Map postMethod(@RequestBody String content){Map<String,Object> map = new HashMap<>();map.put("content",content);return map;
}

6. 获取请求域中的数据

可以使用@RequestAttribute 注解获取请求域中的数据

	@GetMapping("/goto")public String goToPage(HttpServletRequest request){request.setAttribute("msg","成功了...");request.setAttribute("code",200);return "forward:/success";  //转发到  /success请求}@ResponseBody@GetMapping("/success")  // required = false 指定是否为必传public Map success(@RequestAttribute(value = "msg",required = false) String msg, @RequestAttribute(value = "code",required = false)Integer code,HttpServletRequest request){// 代码的方式获取Object msg1 = request.getAttribute("msg");return map;}

7. 矩阵变量

请求方式 /cars/sell;low=34;brand=byd,audi,yd
/boss/1;age=20/2;age=20 分号前面是访问路径后面是矩阵变量
SpringBoot默认是禁用了矩阵变量的功能,手动开启:原理。对于路径的处理。UrlPathHelper进行解析。
开启矩阵变量,
方式一,配置类继承WebMvcConfigurer接口,实现configurePathMatch方法

@Configuration(proxyBeanMethods = false)
public class WebConfig implements WebMvcConfigurer  {@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {UrlPathHelper urlPathHelper = new UrlPathHelper();// 不移除分号后面的内容。矩阵变量功能就可以生效urlPathHelper.setRemoveSemicolonContent(false);configurer.setUrlPathHelper(urlPathHelper);}
}

方式二,不继承WebMvcConfigurer接口:

@Configuration(proxyBeanMethods = false)
public class WebConfig {//1、WebMvcConfigurer定制化SpringMVC的功能// 开启矩阵变量 这样不用继承接口@Beanpublic WebMvcConfigurer webMvcConfigurer(){return new WebMvcConfigurer() {@Overridepublic void configurePathMatch(PathMatchConfigurer configurer) {UrlPathHelper urlPathHelper = new UrlPathHelper();// 不移除分号后面的内容,矩阵变量功能就可以生效urlPathHelper.setRemoveSemicolonContent(false);configurer.setUrlPathHelper(urlPathHelper);}};}}

直接注意的是: caec/path 不能直接固定请求路劲,后面的path必须是可变动的路径

	@GetMapping("/cars/{path}")public Map carsSell(@MatrixVariable("low") Integer low,@MatrixVariable("brand") List<String> brand,@PathVariable("path") String path){ // 拿到访问路径Map<String,Object> map = new HashMap<>();map.put("low",low);map.put("brand",brand);map.put("path",path);return map;}

处理 /boss/1;age=20/2;age=10
以顺序从左到右获取其中的值并重命名到pathVar指定的键中

@GetMapping("/boss/{bossId}/{empId}")public Map boss(@MatrixVariable(value = "age",pathVar = "bossId") Integer bossAge,@MatrixVariable(value = "age",pathVar = "empId") Integer empAge){Map<String,Object> map = new HashMap<>();map.put("bossAge",bossAge);map.put("empAge",empAge);return map; // 返回一个json字符串 里面有两个属性}

相关文章:

Springboot Web开发

文章目录一. 静态资源访问1. 配置静态资源访问前缀2. 修改默认静态资源存放目录3. Webjars4. 欢迎页支持5. 自定义Favicon二. 请求处理1. 路径变量2. 请求头处理3. 查询字符串处理4. 获取Cookie的值5. 获取请求体的值6. 获取请求域中的数据7. 矩阵变量一. 静态资源访问 只要静…...

分布式事务 | 使用DTM 的Saga 模式

DTM 简介前面章节提及的MassTransit、dotnetcore/CAP都提供了分布式事务的处理能力&#xff0c;但也仅局限于Saga和本地消息表模式的实现。那有没有一个独立的分布式事务解决方案&#xff0c;涵盖多种分布式事务处理模式&#xff0c;如Saga、TCC、XA模式等。有&#xff0c;目前…...

错误代码0xc0000001要怎么解决?如何修复错误

出现错误代码0xc0000001这个要怎么解决&#xff1f;其实这个的蓝屏问题还是非常的简单的&#xff0c;有多种方法可以实现 解决方法一 1、首先使用电脑系统自带的修复功能&#xff0c;首先长按开机键强制电脑关机。 注&#xff1a;如果有重要的资料请先提前备份好&#xff0c;…...

为什么 HTTP PATCH 方法不是幂等的及其延伸

幂等性 首先来看什么是幂等性&#xff0c;根据 rfc2616(Hypertext Transfer Protocol – HTTP/1.1) 文档第 50 页底部对 Idempotent Methods 的定义&#xff1a; Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the…...

13 Day:实现内核线程

前言&#xff1a;我们昨天完成了内核的内存池以及内存管理程序&#xff0c;今天我们要揭开操作系统多任务执行的神秘面纱&#xff0c;来了解并实现一个多任务的操作系统。 一&#xff0c;实现内核线程 在聊线程之间我们先聊聊处理器吧&#xff0c;众所周之现在我们的CPU动不动…...

GPU服务器安装显卡驱动、CUDA和cuDNN

GPU服务器安装cuda和cudnn1. 服务器驱动安装2. cuda安装3. cudNN安装4. 安装docker环境5. 安装nvidia-docker25.1 ubuntu系统安装5.2 centos系统安装6. 测试docker容调用GPU服务1. 服务器驱动安装 显卡驱动下载地址https://www.nvidia.cn/Download/index.aspx?langcn显卡驱动…...

结构体变量

C语言允许用户自己建立由不同类型数据组成的组合型的数据结构&#xff0c;它称为结构体&#xff08;structre&#xff09;。 在程序中建立一个结构体类型&#xff1a; 1.结构体 建立结构体 struct Student { int num; //学号为整型 char name[20]; //姓名为字符串 char se…...

Java 多态

文章目录1、多态的介绍2、多态的格式3、对象的强制类型转换4、instanceof 运算符5、案例&#xff1a;笔记本USB接口1、多态的介绍 多态&#xff08;Polymorphism&#xff09;按字面意思理解就是“多种形态”&#xff0c;即一个对象拥有多种形态。 即同一种方法可以根据发送对…...

九龙证券|一夜暴跌36%,美股走势分化,标普指数创近2月最差周度表现

当地时间2月10日&#xff0c;美股三大指数收盘涨跌纷歧。道指涨0.5%&#xff0c;标普500指数涨0.22%&#xff0c;纳指跌0.61%。 受国际油价明显上升影响&#xff0c;动力板块领涨&#xff0c;埃克森美孚、康菲石油涨超4%。大型科技股走低&#xff0c;特斯拉、英伟达跌约5%。热门…...

【数据库】 mysql用户授权详解

目录 MySQL用户授权 一&#xff0c;密码策略 1&#xff0c;查看临时密码 2&#xff0c;查看数据库当前密码策略&#xff1a; 二&#xff0c; 用户授权和撤销授权 1、创建用户 2&#xff0c;删除用户 3&#xff0c;授权和回收权限 MySQL用户授权 一&#xff0c;密码策略…...

【性能】性能测试理论篇_学习笔记_2023/2/11

性能测试的目的验证系统是否能满足用户提出的性能指标发现性能瓶颈&#xff0c;优化系统整体性能性能测试的分类注&#xff1a;这些测试类型其实是密切相关&#xff0c;甚至无法区别的&#xff0c;例如几乎所有的测试都有并发测试。在实际中不用纠结具体的概念。而是要明确测试…...

C语言(输入printf()函数)

printf()的细节操作很多&#xff0c;对于现阶段的朋友来说&#xff0c;主要还是以理解为主。因为很多的确很难用到。 目录 一.转换说明&#xff08;占位符&#xff09; 二.printf()转换说明修饰符 1.数字 2.%数字1.数字2 3.整型转换字符补充 4.标记 -符号 符号 空格符…...

Zabbix 构建监控告警平台(四)

Zabbix ActionZabbix Macros1.Zabbix Action 1.1动作Action简介 当某个触发器状态发生改变(如Problem、OK)&#xff0c;可以采取相应的动作&#xff0c;如&#xff1a; 执行远程命令 邮件&#xff0c;短信&#xff0c;微信告警,电话 1.2告警实验简介 1. 创建告警media type&…...

2004-2019年285个地级市实际GDP与名义GDP

2004-2019年285个地级市实际GDP和名义GDP 1、时间&#xff1a;2004-2019年 2、范围&#xff1a;285个地级市 3、说明&#xff1a;GDP平减指数采用地级市所在省份当年平减指数 4、代码&#xff1a; "gen rgdp gdp if year 2003 gen rgdp gdp if year 2003" re…...

Node.js笔记-Express(基于Node.js的web开发框架)

目录 Express概述 Express安装 基本使用 创建服务器 编写请求接口 接收请求参数 获取路径参数(/login/2) 静态资源托管-express.static&#xff08;内置中间件&#xff09; 什么是静态资源托管&#xff1f; express.static() 应用举例 托管多个静态资源 挂载路径前缀…...

力扣sql简单篇练习(十五)

力扣sql简单篇练习(十五) 1 直线上的最近距离 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 SELECT min(abs(p1.x-p2.x)) shortest FROM point p1 INNER JOIN point p2 ON p1.x <>p2.x1.3 运行截图 2 只出现一次的最大数字 2.1 题目内容 2…...

浅谈动态代理

什么是动态代理&#xff1f;以下为个人理解:动态代理就是在程序运行的期间&#xff0c;动态地针对对象的方法进行增强操作。并且这个动作的执行者已经不是"this"对象了&#xff0c;而是我们创建的代理对象&#xff0c;这个代理对象就是类似中间人的角色&#xff0c;帮…...

Idea超好用的管理工具ToolBox(附带idea工具)

文章目录为什么要用ToolBox总结idea管理安装、更新、卸载寻找ide配置、根路径idea使用准备工作配置为什么要用ToolBox 快速轻松地更新,轻松管理您的 JetBrains 工具 安装自动更新同时更新插件和 IDE回滚和降级通过下载补丁或一组补丁而不是整个包&#xff0c;节省维护 IDE 的…...

Spring 中 ApplicationContext 和 BeanFactory 的区别

文章目录类图包目录不同国际化强大的事件机制&#xff08;Event&#xff09;底层资源的访问延迟加载常用容器类图 包目录不同 spring-beans.jar 中 org.springframework.beans.factory.BeanFactoryspring-context.jar 中 org.springframework.context.ApplicationContext 国际…...

情人节有哪些数码好物值得送礼?情人节实用性强的数码好物推荐

转瞬间&#xff0c;情人节快到了&#xff0c;大家还在为送什么礼物而烦恼&#xff1f;在这个以科技为主的时代&#xff0c;人们正在享受着科技带来的便利&#xff0c;其中&#xff0c;数码产品也成为了日常生活中必不可少的存在。接下来&#xff0c;我来给大家推荐几款比较实用…...

Illustrator脚本革命:7个必备工具彻底改变你的设计工作流

Illustrator脚本革命&#xff1a;7个必备工具彻底改变你的设计工作流 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 你是否还在Adobe Illustrator中重复着枯燥的手工操作&#xff…...

告别天书:用Python+NumPy手把手实现Turbo码的迭代译码(附完整代码)

告别天书&#xff1a;用PythonNumPy手把手实现Turbo码的迭代译码&#xff08;附完整代码&#xff09; 在通信系统的演进历程中&#xff0c;Turbo码的出现犹如一场静默的革命。1993年&#xff0c;当Berrou等人首次公开这项技术时&#xff0c;其接近香农极限的性能让整个学术界为…...

构建可靠AI智能体:从提示词工程到结构化内容生成的实战指南

1. 项目概述与核心思路最近在折腾AI应用开发&#xff0c;特别是想搞一个能稳定输出、逻辑清晰、还能带点“人味儿”的文本生成工具。市面上现成的方案要么太“机械”&#xff0c;要么定制化程度不够&#xff0c;总感觉差点意思。后来&#xff0c;我在一个开发者社区里看到了一个…...

Midjourney生成伪3D到真3D渲染的临界点在哪?——基于1327组渲染样本的Z-depth一致性、法线贴图兼容性与Blender导入成功率实测报告

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney生成伪3D到真3D渲染的临界点在哪&#xff1f; Midjourney 本身不生成可编辑的 3D 几何体&#xff0c;其输出始终是静态二维图像——即便使用 --style raw 或 --v 6.1 配合 3D render、octane…...

从MATLAB到FPGA:高效生成三种波形COE文件的实战指南

1. COE文件格式解析与FPGA应用场景 COE文件是Xilinx FPGA设计中用于初始化Block RAM&#xff08;BRAM&#xff09;的标准文件格式。我第一次接触这种文件时&#xff0c;发现它其实就是一个带有特定格式要求的文本文件&#xff0c;但正是这种简单的结构&#xff0c;让它成为MATL…...

【Claude Kubernetes配置终极指南】:20年SRE亲授生产环境零失误部署的7大黄金法则

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Claude Kubernetes配置的核心理念与演进脉络 Claude 并非原生 Kubernetes 组件&#xff0c;而是 Anthropic 推出的大型语言模型系列&#xff1b;当将其部署于 Kubernetes 集群时&#xff0c;“Claude K…...

AI小白必看:手把手教你开发大模型智能体,附收藏指南!

本文深入解析AI Agent&#xff08;智能体&#xff09;的核心概念与技术架构&#xff0c;通过实战案例展示如何使用LangChain等工具开发智能客服Agent。文章涵盖自主任务拆解、工具调用、多轮交互等关键点&#xff0c;并分享避免“模型幻觉”的实践技巧及性能优化方法。适合程序…...

一文看懂推荐系统:召回05:从One-Hot到Embedding,工业界如何为海量ID类特征降维

1. 从One-Hot到Embedding&#xff1a;工业界的降维革命 第一次接触推荐系统时&#xff0c;我被一个简单的问题难住了&#xff1a;小红书有几亿用户和笔记&#xff0c;每个用户和笔记都有唯一ID&#xff0c;这些ID该怎么处理&#xff1f;直接存成数字显然不行&#xff0c;因为数…...

如何在PC上快速配置yuzu模拟器:完整游戏体验指南

如何在PC上快速配置yuzu模拟器&#xff1a;完整游戏体验指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想在电脑上畅玩任天堂Switch游戏吗&#xff1f;yuzu模拟器是你的最佳选择&#xff01;作为目前最成熟的…...

别再死记硬背Paxos了!用“希腊城邦法案”的故事,5分钟搞懂分布式共识核心

从古希腊议会到区块链&#xff1a;用人类文明史解锁分布式共识的本质 想象一下公元前5世纪的雅典城邦&#xff0c;五百人议会正在为是否建造新战舰争论不休。议员们需要达成一致&#xff0c;但有人中途离席、有人突然反对、甚至传令官可能送错消息——这像极了今天分布式系统中…...