El problema suele ser que los navegadores no envian correctamente el encoding que usan en su request, ignorando que se lo pongas o no en el form o en la pàgina.
La solución habitual suele ser un ServletFilter que ponga explicitamente el encoding que toca a todas las peticiones que sabemos que lo tienen.
Tuve un problema parecido y lo resolví así, la discusión la puedes leer aquí, donde hay un enlace al código de un Servlet Filter para eso, por si no lo tienes ya hecho:
http://jroller.com/page/greeneyed?en...oding_problems