java servlet: context-path的作用

article/2025/8/3 11:20:10

当 没有配置 java servlet:    context-path 时, swagger的地址是 

http://localhost:8086/api/v1/swagger-ui/index.html 

当配置了 java servlet:    context-path 时, swagger的地址前要加上context-path 

比如 application.yml是 

server:port: 8086servlet:context-path: /api/v1/spring:datasource:url: jdbc:mysql://localhost:3306/user_db?useSSL=false&serverTimezone=UTC&characterEncoding=utf8username: rootpassword: rootdriver-class-name: com.mysql.cj.jdbc.Drivertype: com.alibaba.druid.pool.DruidDataSourcedruid:initial-size: 5min-idle: 5max-active: 20test-while-idle: truetest-on-borrow: falsetest-on-return: falsemybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplmap-underscore-to-camel-case: trueglobal-config:db-config:id-type: autologic-delete-field: deletedlogic-delete-value: 1logic-not-delete-value: 0springdoc:swagger-ui:path: /swagger-ui.htmltags-sorter: alphaoperations-sorter: alpha

context-path 的作用(Spring Boot 中的 server.servlet.context-path)​

context-path(上下文路径)是 Web 应用的基础路径,用于区分不同的应用或模块。在 Spring Boot 中,可以通过 server.servlet.context-path 配置项来设置。


​1. 主要作用​

​(1) 提供应用隔离​

  • 如果同一个 Tomcat 服务器部署多个应用,可以通过不同的 context-path 区分它们。
    ​示例​​:
    • http://localhost:8080/app1/ → 应用1
    • http://localhost:8080/app2/ → 应用2

​(2) 统一 API 前缀​

  • 所有 API 自动加上 context-path 前缀,避免手动在每个 @RequestMapping 中重复写路径。
    ​示例​​:
     

    yaml

    复制

     

    server: servlet: context-path: /api

    • 访问 /api/users 而不是 /users

