链接表达式顾名思义就是用来动态计算、设置链接的表达式。链接也称超级链接,是指从一个网页指向一个目标的连接关系,所指向的目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是图片、电子邮件地址、文件、甚至是应用程序。
在前端页面中,引用JS(使用 <script> 的 src 属性)、CSS(使用 <link> 的 href 属性)、图片(使用 <img> 的 src 属性)、调用后端服务(使用 <form> 的 action)均需要使用链接来实现。
在 Thymeleaf 中,可以使用链接表达式为页面动态计算链接,不管是静态资源的引用,还是 form 表单的请求,凡是链接都可以用链接表达式(@{...})。
链接表达式的形式结构如下:
无参请求:@{/xxx}
有参请求:@{/xxx(k1=v1,k2=v2)},其中:k1=v1 和 k2=v2 是链接的参数,计算出来的 URL 为 /xxx?k1=v1&k2=v2
为了演示有参数请求,我们在后端新添加一个控制器。代码如下:
package com.hxstrive.thymeleaf.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
@RequestMapping("/common")
@Controller
public class CommonController {
@RequestMapping("/multiArg")
public void multiArg(String name, int age, String email,
HttpServletResponse response) {
response.setContentType("text/plain; charset=UTF-8");
PrintWriter writer = null;
try {
writer = response.getWriter();
StringBuilder builder = new StringBuilder();
builder.append("name=").append(name).append(", ")
.append("age=").append(age).append(", ")
.append("email=").append(email);
writer.println(builder.toString());
} catch (Exception e) {
if(null != writer) {
e.printStackTrace(writer);
}
}
}
}在 Thymeleaf 模板中,添加如下代码:
<p>
<!-- 通过链接表达式引入一张图片 -->
<img th:src="@{/images/image.jpeg}">
</p>
<p>
<!-- 通过链接表达式调用一个带参数的链接 -->
<a th:href="@{/common/multiArg(name='张三',age=20,email='zhangsan@163.com')}">带参数的链接表达式</a>
</p>渲染结果如下:
<p> <img src="/images/image.jpeg"> </p> <p> <a href="/common/multiArg?name=%E5%BC%A0%E4%B8%89&age=20&email=zhangsan@163.com">带参数的链接表达式</a> </p>