如何使用JSTL对表示URL路径的字符串进行编码?
用JSTL对表示URL路径(不是请求参数)的字符串进行URL编码的最佳方法是什么?
<c:url value="/user/${user.name}"/>
根据我发现的任何文档,这应该解决。但事实并非如此。它对参数进行了漂亮的编码(<c:url
value="/user/${user.name}"><c:param name="section" value="employment 4u so
good"/></c:url>),但我没有传递任何参数。如何像上面一样安全地编码一个简单的URL,而不用担心会发生什么${user.name}
?
回答:
的<c:url>
在其值中指定,但是它们通过一个嵌套仅指定URL请求参数不编码的URI
<c:param>
。您链接的IBM文章也没有其他说明。我认为您将其与“
URL重写”(实质上是仅jsessionid
在必要时添加)混淆了。<c:url>
当禁用cookie时,确实也是如此。
为了满足您对URI参数编码路径参数的要求,最好是创建一个自定义EL函数,该函数委托URLEncoder#encode()
并更改结果符合URI规则。
<a href="/user/${util:encodeURI(user.name)}">view profile</a>
与
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", "~");
}
在该答案的第二部分,您可以找到一个基本的启动示例,该示例如何声明和注册自定义EL函数。
以上是 如何使用JSTL对表示URL路径的字符串进行编码? 的全部内容, 来源链接: utcz.com/qa/420549.html