taglibs tag img jsp jstl el uriencoding

jsp - tag - ¿Cómo codificar una cadena que representa la ruta URL con JSTL?



jstl url param (4)

Estoy seguro de que ya sabías que esta era una solución alternativa, pero decidí, para mi uso particular, que la solución más elegante era usar un atributo de solicitud.

Entonces en mi servlet:

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

y en mi JSP:

"...${myUrl}"

¿Cuál es la mejor forma de codificar URL una cadena que representa la ruta URL (no parámetro de solicitud) con JSTL?

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

De acuerdo con cualquier documentación que encuentre , esto debería ocuparse de ello. Pero no es así Codifica los parámetros maravillosamente ( <c:url value="/user/${user.name}"><c:param name="section" value="employment 4u so good"/></c:url> ) pero No estoy pasando ningún parámetro. ¿Cómo puedo codificar con seguridad una URL simple, como la anterior, sin temor a lo que podría ser ${user.name} ?


Mantenlo simple de esta manera:

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


puede usar el string TagLib de jakarta, que tiene una etiqueta encodeUrl: http://jakarta.apache.org/taglibs/doc/string-doc/string-1.1.0/index.html#encodeUrl

Siga estos pasos para configurar su aplicación web con esta biblioteca de etiquetas:

  1. Copie el archivo descriptor de la biblioteca de etiquetas en el subdirectorio / WEB-INF de su aplicación web.
  2. Copie el archivo JAR de la biblioteca de etiquetas en el subdirectorio / WEB-INF / lib de su aplicación web.
  3. Agregue un elemento al descriptor de despliegue de su aplicación web en /WEB-INF/web.xml como se indica en el enlace anterior

Para usar las etiquetas de esta biblioteca en sus páginas JSP, agregue la siguiente directiva en la parte superior de cada página:

a continuación está el ejemplo de uso en jsp:

<a href="str:decodeUrl>${URL}</str:decodeUrl)"/>


<c:url> no codifica el URI como se especifica en su valor, sino solo los parámetros de solicitud de URL que se especifican mediante un <c:param> anidado. El artículo de IBM que vinculó tampoco dice lo contrario. Creo que lo confundiste con "reescritura de URL" (que en esencia no es más que anexar el jsessionid siempre que sea necesario).

Para lograr su requisito, lo mejor es crear una función EL personalizada que delegue a URLEncoder#encode() y URLEncoder#encode() reglas URI de conformidad de resultados.

<a href="/user/${util:encodeURI(user.name)}">view profile</a>

con

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", "~"); }

En la segunda parte de esta respuesta , puede encontrar un ejemplo básico de inicio de clases sobre cómo declarar y registrar funciones EL personalizadas.