繁体   English   中英

使用Resin和Grails时引发UnsupportedEncodingException

[英]UnsupportedEncodingException thrown when using Resin and Grails

我在Grails下运行的Grails Web应用程序中遇到了一个奇怪的问题:

由于各种未知的编码字符串(例如"ISO8859_10""ISO-8859-10" ),经常会引发java.io.UnsupportedEncodingException ,奇怪的是,这完全是在Resin and Grails代码中完成的。 即-引发异常时不涉及自定义代码。

我不确定应该处理该异常的是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容器(Resin)还是Web框架(Grails)负责?
  • 您将如何解决这个问题? (我宁愿不要让异常日志混乱不堪,而我却无能为力。)

我对Grails不太了解,但是也许您可以尝试找出这种奇怪的编码来自何处。

您的请求是否发送Accept-Charset标头? 如果将resin.conf中的“ file.encoding”系统属性设置为有意义的东西(例如UTF-8),效果会更好吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM