我有使用m2eclipse + Jetty + eclipse本地开发的Java webapp,并且每晚部署到Tomcat。使用Jetty,当我向服务器发送AJAX帖子时,我得到UTF-8 error
。相同的代码在tomcat中运行良好。
在Jetty端,我可以看到所有的post参数,并且所有内容都会记录到日志文件中,但是会抛出运行时异常,说明编码无法识别。
我的网页全部编码为UTF-8,帖子中的标题为UTF-8。似乎Jetty或Eclipse中的某些东西不喜欢utf-8编码,我无法弄清楚它可能是什么。
有什么想法吗?
更新:
这是一个堆栈跟踪。
[Click] [error] java.io.UnsupportedEncodingException: UTF-8;org.eclipse.jetty.io.RuntimeIOException: java.io.UnsupportedEncodingException: UTF-8;
at org.eclipse.jetty.io.UncheckedPrintWriter.setError(UncheckedPrintWriter.java:107)
at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:280)
at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:295)
at org.apache.click.ClickServlet.handleAjaxException(ClickServlet.java:1972)
at org.apache.click.ClickServlet.handleException(ClickServlet.java:458)
at org.apache.click.ClickServlet.handleRequest(ClickServlet.java:390)
at org.apache.click.ClickServlet.doPost(ClickServlet.java:294)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:533)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:475)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:514)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:920)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:403)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:184)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:856)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:247)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:151)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:114)
at org.eclipse.jetty.server.Server.handle(Server.java:352)
at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596)
at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1066)
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:805)
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218)
at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:510)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.access$000(SelectChannelEndPoint.java:34)
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:450)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.io.UnsupportedEncodingException: UTF-8;
at sun.nio.cs.StreamEncoder.forOutputStreamWriter(StreamEncoder.java:42)
at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:83)
at org.eclipse.jetty.server.HttpWriter.getConverter(HttpWriter.java:268)
at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:125)
at org.eclipse.jetty.server.HttpWriter.write(HttpWriter.java:107)
at org.eclipse.jetty.io.UncheckedPrintWriter.write(UncheckedPrintWriter.java:271)
... 31 more
答案 0 :(得分:2)
java.io.UnsupportedEncodingException: UTF-8;
那个分号是可疑的。它不是正常错误消息/跟踪的一部分。
确定您或Ajax未将Content-Type
设置为text/html;charset=UTF-8;
或其他内容?使用像Firebug这样的HTTP请求跟踪器来确定。我认为这是Jetty中另一个丑陋的bug。显然,标题中并不期望有两个以上的属性。如果你喜欢Jetty,report它给Jetty家伙。
答案 1 :(得分:0)
我找到了问题的答案。我使用的是apache click框架,最近从2.2.0升级到2.3.0-RC1。版本2.3.0-RC1中引入了一个错误,该错误导致在AJAX请求上发送重复的contentType标头。 Tomcat能够优雅地处理错误构造的标题,Jetty不是。
我最终通过覆盖问题函数来应用临时补丁。