ThymeleafURL

简介

Thymeleaf标准方言(称为Standard和SpringStandard)提供了一种在Web应用程序中轻松创建URL的方法,以便它们包含任何所需的URL工件。 这是通过连接表达方式来完成的,这是一种类似于Thymeleaf标准的表现:@{…}

1. 绝对网址 @{https://~} (基于协议的标准网址)

绝对URL用于创建到其他服务器的链接。它们需要指定一个协议名称(http://或https?/)开头。

<a th:href="@{https://www.e-learn.cn/thymeleaf/}">

上面链接不会被修改,除非在服务器上配置了URL重写过滤器,并在HttpServletResponse.encodeUrl(…)方法中执行修改。最后生成的HTML代码如下:

<a href="https://www.e-learn.cn/thymeleaf/">

2. 上下文相关URL 以’/'字符开头 (根据应用上下文补全URL)

最常用的URL类型是上下文相关的。 这些URL是一旦安装在服务器上,就会与Web应用程序根相关联URL。 例如,如果将一个名称为myapp.war的文件部署到一个Tomcat服务器中,那么应用程序一般是通过URL:http://localhost:8080/myapp来访问,myapp就是上下文名称。

与上下文相关的URL以/字符开头:

<a th:href="@{/order/list}">

如果应用程序访问URL为:http://localhost:8080/myapp,则此URL将输出:

<a href="/myapp/order/list">

3. 与服务器相关URL 以’~'字符开头 (服务器级别的上下文补全,而不一定是应用上下文)

服务器相关的URL与上下文相关的URL非常相似,只是它们不假定URL要链接到应用程序上下文中的资源,因此允许链接到同一服务器中的不同上下文:

<a th:href="@{~/billing-app/showDetails.html}">

当前应用程序的上下文将被忽略,因此尽管应用程序部署在http:// localhost:8080 / myapp,但该URL将输出:

<a href="/billing-app/showDetails.html">

4. 协议相关URL (另一种形式的绝对URL)

与协议相关的URL实际上是绝对的URL,它将保持用于显示当前页面的协议(HTTP,HTTPS)。 它们通常用于包括样式,脚本等外部资源:

<script th:src="@{//scriptserver.example.net/myscript.js}">...</script>

它将呈现与上面一致的URL(URL重写除外),如:

<script src="//scriptserver.example.net/myscript.js">...</script>

5. 添加参数 (URL传值)

如何向使用@{…}表达式创建的URL添加参数? 这也很简单:

<a th:href="@{/order/details(id=3)}">

上面示例代码,最终将输出为:

<a href="/order/details?id=3">

也可以添加几个参数,用逗号分隔它们:

<a th:href="@{/order/details(id=3,action='show_all')}">

上面代码将输出结果为:

<a href="/order/details?id=3&action=show_all">

还可以使用正常参数的路径变量的形式包含参数,但在URL的路径中指定一个占位符:

<a th:href="@{/order/{id}/details(id=3,action='show_all')}">

上面输出结果为:

<a href="/order/3/details?action=show_all">

6. 网址片段标识符 #name (用于页面自动翻滚到相应元素)

片段标识符可以包含在URL中,包含参数和不包含参数。 它们将始终包含在网址的基础上,参考以下代码:

<a th:href="@{/home#all_info(action='show')}">

执行输出结果如下 -

<a href="/home?action=show#all_info">

7. URL重写

Thymeleaf允许在应用程序中配置URL重写过滤器,它通过调用Thymeleaf模板生成的每个URL的Servlet API的javax.servlet.http.HttpServletResponse类中的response.encodeURL()方法来实现。

下面在Java Web应用程序中支持URL重写操作的标准方式,并允许URL:

自动检测用户是否启用了Cookie,如果未启用或者如果它是第一个请求并且cookie配置仍未知。则将;jsessionid=…片段添加到URL。
在需要时自动将代理配置应用于URL。
使用不同的CDN设置,以便链接到分布在多个服务器中的内容。

8. URL其它属性

不要以为在@{…}表达式中只有th:href属性来表示URL 。 事实上,它们可以像变量表达式(${…})或消息外部化/国际化(#{…})一样用于任何地方

例如,表单提交时,可使用以下写法 -

<form th:action="@{/order/processOrder}">

或作为其他表达的一部分。 如下作为外部化/国际化字符串的参数:

<p th:text="#{orders.explanation('3', @{/order/details(id=3,action='show_all')})}">

9. 在URL中使用表达式

下面来看看,如下所示的URL表达式:

<a th:href="@{/order/details(id=3,action='show_all')}">

但3和’show_all’都不能是文字值,因为只有在运行时才能知道它们的值,怎么办?

<a th:href="@{/order/details(id=${order.id},action=(${user.admin} ? 'show_all' : 'show_public'))}">

下面看看另一个URL表达式,如下所示:

<a th:href="@{/order/details(id=${order.id})}">

它其实是下面URL的一个快捷方式:

<a th:href="@{'/order/details'(id=${order.id})}">

这意味着URL基本身可以被指定为一个表达式,例如一个变量表达式:

<a th:href="@{${detailsURL}(id=${order.id})}">

或外部化/国际化的文本:

<a th:href="@{#{orders.details.localized_url}(id=${order.id})}">

甚至可以使用复杂的表达式,包括条件表达式,例如:

<a th:href="@{(${user.admin}? '/admin/home' : ${user.homeUrl})(id=${order.id})}">

如果要更清洁,那么可以使用th:with :

<a th:with="baseUrl=(${user.admin}? '/admin/home' : ${user.homeUrl})"
  th:href="@{${baseUrl}(id=${order.id})}">

又或者 -

<div th:with="baseUrl=(${user.admin}? '/admin/home' : ${user.homeUrl})">
  ...
  <a th:href="@{${baseUrl}(id=${order.id})}">...</a>
  ...
</div>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值