Salve galera!
Depois de muitas noites sem dormir, achamos uma solução pra esse problema chato de UTF-8.
Aqui na empresa, migramos do servidor Tomcat para o Jetty, inclusive escrevi aqui de
como instalá-lo como serviço de Windows.
Bom, ao migrarmos para o Jetty, tivemos alguns probleminhas, e um deles foi esse erro:
HTTP ERROR 500
Problem accessing /ProdutoBoB/Equipamento/salvar.action. Reason:
!UTF-8
Caused by:
org.eclipse.jetty.util.Utf8Appendable$NotUtf8Exception: !UTF-8
at org.eclipse.jetty.util.Utf8Appendable.appendByte(Utf8Appendable.java:73)
at org.eclipse.jetty.util.Utf8Appendable.append(Utf8Appendable.java:23)
at org.eclipse.jetty.util.UrlEncoded.decodeUtf8To(UrlEncoded.java:470)
at org.eclipse.jetty.util.UrlEncoded.decodeTo(UrlEncoded.java:521)
at org.eclipse.jetty.server.Request.extractParameters(Request.java:259)
at org.eclipse.jetty.server.Request.getParameter(Request.java:662)
at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:11
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1326)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:479)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:520)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:940)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:409)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:874)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:110)
at org.eclipse.jetty.server.Server.handle(Server.java:349)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:441)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:921)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:784)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:223)
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:46)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:545)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:43)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:59
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:533)
at java.lang.Thread.run(Unknown Source)
Powered by Jetty://
Esse é um problema que ocorre por que em meu form, foi inserido em um campo algum caracter do tipo ISO-8859-1 e o Jetty é por default configurado em UTF-8. Tentei mudar essa configuração de várias maneiras, mas todas sem sucesso. Esse erro persistiu bastante, e posso dizer que durante um bom tempo fiquei horrorizado com ele....
Mas, como também somos persistentes, achamos como arrumá-lo e ser feliz!
A nossa primeira tentativa, foi o meu grande companheiro de trabalho Ricardo Yudi (PROGRAMADOR ARRETADO!!!) que descobriu um jeito de arrumar esse erro. Ele descobriu que havia um bug no IE (Internet Explorer) e que com o procedimento abaixo resolve os nossos problemas. Como fazer isso?
Simples, é só seguir a descrição abaixo:
Setar o atributo do formulário com accept-charset="'UTF-8,ISO-8859-1"
Criar os campos :
<input type="hidden" value="™" name="bugIE">
E com isso, uma boa parte de nossos problemas resolveram.
Infelizmente, como eu disse, uma parte apenas se resolveu....
O tão temido erro Utf8Appendable apareceu novamente para azucrinar os meus neurônios....
E depois de estudar e pesquisar muito, (Santo Google!!!) , achei mais alguns ajustes para que ficasse tudo em perfeita harmonia!
Para configurá-lo, siga os passos abaixo:
Bom, antes de mais nada, precisamos começar pela meta tag.
<meta http-equiv=
"Content-Type" content="
text/html; charset=UTF-8" />
No form, temos que setar o atributo accept-charset que meu grande companheiro Ricardo ensinou.
<s:form id="fr_principal" name="name" namespace="/NomedoSeuNameSpace" action="nomeDaAction" acceptcharset="UTF-8">
E claro, não esquecer de colocar o input:
<input type="hidden" value="™" name="bugIE">
Com essa configuração, as suas páginas podem ter caracteres especiais, e não terão mais o problema de UTF-8Appendable.
Fica aí mais uma dica para esse maravilhoso servidor.
Espero que ajude você, que estava passando pelo mesmo problema!
Um grande abraço;
Daniel Hideki...