为Java Web应用程序

时间:2017-02-21 10:35:45

标签: java jsp utf-8 character-encoding tomcat7

奇怪的情况在这里。

我有一个支持UTF-8字符的Java Web应用程序。即他们显示并可以在应用程序中输入

我还有另一个应用程序访问上一个应用程序,如下面的基本代码段

final URL urlObject = new URL("someurlyadayada");
final URLConnection connection = urlObject.openConnection(); 
...
....
connection.connect(); 
final InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is,"UTF8");
final OutputStream out = new FileOutputStream(new File(somelocalfile));
OutputStreamWriter osw = new OutputStreamWriter(out,"UTF8");

int read = 0;

while ((read = isr.read()) != -1) {
    osw.write(read);
    }
....

当在浏览器中查看给定页面时,所有内容都会呈现精细的UTF-8字符。但是当使用上面的代码片段被破坏时,要么以 ??????? 或只是错误的字符返回。

到目前为止,我所尝试的是在输入/输出流编写器上以及应用程序中的请求和响应对象上将编码设置为UTF-8。

这部分适用于给定具有以下行的JPS

Прочтено Прочтено,Прочтено,
<%=someJavaMethodWhichReturnsTheAboveLineAlso()%>

在浏览器中,这可以很好地呈现:

  

ПрочтеноПрочтено,Прочтено,

     

ПрочтеноПрочтено,Прочтено,

但是使用页面解析器将返回

  

- - - - - - - - - - - - - - - - - - -      

ПрочтеноПрочтено,Прочтено,

如果我在我的所有页面JSP之上设置contentType="text/html;charset=UTF-8"它修复了这两个问题,但是高层人员告诉我,更新100个JSP是不可能的。

我也得到的印象是我应该能够设置一次并将其用作默认值。

这里的最佳做法是什么。关于在JSP上设置内容,我有两种想法。不确定这样做是否错误,或者我们从来没有做过错误。

我已经很好地了解了解决方案并取得了不同的成功

1 个答案:

答案 0 :(得分:0)

您可以在web.xml文件中为所有JSP配置默认字符编码,这是全局完成的

public class CharsetFilter
  implements Filter {

  String encoding = "UTF-8";

  public void destroy() {
    /* Do nothing */
  }

  public void doFilter(ServletRequest request,
         ServletResponse response,
         FilterChain chain) throws IOException, ServletException {

    response.setCharacterEncoding(encoding);
    chain.doFilter(request, response);        
  }

  public void init(FilterConfig config) throws ServletException {       
  }
}

你还可以做的是创建一个过滤器来设置响应字符编码(最终是内容类型),如下所示:(在示例下面进行字符编码)

<filter>
    <filter-name>
        charsetFilter
    </filter-name>
    <filter-class>
        your.filter.package.CharsetFilter
    </filter-class>        
</filter>                                         

<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

然后在web.xml文件中定义过滤器

$ sudo service docker status

请注意,我将过滤器应用于使用任何Web应用资源的/ *。如果您希望过滤器影响每个Web资源,这可能很方便

希望你能解决这个问题