使用 @{} 处理路径上下文

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>
上一篇:使用 ${} 解析表达式 下一篇:转义处理

results matching ""

    No results matching ""