深色模式
服务器根相对URL
Thymeleaf 还提供了一种额外的语法,用于创建服务器根相对 URL(而非上下文根相对 URL),以便链接到同一服务器下的其他应用(不同上下文)。这类 URL 的写法为:@{~/path/to/something}。
核心概念区分
首先明确两个关键概念的差异,帮助你理解何时该用服务器根相对 URL:
| URL 类型 | 语法示例 | 解析规则 | 适用场景 |
|---|---|---|---|
| 上下文根相对 URL | @{/product/list} | 自动拼接当前应用的上下文路径(如 /gtvg/product/list) | 访问当前应用内的资源 |
| 服务器根相对 URL | @{~/billing/process} | 直接基于服务器根路径,拼接目标应用的上下文路径(如 /billing/process) | 访问同服务器下其他应用的资源 |
实际使用示例
假设你的服务器上部署了两个应用:
- 主应用:上下文路径为
/gtvg(杂货铺业务); - 账单应用:上下文路径为
/billing(独立的账单系统)。
若要在主应用中链接到账单应用的接口,就可以使用服务器根相对 URL:
html
<!-- 服务器根相对 URL:直接指向 /billing/processInvoice,而非 /gtvg/billing/processInvoice -->
<a href="billing.html" th:href="@{~/billing/processInvoice(invoiceId=${o.id})}">
Process Invoice
</a>关键注意事项
路径解析逻辑:
@{~/billing/processInvoice}中的~表示“跳过当前应用的上下文路径”,直接从服务器根路径(/)开始解析,最终生成/billing/processInvoice,而非/gtvg/billing/processInvoice。跨应用访问的前提: 该语法仅适用于同一服务器下的不同应用,且目标应用的上下文路径(如
/billing)需在服务器中正确配置,否则链接会失效。参数与编码兼容: 服务器根相对 URL 同样支持动态参数和自动编码,例如:
html<a th:href="@{~/billing/process(invoiceId=${o.id},type='URGENT')}">Process</a>会生成
/billing/process?invoiceId=123&type=URGENT,参数仍会自动 URL 编码。
总结
@{~/path}是服务器根相对 URL 的专属语法,用于访问同服务器下其他应用的资源,区别于访问当前应用的@{/path}。- 核心差异在于
~符号:跳过当前应用上下文,直接基于服务器根路径解析,避免拼接当前应用的上下文路径。 - 该语法兼容动态参数和自动编码,仅需关注目标应用的上下文路径配置,无需额外处理路径拼接。