​(3) 适配代理服务器(Nginx/Apache)​

  • 反向代理(如 Nginx)可以通过 context-path 将请求转发到不同的微服务。
    ​示例​​:
     

    复制

     

    location /api/ { proxy_pass http://localhost:8080/api/; }


​2. 配置方式​

​(1) application.properties / application.yml

 

yaml

复制

 

server: servlet: context-path: /api # 所有请求需加 /api 前缀

​生效后​​:

  • http://localhost:8080/api/test → 实际访问 /test 接口

​(2) 代码方式(不推荐)​

 

java

复制

 

@SpringBootApplication public class MyApp { public static void main(String[] args) { SpringApplication app = new SpringApplication(MyApp.class); app.setDefaultProperties(Collections.singletonMap("server.servlet.context-path", "/api")); app.run(args); } }


​3. 影响范围​

  • ​所有请求​​(包括静态资源、API、WebSocket)都会自动加上 context-path 前缀。
    ​示例​​:

    • 静态资源:/api/index.html(原路径 /static/index.html
    • API 接口:/api/users(原路径 /users
    • WebSocket:/api/ws(原路径 /ws
  • ​特殊情况​​:

    • @RequestMapping 已经包含 /api,则最终路径会是 /api/api/xxx(需注意避免重复)。

​4. 常见问题​

​(1) 静态资源 404​

如果配置了 context-path,访问静态资源时也要加上前缀:

 

复制

 

http://localhost:8080/api/css/style.css

​解决方案​​:

  • 确保静态资源放在 src/main/resources/static/ 下
  • 前端代码引用资源时使用相对路径或动态拼接 context-path

​(2) Swagger/Actuator 路径变化​

  • ​Swagger UI​​:http://localhost:8080/api/swagger-ui.html
  • ​Actuator​​:http://localhost:8080/api/actuator/health

​(3) 测试时路径错误​

在单元测试中,MockMvc 需要手动处理 context-path

 

java

复制

 

@SpringBootTest @AutoConfigureMockMvc class MyControllerTest { @Autowired private MockMvc mockMvc; @Test void testApi() throws Exception { mockMvc.perform(get("/api/test")) // 必须带上 /api .andExpect(status().isOk()); } }


​5. 最佳实践​

  1. ​微服务推荐使用 /api 作为默认前缀​​,避免直接暴露根路径。
  2. ​前端代码动态获取 context-path​(避免硬编码):
     

    javascript

    复制

     

    const API_BASE = window.location.pathname.split('/')[1] || ''; fetch(`/${API_BASE}/users`);

  3. ​结合 @RequestMapping 使用​​:
     

    java

    复制

     

    @RestController @RequestMapping("/v1") // 最终路径: /api/v1/users public class UserController { @GetMapping("/users") public List<User> getUsers() { ... } }


​总结​

场景说明
​多应用隔离​不同应用使用不同 context-path
​统一 API 前缀​避免手动写 /api 前缀
​反向代理适配​Nginx/Apache 根据路径转发请求
​静态资源访问​需加上 context-path

配置 context-path 后,所有请求都必须带上该前缀,否则会返回 ​​404​​。


http://www.hkcw.cn/article/AaZiJOteWg.shtml

相关文章

初学c语言22(编译和链接)

一.翻译环境和运行环境 在ANSIC的任何一种实现中存在俩个不同的环境&#xff0c;分别为翻译环境和运行环境&#xff0c;翻译环境中源代码转化为可执行的机器指令&#xff08;二进制指令&#xff09;&#xff0c;执行环境执行代码 1.翻译环境 翻译环境分为编译和链接&#xff…

什么是缺页中断(缺页中断详解)

文章目录 【操作系统】什么是缺页中断&#xff08;缺页中断详解&#xff09;一、缺页中断的本质与背景1. **虚拟内存与分页机制**2. **缺页中断的定义** 二、缺页中断的触发场景1. **首次访问新分配的虚拟页**2. **内存置换导致的页缺失**3. **访问权限冲突**4. **页表项无效**…

2025——》VSCode Windows 最新安装指南/VSCode安装完成后如何验证是否成功?2025最新VSCode安装配置全攻略

1.VSCode Windows 最新安装指南: 以下是 2025 年 Windows 系统下安装 Visual Studio Code(VSCode)的最新指南,结合官方文档与实际操作经验整理而成: 一、下载官方安装包: 1.访问官网: 打开浏览器,进入 VSCode 官方下载页面https://code.visualstudio.com/Download 2…

终结电源反接与压降损耗:理想二极管控制器深度解析

理想二极管控制器驱动外部 NMOS实现超低正向压降和可防反向电流特性&#xff0c;广泛应用在有大电流高功率、电源输入防反需求场景中。那理想二极管控制IC内部到底是怎么工作的&#xff0c;怎么实现这些特性的呢&#xff1f;本文以LM74700-Q1为例介绍尝试解答上述问题。 一 理…

开源版 PyMOL 如何绘制 新冠病毒 分子结构?

参阅&#xff1a;用生物知识解读“新冠病毒”&#xff0c; 百度网盘下载 提取码&#xff1a;csub pip show pymol 简介: PyMOL是一个Python增强的分子图形工具。它擅长蛋白质、小分子、密度、表面和轨迹的3D可视化。它还包括分子编辑、射线追踪和动画。 先从 www.python.org…

PyTorch——DataLoader的使用

batch_size, drop_last 的用法 shuffle shuffleTrue 各批次训练的图像不一样 shuffleFalse 在第156step顺序一致

【前端】CSS面试八股

网上现有资料已经很丰富了&#xff0c;我挑了些自己押面试题时总结过的来写。 Q&#xff1a;回流和重绘 A&#xff1a; 回流reflow&#xff1a;计算元素的几何&#xff0c;引发layout重绘repaint&#xff1a;更新元素可见样式&#xff0c;引发paint 回流的成本比重绘高得多&…

【笔记】在 MSYS2(MINGW64)中安装 python-maturin 的记录

#工作记录 &#x1f4cc; 安装背景 操作系统&#xff1a;MSYS2 MINGW64当前时间&#xff1a;2025年6月1日Python 版本&#xff1a;3.12&#xff08;通过 pacman 安装&#xff09;目标工具&#xff1a;maturin —— 用于构建和发布 Rust 编写的 Python 包 &#x1f6e0;️ 安装…

华为IP(7)

端口隔离技术 产生的背景 1.以太交换网络中为了实现报文之间的二层隔离&#xff0c;用户通常将不同的端口加入不同的VLAN&#xff0c;实现二层广播域的隔离。 2.大型网络中&#xff0c;业务需求种类繁多&#xff0c;只通过VLAN实现二层隔离&#xff0c;会浪费有限的VLAN资源…

JS基础内容1

JS基础内容1目录 打印方式关联方式延迟加载变量声明数组对象补充&#xff1a;json格式 函数函数的分类函数在对象和数组中的使用函数的交互调用 打印方式 1、弹窗打印 alert(arr) 2、控制台打印 console.log() 以 html 的形式打印 console.dir() 将 document 当成 对象 打印 …

高考报名人数8年来首降背后 教育需求变化探因

教育部近日公布,今年高考报名人数为1335万人,比去年的1342万略微下降7万人,这是自2018年以来首次出现下降。2025年高考考生主要对应的是2006年和2007年的新生儿。2007年出生人口数量为1594万,比2006年增长了10万,但为何考生数量会下降呢?这不能简单以数字对比来解释。例如…

数据库安全性

一、计算机安全性概论 &#xff08;一&#xff09;核心概念 数据库安全性&#xff1a;保护数据库免受非法使用导致的数据泄露、更改或破坏&#xff0c;是衡量数据库系统的关键指标之一&#xff0c;与计算机系统安全性相互关联。计算机系统安全性&#xff1a;通过各类安全保护…

【C++】string类

1. 标准库中的string类 1.1 string类 string类的文档介绍 在 使用 string 类时&#xff0c;必须包含 #include 头文件以及 using namespace std ; 1.2 auto和范围for auto 关键字 在早期C/C 中 auto 的含义是&#xff1a;使用 auto 修饰的变量&#xff0c;是具有自动存储器…

Docker 在云环境中的部署:AWS/ECS 与 Azure/AKS 的实践对比

Docker 容器的出现极大地提升了应用程序的打包、交付和运行效率。然而,在面对高并发、高可用和大规模集群管理的生产环境时,将 Docker 容器部署到公有云平台成为了必然选择。公有云平台提供了强大的基础设施和托管服务,极大地简化了底层运维负担。 在众多云服务提供商中,A…

【HarmonyOS 5】Laya游戏如何鸿蒙构建发布详解

【HarmonyOS 5】Laya游戏如何鸿蒙构建发布详解 一、前言 LayaAir引擎是国内最强大的全平台引擎之一&#xff0c;当年H5小游戏火的时候&#xff0c;腾讯入股了腊鸭。我还在游戏公司的时候&#xff0c;17年曾经开发使用腊鸭的H5小游戏&#xff0c;很怀念当年和腊鸭同事一起解决…

理解解释器架构:原理、组成与运行机制全解析

目录 前言1. 什么是解释器架构2. 解释器的基本组成2.1 被解释执行的程序2.2 解释器引擎2.3 解释器内部状态2.4 程序执行的当前状态2.5 存储器模型 3. 解释器的工作原理3.1 解析源代码3.2 初始化运行环境3.3 逐条执行语法结构3.4 维护程序状态3.5 内存管理与变量作用域 4. 举例&…

SOD-123和SOD-123FL封装到底有什么区别?

目录 1. 封装结构与尺寸 2. 热性能 3. 电气特性 4. 应用场景 5. 兼容性与替代性 6.价格比较 大家好&#xff0c;我们硬件工程师经常用到SOD-123和SOD-123FL的封装&#xff0c;特别是二极管&#xff0c;比如二极管1N4007便有这两种封装。那么这两种封装两者到底有什么区别…

Apache IoTDB V2.0.3 发布|新增元数据导入导出脚本适配表模型功能

Release Announcement Version 2.0.3 Apache IoTDB V2.0.3 已经发布&#xff01; V2.0.3 作为树表双模型正式版本&#xff0c;主要新增元数据导入导出脚本适配表模型、Spark 生态集成&#xff08;表模型&#xff09;、AINode 返回结果新增时间戳&#xff0c;表模型新增部分聚…

NX753NX756美光科技闪存NX784NX785

技术解读与产品特性 美光科技的NX系列闪存&#xff0c;包括NX753、NX756、NX784、NX785等型号&#xff0c;代表了当前存储技术的前沿水平。这些产品基于先进的NAND闪存技术&#xff0c;采用业界领先的3D TLC NAND技术&#xff0c;实现了高速的数据读写能力。3D TLC NAND技术通…

go语言的GMP(基础)

1.概念梳理 1.1线程 通常语义中的线程&#xff0c;指的是内核级线程&#xff0c;核心点如下&#xff1a; &#xff08;1&#xff09;是操作系统最小调度单元&#xff1b; &#xff08;2&#xff09;创建、销毁、调度交由内核完成&#xff0c;cpu 需完成用户态与内核态间的切…