URL在Thymleaf中是第一类公民,有其专有的表达式语法@{...}
。
共存在2大类URL:
- 绝对URL http://www.your.domain
- 相对URL,分为四类
- 相对于页面 user/login.html
- 相对于上下文 /itemdetails?id=3 (服务的上下文名会被自动添加)
- 相对于服务器 ~/billing/processInvoice (可以调用在另一个context(application)中的URL)
- 相对于协议 //code.jquery.com/jquery-2.0.3.min.js
绝对URL可以在任何环境下被Thymleaf处理,然而相对URL由于需要HTTP request中的信息才能构造,所以处理相对URL需要context对象实现IWebContext接口。
<!-- Will produce 'http://localhost:8080/gtvg/order/details?orderId=3' (plus rewriting) -->
<a href="details.html"
th:href="@{http://localhost:8080/gtvg/order/details(orderId=${o.id})}">view</a>
<!-- Will produce '/gtvg/order/details?orderId=3' (plus rewriting) -->
<a href="details.html" th:href="@{/order/details(orderId=${o.id})}">view</a>
<!-- Will produce '/gtvg/order/3/details' (plus rewriting) -->
<a href="details.html" th:href="@{/order/{orderId}/details(orderId=${o.id})}">view</a>
#参数
URL base后附加(param=value)
表示URL参数中,支持使用表达式(orderId=${o.id})
,URL-encoding操作会被自动执行
URL 变量模板通过在URL路径中用{variable}
声明,赋值采用和URL参数一样的语法
@{/order/{orderId}/details(orderId=${orderId})}
多个参数赋值用","
分隔
@{/order/process(execId=${execId},execType='FAST')}
cookies没开启或者未知时,自动URL重写,";jsessionid=..."
被自动添加到URL尾部,支持通过response.encodeURL(...)
机制插入自定义的rewriting filter
URL base部分本身可以是另一个表达式
<a th:href="@{${url}(orderId=${o.id})}">view</a>
<a th:href="@{'/details/'+${user.login}(orderId=${o.id})}">view</a>