轩辕娅童 发表于 2025-9-28 18:34:31

老码农教你 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 前缀配置,相当于已经起到了过滤的效果,应用只需要支持有前缀的需求。
所以默认不采用“强制”方式,可以同时兼容两种应用需求。(但有些场景下,确实需要强制)

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

哈梨尔 发表于 2025-11-1 08:37:54

懂技术并乐意极积无私分享的人越来越少。珍惜

锷稠 发表于 2025-11-18 03:02:12

感谢,下载保存了

史穹逊 发表于 2025-12-11 07:01:25

感谢分享

丰江 发表于 2026-1-13 04:55:07

感谢,下载保存了

啖曼烟 发表于 2026-1-15 01:32:58

这个好,看起来很实用

秦欣艷 发表于 2026-1-17 04:59:12

这个好,看起来很实用

采序 发表于 2026-1-18 04:20:56

懂技术并乐意极积无私分享的人越来越少。珍惜

但婆 发表于 2026-1-20 00:44:26

感谢,下载保存了

背竽 发表于 2026-1-20 03:46:12

前排留名,哈哈哈

缄戈 发表于 2026-1-20 21:02:45

谢谢分享,辛苦了

高小雨 发表于 2026-1-21 19:06:44

感谢分享,下载保存了,貌似很强大

锟及 发表于 2026-1-22 11:39:58

很好很强大我过来先占个楼 待编辑

啦汇 发表于 2026-1-23 02:10:18

热心回复!

劳怡月 发表于 2026-1-23 06:08:06

分享、互助 让互联网精神温暖你我

裴涛 发表于 2026-1-23 08:07:07

懂技术并乐意极积无私分享的人越来越少。珍惜

许娴广 发表于 2026-1-25 10:44:48

过来提前占个楼

窖咎 发表于 2026-1-25 11:53:44

谢谢分享,试用一下

咪四 发表于 2026-1-29 06:45:24

用心讨论,共获提升!

锄淫鲷 发表于 2026-1-30 11:31:02

这个好,看起来很实用
页: [1] 2
查看完整版本: 老码农教你 Solon Web Context-Path 的两种配置方式