链接表达式顾名思义就是用来动态计算、设置链接的表达式。链接也称超级链接,是指从一个网页指向一个目标的连接关系,所指向的目标可以是另一个网页,也可以是相同网页上的不同位置,还可以是图片、电子邮件地址、文件、甚至是应用程序。
在前端页面中,引用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>