Spring PetClinic <spring:url ....../> 每个 URL 的编码方式是什么?

3

我正在实现Spring Pet Clinic示例项目,该项目可以在此处找到。

实现结果请点击这里

在主页中,所有的网址都是由<spring:url />标签编码的。我想确认一下,使用spring:url标签对链接进行编码,即使是简单导航链接,是否是良好的编程实践,或者它是出于特定原因而这样做的?

1个回答

8
是的,这是一个好的实践。该标签是Spring JSP标签,用于创建带有JSTL增强功能的URL。 标签用于创建URL,并在客户端关闭cookie的情况下非常有用,在这种情况下,您需要重写从jsp页面返回的URL。 如果需要提供持久会话,则重写的URL将编码会话ID。
例如,您的URL将显示为:
<c:url value="a.jsp">

/context/a.jsp // when cookies is enabled
/context/a.jsp;jsessionid=B01F432.... // when cookie is disabled

这样,Servlet容器就可以跟踪用户请求。另一个重要的事情是,c:url会前缀上上下文根,因此您不需要在任何地方编写根上下文前缀。

就像我说的那样,<spring:url>包含一些比JSTL更强的增强功能,例如编码URI模板变量。

<spring:url value="/url/path/{variableName}">
   <spring:param name="variableName" value="more than JSTL c:url" />
 </spring:url>

结果在:/currentApplicationContext/url/path/more%20than%20JSTL%20c%3Aurl

更多细节请参见:http://docs.spring.io/spring/docs/3.1.4.RELEASE/javadoc-api/org/springframework/web/servlet/tags/UrlTag.html


谢谢你的回复,Lucas。我只有一个疑问,如果会话没有被创建,而我只是访问了应用程序的主页,那么在这种情况下,spring:url标签会返回什么? - underdog
1
当您第一次使用c:url标签请求链接时,将重写链接以添加jsessionid参数。此时服务器不确定客户端是否支持cookie,因此会在URL上生成一个cookie和jsessionid。 - Lucas Oliveira

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接