J'ai un problème avec UTF-8. Mon client (réalisé en GWT) faire une demande à mon servlet, avec quelques paramètres dans l'URL, comme suit:request.getQueryString() semble avoir besoin d'un codage
http://localhost:8080/servlet?param=value
Lorsque dans le servlet je récupère l'URL, j'ai un problème avec caractères UTF-8. J'utilise ce code:
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String reqUrl = request.getRequestURL().toString();
String queryString = request.getQueryString();
System.out.println("Request: "+reqUrl + "?" + queryString);
...
Donc, si j'appelle cette url:
http://localhost:8080/servlet?param=così
est comme le résultat ceci:
Request: http://localhost:8080/servlet?param=cos%C3%AC
Que puis-je faire pour mettre en place correctement la Encodage de caractère?
Le paramètre URIEncoding dans # 1 est dans server.xml de Tomcat. Les autres conteneurs de servlets doivent raisonnablement avoir le même type de réglage. – schematic
Pour # 2, vous ne pouvez plus utiliser la méthode request.getParameter(), car cette méthode récupère les paramètres qui ont été décodés de manière incorrecte. Vous devez prendre la chaîne de requête décodée (produite à partir de getQueryString()) et l'analyser manuellement (par exemple, diviser la chaîne par des esperluettes '&' puis diviser les chaînes résultantes par le premier signe égal '='). – schematic
J'ai rencontré un problème avec le paramètre server.xml. Sur les machines Windows, cela fonctionnait correctement, mais sur notre production, les machines basées sur Red Hat Tomcat semblaient ignorer le paramètre server.xml. Nous avons dû implémenter notre propre analyseur de paramètre de requête qui l'a explicitement décodé en utilisant UTF-8. – Herms