Ao utilizar o servidor
Apache Tomcat 6.0 [1] para o deploy de aplicações Web em Java utilizando o encoding
Unicode (UTF-8) [2] podemos enfrentar pequenos problemas quando existe entrada de dados pelo usuário.
Por exemplo, considere a aplicação a seguir que faz uso de um formulário para o cadastro de categorias de produtos:
A anomalia ocorre durante o processo de envio da requisição HTTP do tipo
POST [3]. Veja na imagem a seguir o problema na acentuação resultante do formulário:
Uma possível solução para este problema consiste na criação de um filtro, ou
Filter [4], um padrão de projeto da especificação Java EE. A função deste filtro é de interceptar as requisições HTTP e forçar a codificação de caracteres para a que for parametrizada (no exemplo, a UTF-8).
A primeira etapa envolve a criação de uma nova classe na aplicação, cujo nome será
EncodingFilter e a qual deverá implementar a
interface Filter [5] da especificação Java Servlet. Desta forma, o arquivo
EncodingFilter.java terá o seguinte conteúdo:
package com.hsiconsultoria.zabumba.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class EncodingFilter implements Filter {
private String encoding;
public void init(FilterConfig config) throws ServletException {
this.encoding = config.getInitParameter("encoding");
}
public void destroy() {
}
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
}
Em seguida é preciso indicar a existência desse novo filtro no arquivo
WEB-INF/web.xml, também conhecido como
Deployment Descriptor [6]. É neste arquivo que o filtro será devidamente configurado para interceptar as requisições HTTP na aplicação Web.
Sendo assim, basta incluir as linhas seguintes no arquivo
web.xml:
EncodingFilter
EncodingFilter
com.hsiconsultoria.zabumba.filter.EncodingFilter
filtro para codificação dos caracteres
encoding
UTF-8
EncodingFilter
/*
Para finalizar, é só salvar tudo e reinicializar o Tomcat. Veja na tela abaixo o resultado dessa alteração na aplicação:
Referências:[1]
Apache Tomcat 6.0[2]
Formato UTF-8[3]
HTTP/1.1 Method Definitions[4]
Intercepting Filter Pattern[5]
Interface Filter[6]
Java EE Deployment Descriptors