4

当我使用下面的 jstl 代码时

  <a href="http://mysite.com?id="<c:out value="${myid}"/>/><c:out value="${myid}"/></a> 

输出是:

“1234”

值 1234 对应于 myid 的变量值,但生成的 url 是“ http://mysite.com?id= ”,因此没有生成 myid 的值作为 href 的一部分。

如何修改 href 以显示整个 href :

http://mysite.com?id=1234

代替 :

" http://mysite.com?id= "

4

2 回答 2

22

最终,JSP/JSTL 生成 HTML。您熟悉基本的 HTML,对吗?

通过右键单击,在浏览器中查看源代码,仔细查看生成的 HTML 输出。你会看到的:

<a href="http://mysite.com?id="1234/>1234</a> 

那是有效的HTML吗?不,您"在错误的位置过早地关闭了属性值,并且您用 . 过早地关闭了标签/>。看,Stack Overflow HTML 语法高亮器也被弄糊涂了。相反,它应该是:

<a href="http://mysite.com?id=1234">1234</a> 

相应地修复 HTML 生成器(即 JSP/JSTL 代码),使其生成所需的 HTML:

<a href="http://mysite.com?id=<c:out value="${myid}"/>"><c:out value="${myid}"/></a> 

与具体问题无关<c:out>,它仅有助于在重新显示用户控制的输入时防止XSS 攻击漏洞,实际上是内联 URL 参数的错误工具。如果您可以保证它${myid}始终是一个数字(因为它是 aLongInteger),您甚至可以完全忽略它,使代码更易于阅读:

<a href="http://mysite.com?id=${myid}">${myid}</a> 

但是,如果${myid}不能保证 a 是数字(因为它是 a String),那么您应该使用<c:url>and<c:param>对其进行正确的 URL 编码

<c:url value="http://mysite.com" var="myURL">
    <c:param name="id" value="${myid}" />
</c:url>
<a href="${myURL}"><c:out value="${myid}" /></a>
于 2013-08-06T16:08:02.707 回答
3

<c:url>标签用于创建 url。这在客户端关闭 cookie 的情况下很有帮助,并且您将需要重写将从 jsp 页面返回的 URL。

<c:param>标记可以用作子标记,以在返回的 URL 中添加参数。使用这些参数对 URL 进行编码。

<c:url value="http://mysite.com" var="myURL">
   <c:param name="id" value="${myid}" />
</c:url>

<a href="${myURL}" />${myURL}</a>

从这里阅读更多信息。

于 2013-08-06T16:04:26.043 回答