【问题标题】:UnsupportedEncodingException thrown when using Resin and Grails使用 Resin 和 Grails 时抛出 UnsupportedEncodingException
【发布时间】:2010-05-01 10:10:17
【问题描述】:

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

java.io.UnsupportedEncodingException 由于各种未知的编码字符串(例如"ISO8859_10""ISO-8859-10")而被频繁抛出,奇怪的是这完全是在 Resin 和 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)的责任?
  • 您将如何解决这个问题? (我不希望异常日志中充斥着我无能为力的异常。)

【问题讨论】:

    标签: java grails servlets spring-mvc resin


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-13
        • 1970-01-01
        • 2023-03-14
        • 2011-11-02
        • 2016-04-07
        相关资源
        最近更新 更多