在Grails下运行的Grails WebApp中,我遇到了一个奇怪的问题:

java.io.UnsupportedEncodingException 由于各种未知的编码字符串(例如 "ISO8859_10", "ISO-8859-10"),奇怪的是,这完全是在树脂和圣杯代码中完成的。也就是说 - 抛出异常时不涉及自定义代码。

我不确定是否是Grails或Servlet容器的代码应处理异常。但是我假设应该在某个地方处理例外,而不是一直到Stderr起泡。

这是一个完整的例外:

java.io.UnsupportedEncodingException: ISO-8859-10
  at com.caucho.vfs.i18n.JDKWriter$OutputStreamEncodingWriter.<init>(JDKWriter.java:112)
  at com.caucho.vfs.i18n.JDKWriter.create(JDKWriter.java:79)
  at com.caucho.vfs.Encoding.getWriteEncoding(Encoding.java:231)
  at com.caucho.server.connection.ToByteResponseStream.setEncoding(ToByteResponseStream.java:137)
  at com.caucho.server.connection.AbstractHttpResponse.setLocale(AbstractHttpResponse.java:1683)
  at com.caucho.server.connection.HttpServletResponseImpl.setLocale(HttpServletResponseImpl.java: 115)
  at javax.servlet.ServletResponseWrapper.setLocale(ServletResponseWrapper.java:139)
  at javax.servlet.ServletResponseWrapper.setLocale(ServletResponseWrapper.java:139)
  at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1035)
  at org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet.doDispatch(GrailsDispatcherServlet.java:290)
  at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)
  at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:647)
  at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:552)
  at javax.servlet.http.HttpServlet.service(HttpServlet.java:114)

我的问题:

  • 应该处理例外吗?如果是这样,这是Servlet容器(树脂)或Web框架(Grails)的责任吗?
  • 您将如何解决这个问题? (我宁愿没有例外的日志混乱,而我什么都不做。)
有帮助吗?

解决方案

我对圣杯了解不多,但是也许您可以尝试找出这种怪异编码的来源。

您的请求会发送Appcter-Charset标头吗?如果您将“文件编码”系统属性设置为“ file.soding”的系统属性,则事情会更好地工作。

其他提示

您也可以设置 localeResolver bean在您的应用程序上下文中。这 DispatcherServlet 将使用它来解决该地区。我没有自己尝试过,但是我的建议是使用 org.springframework.web.servlet.i18n.FixedLocaleResolver. 。它将委派给 Locale.getDefault() 如果您没有任何设置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top