Подтвердить что ты не робот

Как закодировать строку, представляющую URL-путь, с помощью JSTL?

Каков наилучший способ URL-кодирования строки, представляющей URL-путь (не параметр запроса) с помощью JSTL?

<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} может быть?

4b9b3361

Ответ 1

<c:url> не кодирует URI, как указано в его значении, а только параметры URL-адреса, которые задаются вложенным <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", "~");
}

Во второй части этот ответ вы можете найти пример базового запуска, как объявить и зарегистрировать пользовательские функции EL.

Ответ 2

Я уверен, что вы уже знали, что это альтернативное решение, но я решил, что для моего конкретного использования самым элегантным решением было использование атрибута запроса.

Итак, в моем сервлете:

req.setAttribute("myUrl", URLEncoder.encode(myUrl, "UTF-8"));

и в моем JSP:

"...${myUrl}"

Ответ 3

вы можете использовать джагарта String TagLib, которая имеет тег encodeUrl: http://jakarta.apache.org/taglibs/doc/string-doc/string-1.1.0/index.html#encodeUrl

Выполните следующие шаги, чтобы настроить веб-приложение с помощью этой библиотеки тегов:

  • Скопируйте файл дескриптора библиотеки тегов в подкаталог /WEB -INF вашего веб-приложения.
  • Скопируйте файл JAR библиотеки тегов в подкаталог /WEB -INF/lib вашего веб-приложения.
  • Добавьте элемент в дескриптор развертывания вашего веб-приложения в /WEB -INF/web.xml, как сказано в приведенной выше ссылке.

Чтобы использовать теги из этой библиотеки на ваших страницах JSP, добавьте следующую директиву вверху каждой страницы:

Ниже приведен пример использования в jsp:
<a href="str:decodeUrl>${URL}</str:decodeUrl)"/>

Ответ 4

Держите его простым:

<%= java.net.URLEncoder.encode(request.getAttribute("user.name").toString() , "UTF-8") %>