老码农教你 Solon Web Context-Path 的两种配置

context-path 概念早期可能是出现在 servelt 容器。比如 tomcat 在部署应用(或模块)时,每个应用(或模块)会配置一个 context-path,起到隔离和避免路径冲突的效果。

对 solon 而言,相当于一个 webapp 的"路径前缀"(与友商的配置略有不同)。

1、所谓路径前缀

比如果有应用地址(未配置 context-path 时):http://xxx/test/get

当配置了context-path /demo/ 后就需要用 http://xxx/demo/test/get 发起请求(在域名之后,多了段前缀)。

2、关于 context-path 的两种配置(基于 pathNew 的变化实现)

配置 差别 差别说明
server.contextPath: "/test-service/" 原路径仍能访问(v1.11.2 后支持)
server.contextPath: "!/test-service/" ! 开头 强制,原路径不可访问(v2.6.3 后支持)

当有 context-path 配置时

接口 说明
ctx.path() 是原始请求路径
ctx.pathNew() 是去掉 context-path 后的请求路径

3、两种配置效果示例说明

比如有原始地址:http://xxx/test,使用不同配置的效果:

请求地址 "/test-service/" "!/test-service/"
http://xxx/test (原路径)可访问 (原路径)404 错误
http://xxx/test-service/test 可访问 可访问

提醒:一般情况使用,添加 ! (表示强制)才是大多数人的预期效果。

4、为什么要有两种配置?

在集群环境(比如微服务)做内部的 http rpc (或者 http call)请求时。如果 server 加了 context-path(或者变更),client 就必须要修改请求路径。没办法作到一套代码到处可用。

所以有了 "原路径仍能访问" 的配置策略。可以实现外部如何变化,内部请求都可不变!

5、为什么默认不是"强制"的策略?

在生产部署时,当遇见有 context-path 需求的场景。一般会有 nginx 或 tomcat 等,本身就有 path 前缀配置,相当于已经起到了过滤的效果,应用只需要支持有前缀的需求。

所以默认不采用"强制"方式,可以同时兼容两种应用需求。(但有些场景下,确实需要强制)

相关推荐
天天爱吃肉82189 分钟前
豆包 vs DeepSeek API 对比分析报告
android·java·大数据·开发语言·功能测试·嵌入式硬件·汽车
柏舟飞流10 分钟前
Spring Boot + Spring Security + RBAC:从登录鉴权到权限模型设计
java·spring boot·spring
AC赳赳老秦15 分钟前
OpenClaw + 飞书多维表格:自动同步数据、生成统计图表、触发自动化任务
java·大数据·python·缓存·自动化·deepseek·openclaw
CS_SKILL26 分钟前
吉比特 C++ 实习一面面经:一轮把 C++、容器、并发、排序和网络全扫了一遍
java·开发语言·校招面经·实习面经·技术面经·吉比特校招
Jul1en_44 分钟前
【SpringCloud】SkyWalking 链路追踪知识详解及部署教程
java·后端·spring·spring cloud·skywalking
宸津-代码粉碎机44 分钟前
Spring AI 企业级实战|智能记忆摘要+自动遗忘机制落地,彻底解决上下文爆炸与Token冗余
java·大数据·人工智能·后端·python·spring·云计算
逻极1 小时前
Spring Boot 微服务开发提速:我们如何将接口响应时间降低60%
java·spring boot·微服务·性能优化·自动配置
Yvonne爱编码1 小时前
JAVA EE初阶---DAY 2 计算机网络
java·开发语言·计算机网络·算法·java-ee·php
潇凝子潇1 小时前
IDEA插件
java·ide·intellij-idea
摇滚侠1 小时前
SSM 框架实战教程 SpringBoot 自动配置 176-179
java·spring boot·后端