使用 JSTL 对表示 URL 路径(而不是请求参数)的字符串进行 URL 编码的最佳方法是什么?
<c:url value="/user/${user.name}"/>
根据我找到的任何文档 http://www.ibm.com/developerworks/java/library/j-jstl0318/#N10532,这应该解决它。但事实并非如此。它对参数进行了精美的编码(<c:url value="/user/${user.name}"><c:param name="section" value="employment 4u so good"/></c:url>
)但我没有传递任何参数。我怎样才能安全地编码一个简单的 URL,就像上面一样,而不用担心什么${user.name}
可能?
The <c:url>
不按照其值中指定的方式对 URI 进行编码,而只是对由嵌套指定的 URL 请求参数进行编码<c:param>
。您链接的 IBM 文章也没有说明其他情况。我认为您将其与“URL 重写”混淆了(本质上无非是附加jsessionid
必要时)。这<c:url>
当 cookie 被禁用时,确实也会这样做。
为了实现您的要求,对路径参数进行 URI 编码,最好是创建一个自定义 EL 函数,该函数委托给URLEncoder#encode() http://docs.oracle.com/javase/8/docs/api/java/net/URLEncoder.html#encode-java.lang.String-java.lang.String-并改变结果以符合 URI 规则。
<a href="/user/${util:encodeURI(user.name)}">view profile</a>
with
public static String encodeURI(String value) throws UnsupportedEncodingException {
return URLEncoder.encode(value, "UTF-8")
.replace("+", "%20")
.replace("%21", "!")
.replace("%27", "'")
.replace("%28", "(")
.replace("%29", ")")
.replace("%7E", "~");
}
在第二部分中这个答案 https://stackoverflow.com/questions/6395621/how-to-call-a-static-method-in-jsp-el/6396886#6396886您可以找到如何声明和注册自定义 EL 函数的基本启动示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)