使用 @{} 处理路径上下文
1. 问题
当一个应用部署的时候,它将会在应用访问路径上拥有一个固定的访问路径前缀,我们一般称之为应用上下文,或者是 Context Path 。
而这个应用上下文随着开发、测试或者生产环境的不同都有可能改变,甚至在生产环境上也有可能因为各种需要更改应用上下文等等。
因此当我们在视图模板中需要书写相对路径的 URL 时,就需要注意不能写死这个应用上下文前缀了。
@{}
,我们称之为 URL 表达式,为这个问题提供了很好的解决方法。
2. 示例
假设我们现在启动一个应用,它的应用上下文是 /demo
。
应用的视图文件夹下的某个 HTML 文件中有如下的 HTML 代码:
<a href="@{/a}"></a>
这个时候我们访问这个 HTML 对应的访问地址,以上视图模板将渲染为:
<a href="/demo/a"></a>
Leap 启动后会自动识别应用上下文,不需要额外的设置。
3. 规则
以上示例是 URL 表达式最常见的用法,即要求表达式的内容以 /
为前缀,HTPL 就会为我们加上应用上下文前缀。
除了以 /
为前缀,以 ~
为前缀的路径也是会做相应处理的。
例如表达式内容为 ~/a
将会被渲染为 /demo/a
。
4. 自动处理
如果页面模板中每一个相对路径的 URL 都需要用 @{}
包裹,那这样使用起来也还是很麻烦。
因此 HTPL 为我们做了一些自动处理。
还是上面的例子,假设我们把那个 HTML 文件中的那段 HTML 代码改回不加 @{}
的形式,这样:
<a href="/a"></a>
这个时候我们启动再访问,可以看到渲染出来的结果:
<a href="/demo/a"></a>
居然也自动加上了应用上下文前缀。
这就是 HTPL 自动处理路径的结果。
HTPL 模板引擎会对下列元素的属性做应用上下文的自动处理:
元素 | 属性 |
---|---|
<audio>, <embed>, <iframe>, <img>, <input>, <script>, <source>, <track>, <video> |
src |
<a>, <area>, <base>, <link> |
href |
<form> |
action |
如果以上属性中的某个 URL 不希望 HTPL 做这个处理,可以在路径前加上 ^
前缀,如:
<a href="^/a"></a>
则渲染出来将会是:
<a href="/a"></a>
上一篇:使用 ${} 解析表达式
下一篇:转义处理