java servlets utf-8 character-encoding glassfish

java - JSP/GlassFish: cómo configurar la codificación UTF-8 correctamente



servlets character-encoding (1)

Estoy buscando ayuda para obtener todas mis capas en la pila de codificación UTF-8.

Encontré este lindo artículo:

http://www.javapractices.com/topic/TopicAction.do?Id=206

describiendo los 3 lugares que necesito preocuparme por la codificación. Dado que mi (1) base de datos Oracle está configurada actualmente en UTF-8, eso deja al (2) navegador y (3) servidor de los que preocuparse.

También encontré este artículo detallado

http://balusc.blogspot.com/2009/05/unicode-how-to-get-characters-right.html#JSPServletRequest

lo cual intento seguir a continuación, pero con algunas preguntas nuevas sobre la implementación.

Para abordar el navegador, me aseguré de incluir lo siguiente en la parte superior de cada página JSP:

<%@page pageEncoding="UTF-8"%>

(Para referencia, ver aquí ).

Para dirigirme al servidor, me aseguré de incluir la siguiente línea en el servlet de Java y las páginas JSP antes de emitir una declaración request.getParameter() o request.getAttribute() :

request.setCharacterEncoding("UTF-8");

Dado que estoy usando GlassFish 3.1.2, entiendo que no usa UTF-8 de forma predeterminada, así que tengo que configurarlo manualmente de alguna manera.

He visto muchos sitios web que hablan de un archivo llamado glassfish-web.xml . ¿Esta parte de la instalación normal de Glassfish? No sé dónde encontrarlo. He estado usando el archivo web.xml en mi carpeta WEB-INF para mi aplicación web. ¿Podría alguien ayudarme a determinar si necesito modificar este archivo web.xml , o necesito ubicar o crear un nuevo archivo llamado glassfish-web.xml , para configurar la codificación de glassfish?

Mi archivo web.xml comienza con:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> ...

Para la solicitud JSP / servlet, incluyo la siguiente línea en el archivo web.xml

<parameter-encoding default-charset="UTF-8"/>

¿Está bien ponerlo en el archivo web.xml ? O, ¿necesita ir en algún archivo glassfish-web.xml ?

Para la respuesta JSP / servlet, pongo lo siguiente en mi archivo web.xml (vea la respuesta aceptada aquí ):

<jsp-config> <jsp-property-group> <url-pattern>*.jsp</url-pattern> <page-encoding>UTF-8</page-encoding> </jsp-property-group> </jsp-config>

Supongo que estas líneas solo se insertan entre <web-app> y </web-app> . Pero, avíseme si deberían ir dentro de otro descriptor (como <glassfish-web-app> y </glassfish-web-app> )?

También puse lo siguiente en la sección JSP <head> :

<meta http-equiv="content-type" content="text/html; charset=utf-8">

Referencias útiles:

Cómo deshacerse de WARNING: PWC4011: no se puede establecer la codificación de caracteres de solicitud en UTF-8

https://stackoverflow.com/tags/servlet-filters/info

https://wikis.oracle.com/display/GlassFish/FaqHttpRequestParameterEncoding


glassfish-web.xml es un archivo que puede crear en su carpeta WEB-INF . Para Glassfish 3.x tiene que parecerse a esto:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd"> <glassfish-web-app> <jsp-config> </jsp-config> <parameter-encoding default-charset="UTF-8" /> </glassfish-web-app>

Y tiene razón, la configuración de codificación de parámetros debe estar en este archivo y no en el archivo web.xml :)

Ver también: