Kodowanie UTF-8 w aplikacji opartej o Struts, Hibernate i MySQL

Krok 1: Baza danych.

Należy upewnić się, że baza jest tworzona w UTF-8 (są do tego odpowiednie polecenia).

Krok 2: Połączenie Hibernate:

Należy dołączyć do połączeniowego URL informacje o kodowaniu oraz opcję autoReconnect, np (należy pamiętać, że należy koniecznie używać encji, czyli np. & zamiast '&'):

<property name="hibernate.connection.url">
jdbc:mysql://localhost/JEEGroupware?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8
</property>

Gdzie JEEGroupware to nazwa bazy danych.

Krok 3: konfiguracja aplikacji:

należy dodać informacje o kodowaniu do pliku Web.xml aplikacji:

<web-app>
    ...
    ...
    ...
    <context-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
        <description>default input encoding</description>
    </context-param>

W tym samym miejscu należy dodać filtrowanie w oparciu o klasę filtra, którą także należy zaimplementować:

<web-app>
    ...
    ...
    ...
 
    <filter>
        <filter-name>UTF8Filter</filter-name>
        <filter-class>nazwa.pakietu.UTF8Filter</filter-class>
    </filter>
 
    <filter-mapping>
        <filter-name>UTF8Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

Kod klasy UTF8Filter:

package nazwa.pakietu;
 
import java.io.IOException;
import javax.servlet.*;
 
public class UTF8Filter implements Filter {
 
    public void destroy() {
        //EMPTY BODY
    }
 
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        request.setCharacterEncoding("UTF8");
        chain.doFilter(request, response);
    }
 
    public void init(FilterConfig filterConfig) throws ServletException {
        //EMPTY BODY
    }
}

Krok 4: Strony JSP.

Na każdej stronie (nawet stronach częściowych włączanych przez tiles) powinna się znaleźć deklaracja:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

(Nie jestem pewien, czy to wciąż jest konieczne po ustawieniu parametru encoding w Web.xml).

UWAGA: informacje zawarte w tym poradniku są zaczerpnięte z różnych źródeł, których autorów nawet nie pamiętam, więc zawartość tej strony nie jest dostępna w oparciu o licencję Creative Commons. Jeśli ktoś jest autorem któregoś z poniższych przpisów i czuje, że jego prawa autorskie zostały naruszone, proszę o kontakt.

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-Share Alike 2.5 License.