读书人

彻底解决Tomcat 五[1].0.19中文乱码

发布时间: 2012-09-19 13:43:54 作者: rapoo

彻底解决Tomcat 5[1].0.19中文乱码

一、Include的页面乱码
  现象:include进来的页面出现乱码,其它页面正常。
  原因:Tomcat在缺省情况下使用ISO-8859-1编码,但是在include时有时Tomcat不能正确根据外层.jsp文件的编码解析include进来的文件,造成include进来的文件中的中文乱码。
  解决:这儿可以有很多解决办法,但是对于我们的中文环境,从根本上的解决办法是将Tomcat 5.0.19的核心缺省编码从ISO-8859-1修改为GBK 。可以在下面地址下载修改过的jar文件,
  jasper-compiler.jar,jasper-runtime.jar位于/common/lib下,其它位于/server/lib下,将新的.jar文件替代原.jar即可。  
  二、提交的数据乱码
  现象:通过表单提交的数据出现乱码。
  原因:原因未明。可能是Tomcat在接收到请求后,并没有能够根据request中的信息提前正确的编码方式。
  解决:可以添加一个设置字符集的Filter。
//=================初学者注意,请将此文件放在WEB-INF\classes\filters下,
//注意先以SetCharacterEncodingFilter.java保存,然后编译一下,推荐使用eclipse

?

?

package filters;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.UnavailableException;public class SetCharacterEncodingFilter implements Filter { protected String encoding = null; protected FilterConfig filterConfig = null; protected boolean ignore = true; public void destroy() {  this.encoding = null;  this.filterConfig = null; }public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain)throws IOException, ServletException { // Conditionally select and set the character encoding to be used if (ignore || (request.getCharacterEncoding() == null)) {  String encoding = selectEncoding(request);  if (encoding != null)   request.setCharacterEncoding(encoding); } // Pass control on to the next filter chain.doFilter(request, response);}public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); String value = filterConfig.getInitParameter("ignore"); if (value == null)  this.ignore = true; else if (value.equalsIgnoreCase("true"))  this.ignore = true; else if (value.equalsIgnoreCase("yes"))  this.ignore = true; else  this.ignore = false;}protected String selectEncoding(ServletRequest request) { return (this.encoding);}} 
?


//==================这段代码是我在网上摘录的,因为不知到出处所以无法标明作者
//然后将下面<filter>开始的代码加入到web.xml中,它位于WEB-INF下。
//配置web.xml

<filter> <filter-name>Set Character Encoding</filter-name> <filter-class>filters.SetCharacterEncodingFilter</filter-class> <init-param>  <param-name>encoding</param-name>  <param-value>GBK</param-value> </init-param></filter><filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern></filter-mapping> 
?

?

读书人网 >软件架构设计

热点推荐