2010-05-01 37 views
0

,我遇到了一個Grails web應用程序一個奇怪的問題下的Grails運行時UnsupportedEncodingException拋出:使用樹脂和Grails

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)的責任?
  • 你會如何去解決這個問題? (我寧願沒有異常記錄雜亂無章的異常,我什麼都不能做。)

回答

2

我對Grails瞭解不多,但也許你可以嘗試找出這個奇怪的編碼來自哪裏。

您的請求是否發送Accept-Charset標題? 如果在resin.conf中將「file.encoding」系統屬性設置爲像UTF-8這樣的有意義的東西,那麼事情會更好嗎?

0

您還可以在應用程序上下文中設置一個localeResolver bean。 DispatcherServlet將使用它來解析區域設置。我沒有嘗試過,但我的建議是使用org.springframework.web.servlet.i18n.FixedLocaleResolver。如果您沒有設置,它將委託給Locale.getDefault()