Magazine Internet

Encodage des flux en J2EE

Publié le 18 décembre 2007 par Spawnrider @spawnrider

Si il y a bien un problème récurant en développement, c’est celui de l’encodage des caractères. On attend avec impatience le support de l’unicode avec PHP 6.… En J2EE, il n’y à pas le choix, il faut coder des filtre, à moins que je sois passé à côté de la solution miracle.

Une solution avec un filtre de servlet fourni par Seb qui fonctionne pour n’importe quel encodage:

1°) Il faut écrire un filtre de servlet qui va réencoder le flux avant envoi au client :

Code (java)
  1. import java.io.IOException;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;
  2.  
  3. import javax.servlet.ServletResponse;
  4.  
  5. public class EncodingFilter implements javax.servlet.Filter {
  6.  
  7. private String encoding;
  8.  
  9. public void init(FilterConfig filterConfig) throws ServletException {
  10.  
  11. this.encoding = filterConfig.getInitParameter("encoding");
  12.  
  13. }
  14.  
  15. public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException,  ServletException {
  16.  
  17. request.setCharacterEncoding(encoding);
  18.  
  19. filterChain.doFilter(request, response);
  20.  
  21. }
  22.  
  23. public void destroy() {
  24.  
  25. }
  26.  
  27. }

2°) Il faut ensuite faire appel à ce filtre par l’intérmediaire d’un mapping dans le fichier web.xml comme suit :

Code (xml)
  1. <filter> <filter-name>Encoding Filter</filter-name>
  2.  
  3. <filter-class>EncodingFilter</filter-class>
  4.  
  5. <init-param>
  6.  
  7. <param-name>encoding</param-name>
  8.  
  9. <param-value>UTF-8</param-value>
  10.  
  11. </init-param>
  12.  
  13. </filter>
  14.  
  15. <filter-mapping>
  16.  
  17. <filter-name>Encoding Filter</filter-name>
  18.  
  19. <url-pattern>/*</url-pattern>
  20.  
  21. </filter-mapping>

Maintenant toutes les requêtes sont correctements lues avec l’encodage UTF-8.
Le filtre fonctionne tout autre encodage.

Une autre solution consiste à utiliser le servlet filter CharacterEncodingFilter dans le fichier web.xml afin de forcer l’encodage. Il est important de mettre ce filtre en premier dans la liste.

Code (xml)
  1. <web-app><filter>
  2.  
  3. <filter-name>encodingFilter</filter-name>
  4.  
  5. <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  6.  
  7. <init-param>
  8.  
  9. <param-name>encoding</param-name>
  10.  
  11. <param-value>UTF-8</param-value>
  12.  
  13. </init-param>
  14.  
  15. <init-param>
  16.  
  17. <param-name>forceEncoding</param-name>
  18.  
  19. <param-value>true</param-value>
  20.  
  21. </init-param>
  22.  
  23. </filter>
  24.  
  25. </web-app>

Voilà tout ! Pour ma part, j’ai utilisé la première solution qui à résolu pas mal de mes soucis au niveau des formulaires de saisies d’informations.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Spawnrider 1431 partages Voir son profil
Voir son blog

Dossiers Paperblog

Magazine