最近一个项目因为要使用到servlet3.0的一些新特性(最主要的是对异步的支持,以及部分对websocket的支持),考察了目前最新的两个容器:Tomcat7和Jetty8,当前只有Jetty支持的比较好,Tomcat7暂时支持不够充分,所以把项目迁移到Jetty8中来了,所使用的版本是Jetty8.14(features:Standardized async;status:Development;),但是随之而来的是原项目中的所有中文字符在页面上显示的时候全部变成了乱码,惨不忍睹啊,所以不得不去找资料修复。
google了半天,没找到解决方案,后来经过很多实验(什么改xml的encoding的都做了,都不行)。本来我的项目中所有的页面和JS代码全部是使用UTF-8进行编码,spring中也指定了编码过滤器为UTF-8,UTF-8是万国码,应该是什么语言都支持显示,在tomcat里中文都是正常的,但是使用jetty在firefox中观察页面的时候,浏览器会自动把字符编码设置的为“简体中文(GB2312)”,我手动把浏览器的字符编码设置为“Unicode(UTF-8)”后页面上的中文就能正常显示了,我估计问题就在这个浏览器的编码被错误导向了,于是去修改Jetty关于编码的配置文件,经过一番尝试终于成功了,最关键的一步是修改:
jetty_home/lib/jetty-webapp-8.1.4.v20120524.jar中webdefault.xml,把zh所指向的编码更改为UTF-8,保存更新就行了。在jetty/etc/下面也有个webdefualt.xml文档,不过修改这个文档不起作用。
<locale-encoding-mapping> <locale>zh</locale> <encoding>UTF-8</encoding> <locale-encoding-mapping>
此时redeploy项目,重启jetty之后,就会发现浏览器的编码自动设置为了"Unicode(UTF-8)",中文显示正常了;
===========================================
另附说明,如果要使用servlet3.0的新特性,需要以下步骤:
1.JDK1.6以上,设置编译器级别为1.6或者6.0;
2.web.xml中要更新名字空间和版本到3.0;
3.导入servlet3.0的新jar包(如果你的容器自带3.0的jar包的话,可以省略本步);
4.如果想要特定的servlet支持异步,可以在xml中使用true标签作为该类的初始化参数,当然你也可以在类中使用注解实现,不过我没有研究过,呵呵。
===========================================
Jetty使用过程中常见错误:
一、空指针异常:
java.lang.NullPointerException at sun.net.www.protocol.jar.JarURLConnection.getUseCaches(JarURLConnection.java:309)
可以通过在etc/jetty.xml中添加
<Set class="org.eclipse.jetty.util.resource.Resource" name="defaultUseCaches">false</Set>
出处:http://stackoverflow.com/questions/7715985/jsf2-on-jetty-gives-randomly-zip-file-closed-but-works-when-running-from-maven
===========================================
二、"zip file closed"的错误:
将jetty_home/lib/jetty-webapp-8.1.4.v20120524.jar中webdefault.xml中gzip的value由true(默认)改为false,就不会再出现该错误了。
<init-param> <param-name>gzip</param-name> <param-value>false</param-value> </init-param>
按上述办法处理,只是治标不治本;原本启用Gzip是为了实现http传输压缩,提供网站的访问效率,如果需要实现改功能的话,建议还是设置gzip为true;在true的情况下,需要在web.xml中配置gzip的过滤器:
<filter> <filter-name>jettyGzipFilter</filter-name> <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class> <init-param> <param-name>mimeTypes</param-name> <param-value>text/javascript,application/x-javascript,text/html,text/css,image/gif,image/png,image/jpg</param-value> </init-param> </filter> <filter-mapping> <filter-name>jettyGzipFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
jettyGzipFilter的已经包含在jetty-servlets-8.1.4.v20120716.jar中,如果进行了上述配置,还是有zip file closed的话,查看jetty的版本,如果在8及其以下的版本中,在etc/jetty.xml的文档最下面,添加上:
<Set class="org.eclipse.jetty.util.resource.Resource" name="defaultUseCaches">false</Set>
这个东西本来是jetty7.6版本中出现的一个BUG,在官方的BUG report中有提到,加上上面的配置后就不会再出现错误了。
进行了该设置后,大家可以在http://tool.chinaz.com/Gzips/ 上检测自己的网站是否启用了Gzip压缩传输。
===========================================
三、有些同学不会启动Jetty,囧啊:
windows下面使用cmd的cd命令,进入到jetty的安装目录下面,直接打java -jar start.jar就可以启动了。。Linux下面就更简单。操作一样的。。
===========================================
四、在Myeclipse下Jetty不能自动部署web工程的问题:
这是因为Jetty默认是考虑使用缓存文件以提供访问效率和稳定性来考虑的,如果是开发测试的话,可以修改掉Jetty的该项配置(webdefault.xml):默认为true,修改为false,就可以自动部署了。
<init-param> <param-name>useFileMappedBuffer</param-name> <param-value>false</param-value> </init-param>
===========================================
还有最近看了新版本的Tomcat,其也已经加入了对异步和websocket的支持,如果您对tomcat使用比较熟悉的话,其实可以考虑使用最新版本的tomcat也可以的
相关推荐
在使用EL(Expression Language)表达式处理中文字符时,可能会遇到中文显示乱码的问题,这通常是由于字符编码不一致导致的。以下是一些详细的解决步骤和相关知识点: 1. **理解字符编码**: - 字符编码是用来表示...
通过修改Tomcat配置文件中的`URIEncoding`属性以及在Servlet中通过`response.setContentType()`和`request.setCharacterEncoding()`方法来设置字符编码,可以有效解决中文乱码问题。此外,还可以通过字符集转换的...
"工作流乱码解决方案"这个主题就针对Activiti5在处理中文或其他非ASCII字符时可能出现的显示异常进行探讨。 Activiti5是一个开源的工作流和业务流程管理平台,它基于Java,支持BPMN 2.0标准,为企业提供了一套强大...
本篇文章将深入探讨如何解决Servlet中的中文乱码问题,以及如何在GBK、UTF-8和ISO-8859-1之间做出合理的选择。 首先,我们需要了解字符编码的基本概念。GBK是中国大陆广泛使用的中文字符集,包含了大部分中文字符;...
总结一下,SmartUpload的中文乱码问题主要是由于字符编码不匹配导致的,通过设置正确的编码、处理文件名和调整服务器配置,可以有效地解决这一问题。同时,实现多文件上传则需要结合前端与后端的协同工作,确保文件...
通过上述方法,可以有效地解决JavaWeb开发中的中文乱码问题。最重要的是在整个项目中保持一致的字符编码设置,确保从用户输入到数据库存储再到页面展示的每一个环节都能使用相同的编码。此外,使用自定义过滤器来...
Struts是一个非常流行的Java Web应用程序框架,用于构建和管理MVC(模型-视图-控制...如果你的项目中仍然存在乱码问题,建议参考提供的“Struts中文乱码解决方案.doc”文档,它可能包含了更详细的排查步骤和解决方案。
- **优点**:以上方法针对性强,能解决特定场景下的乱码问题。 - **缺点**:可能需要对整个应用进行修改,增加代码复杂性,且不保证所有情况都能完全解决。 - **适用场合**:根据具体乱码出现的环节选择相应的...
以下是一些解决Java POST与GET数据传递时中文乱码问题的方法。 1. **POST数据传递**: 在接收POST数据的JSP页面中,我们需要确保两个关键点: - **声明页面字符集**:`<%@ page pageEncoding="UTF-8"%>` 这行...
以下是一些解决JS传值出现中文参数乱码的常用方法。 1. **使用`encodeURIComponent()`函数**: JavaScript的`encodeURIComponent()`函数可以对URL的一部分进行编码,它会将非字母数字字符转换为UTF-8序列,并用百...
这篇博文“JSF中文问题解决方法完整版”提供了关于如何处理JSF框架在处理中文字符时可能出现的问题的解决方案。JSF作为Java EE的一部分,常常用于企业级应用开发,但处理中文字符时可能会遇到编码不兼容、乱码等问题...
在这个"ajax+jsp+servlet 中文解决方法"的示例中,开发者遇到了在使用Ajax进行数据交互时中文乱码的问题。中文乱码通常是由字符编码不一致导致的,特别是在跨平台或跨浏览器通信时。以下是一些关于如何解决这个问题...
在"第十八章解决中文乱码"这个主题中,主要关注的是在JavaWeb应用中处理中文字符时可能出现的乱码问题。中文乱码是开发过程中常见的问题,尤其是在处理HTTP请求、响应或者存储文件时。这一章节将详细讲解以下几个...
在处理中文文件名上传的问题时,CKFinder可能遇到编码问题,导致中文文件名显示为乱码或者无法正常上传。这个问题通常源于服务器端的字符编码设置不正确,或者是CKFinder本身对中文字符集的支持不足。为了确保...
在Web应用中,由于编码不一致,中文字符可能会出现乱码,而通过自定义过滤器可以有效地解决这个问题。 首先,让我们了解过滤器的工作原理。在Java Web应用中,过滤器通过实现javax.servlet.Filter接口并重写其...
前言一.Intellij IDEA 初体验二.Intellij IDEA 基本...疑难杂症篇IDEA 常见错误解决办法控制台中文乱码java 文件 变成 ‘j’ 开头图标无法运行编译报错:找不到符号、未结束的字符串文字 等的解决办法光标变成块状,无
在Java EE的Web开发中,Servlet编码问题是一个常见的困扰,特别是在处理中文字符时。这个问题主要涉及到请求参数的编码、响应内容的编码以及文件上传等环节。以下是对这一主题的详细解释。 1. **请求参数编码**:当...
文档接下来讲解了IntelliJ IDEA的用户界面(UI),包括UI的主题、字体、编辑区主题以及如何修改文件编码来解决乱码问题。这些都是新用户上手时必须掌握的基本操作。 ### 文件与项目管理 指南还包括了如何管理项目中...
### Liferay 6.1 + CAS 初始化环境搭建及门户解决方案 #### 一、Liferay 6.1 门户介绍 **1.1 简单介绍** Liferay是一款功能强大的开源门户平台,它包含了完整的J2EE应用。该平台不仅支持Web、EJB和JMS等技术,还...
3. **中文乱码处理**:在处理包含中文字符的Web应用时,乱码问题是一个常见挑战。这可能发生在输入、传输、存储或显示数据时。解决方法包括设置正确的字符编码(如UTF-8),在HTTP头、HTML meta标签、Servlet配置、...