->

Character-Encoding bei Servlets auf UTF-8 ändern

Normalerweise sollte der Browser des Clients die Kodierung der Parameter mitschicken. Fehlt diese Angabe, nehmen einige Web-Server automatisch ISO-8859-1 an. Dies ist jedoch oft nicht erwünscht und kann zu Problemen führen. Möglicherweise werden Parameter nicht richtig interpretiert, da der Server die GET- und POST-Parameter falsch dekodiert. Um die Kodierung auf UTF-8 zu ändern, müssen nur wenige Änderungen vorgenommen werden.

HTML

Jede HTML-Seite sollte innerhalb des „head“-Tags diesen Eintrag haben:

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

Apache Tomcat

web.xml

Folgender Text muss sich in der Datei web.xml innerhalb des „webapp“-Tags befinden:

<filter>
    <filter-name>Parameter-Encoding</filter-name>
    <filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
	<param-name>encoding</param-name>
	<param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>Parameter-Encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Diese Angaben setzen einen UTF-8-Filter auf alle Servlets (Wildcard /*). Die verwendete Klasse org.apache.catalina.filters.SetCharacterEncodingFilter ist ab einer bestimmten Version (7.0.*) in Tomcat integriert.

server.xml

Schlussendlich muss die Kodierung noch in der Server-Konfiguration angegeben werden. Die Datei server.xml befindet sich im Ordner „conf“ des Server-Verzeichnisses.

<Connector port="8080" protocol="HTTP/1.1"
	   connectionTimeout="20000"
	   redirectPort="8443"
	   URIEncoding="UTF-8" />

Jetty

Bei Jetty, dem unter anderem im Google App Engine verwendeten Server, muss nur folgender Code in jedes Servlet eingebaut werden:

request.setCharacterEncoding("UTF-8");

request ist das vom Server an die Methoden doGet() und doPost() bzw. processRequest() übergebene HttpServletRequest-Objekt. Dieser Aufruf muss natürlich vor jeder Parameter-Abfrage geschehen. Am praktischsten erledigt man das mit einer gemeinsamen Basisklasse für alle Servlets, die diese Methode automatisch aufruft.