Soweit mir bekannt (und bei mir zu umfassendem Erfolg führend) gibt es drei Einstellungen, die man beachten muss, um seiner in Tomcat laufende Anwendung UTF-8 beizubringen.
1) Tomcat sollte die URL (und damit u.a. GET-Parameter) als UTF-8 kodieren. Dies wird über das URIEncoding Attribut des Connector Elements in der server.xml eingestellt.
<connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
2) Das richtige Encoding der Request (und damit unter anderem der POST Daten eines Forms) wird mit einem CharacterEncodingFilter in der web.xml sichergestellt. Dieser sollte als einer der ersten Filter eingerichtet werden (das filter-mapping Element des charsetFilter also im Deployment Descriptor vor den anderen Mappings stehen).
<filter> <filtername>charsetFilter</filtername> <filterclass>org.springframework.web.filter.CharacterEncodingFilter</filterclass> <initparam> <paramname>encoding</paramname> <paramvalue>UTF-8</paramvalue> </initparam> <initparam> <paramname>forceEncoding</paramname> <paramvalue>true</paramvalue> </initparam> <filtermapping> <filtername>charsetFilter</filtername> <urlpattern>/*</urlpattern> </filtermapping> </filter>
3) Um schon von vornherein allen Beteiligten (z.B. dem Browser) die Möglichkeit zu geben, die richtige Kodierung zu benutzen, sollte in den ausgelieferten HTML Seiten das verwendete CharacterEncoding vermerkt sein. Dies geschieht in JSPs so:
< %@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>und endet in der HTML Seite so:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Damit sollte nun alles auf UTF-8 eingerichtet und auf UTF-8 gefasst sein, damit zum Beispiel Umlaute und sonstige Zeichen korrekt dargestellt und verarbeitet werden können.