【发布时间】:2009-02-09 12:48:03
【问题描述】:
我正在使用 Jetty 测试我们拥有的 Web 服务,我试图让它在内容类型标题下没有字符集的情况下响应。
有人知道怎么做吗?
我已经尝试拦截响应并将 CharacterEncoding 设置为 null 或 "" 但这会产生异常。
我正在使用 Jetty 6.1.6。
【问题讨论】:
标签: java jetty response character-encoding
我正在使用 Jetty 测试我们拥有的 Web 服务,我试图让它在内容类型标题下没有字符集的情况下响应。
有人知道怎么做吗?
我已经尝试拦截响应并将 CharacterEncoding 设置为 null 或 "" 但这会产生异常。
我正在使用 Jetty 6.1.6。
【问题讨论】:
标签: java jetty response character-encoding
我认为这与您使用哪个 servlet 容器无关,而是您如何处理 servlet 中的响应。如果您通过使用参数null 或"" 调用ServletResponse 的setContentType (2.3) 或setCharacterEncoding (2.4, 2.5) 来设置字符编码,它应该可以工作(我自己没试过)。但一定要在调用getWriter之前调用上面提到的方法,否则设置编码will have no effect!
【讨论】:
我现在亲自尝试过,但我必须承认,我的码头是一个非常古老的码头(4.2.,但可以按照我需要的方式进行所有操作)。我将它与 tomcat(4.1.29,也很旧)进行了比较。我使用以下代码检查了内容类型:
URL tomcatUrl = new URL("http://localhost:18080/ppi/jobperform/headertest")//tomcat;
URLConnection tconnect = tomcatUrl.openConnection();
System.out.println("tomcat: " + tconnect.getContentType());
URL jettyUrl = new URL("http://localhost:13818/ppi/jobperform/headertest")//jetty;
URLConnection jconnect = jettyUrl.openConnection();
System.out.println("jetty: " + jconnect.getContentType());
结果如下:
Servlet 代码:
response.setContentType("");
response.getWriter().write("Return");
=>
tomcat: ;charset=ISO-8859-1
码头:
Servlet 代码:
response.setContentType("text/plain");
response.getWriter().write("Return");
=>
tomcat: text/plain;charset=ISO-8859-1
码头:文本/普通
Servlet 代码:
response.setContentType("text/plain;charset=UTF-8");
response.getWriter().write("Return");
=>
tomcat: text/plain;charset=UTF-8
码头:text/plain;charset=UTF-8
所以看起来旧码头完全按照您的意愿行事,而 tomcat 则按照您从新码头得到的。
【讨论】:
字符集是非常有用的信息。 与其试图强迫一个好的产品(Jetty)做错事,我更愿意教服务的消费者做正确的事(识别和尊重字符集)。
【讨论】: