当前位置 : 主页 > 编程语言 > java >

jsp – 如何编码一个字符串表示URL路径与JSTL?

来源:互联网 收集:自由互联 发布时间:2021-06-25
使用JSTL对表示URL路径(不是请求参数)的字符串进行URL编码的最佳方法是什么? c:url value="/user/${user.name}"/ 根据any documentation I find,这应该照顾它。但它不。它精美地编码参数( c:url val
使用JSTL对表示URL路径(不是请求参数)的字符串进行URL编码的最佳方法是什么?

<c:url value="/user/${user.name}"/>

根据any documentation I find,这应该照顾它。但它不。它精美地编码参数(< c:url value =“/ user / $ {user.name}”>< c:param name =“section”value =“employment 4u so good”/>< / c :url>)但我不传递任何参数。如何安全地编码一个简单的URL,像上面,不用担心$ {user.name}是什么?

< c:url>不会对其值中指定的URI进行编码,而只会对嵌套的< c:param>指定的网址请求参数进行编码。您链接的IBM文章也没有另外说明。我认为你把它与“URL重写”(这本质上只是在必要时附加jsessionid)混淆。

要实现您的要求,最好是创建一个自定义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", "~");
}

在this answer的第二部分,你可以找到一个基本的启动示例如何声明和注册自定义EL函数。

网友评论