徹底解決Tomcat 5.0.19中文亂碼(過濾器)

發表于:2007-07-01來源:作者:點擊數: 標簽:
一、Include的頁面亂碼 現象: include進來的頁面出現亂碼,其它頁面正常。 原因: Tomcat 在缺省情況下使用ISO-8859-1編碼,但是在include時有時Tomcat不能正確根據外層.jsp文件的編碼解析include進來的文件,造成include進來的文件中的中文亂碼。 解決:

  一、Include的頁面亂碼

  現象:include進來的頁面出現亂碼,其它頁面正常。

  原因:Tomcat在缺省情況下使用ISO-8859-1編碼,但是在include時有時Tomcat不能正確根據外層.jsp文件的編碼解析include進來的文件,造成include進來的文件中的中文亂碼。

  解決:這兒可以有很多解決辦法,但是對于我們的中文環境,從根本上的解決辦法是將Tomcat 5.0.19的核心缺省編碼從ISO-8859-1修改為GBK ??梢栽谙旅娴刂?STRONG>下載修改過的jar文件,

  jasper-compiler.jar,jasper-runtime.jar位于/common/lib下,其它位于/server/lib下,將新的.jar文件替代原.jar即可。
  
  二、提交的數據亂碼

  現象:通過表單提交的數據出現亂碼。

  原因:原因未明??赡苁荰omcat在接收到請求后,并沒有能夠根據request中的信息提前正確的編碼方式。

  解決:可以添加一個設置字符集的Filter。

//=================初學者注意,請將此文件放在WEB-INF\classes\filters下,
//注意先以SetCharacterEncodingFilter.java保存,然后編譯一下,推薦使用eclipse
package myAddrBook;
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;

/**
 * @author Administrator
 *
 * TODO 要更改此生成的類型注釋的模板,請轉至
 * 窗口 - 首選項 - Java - 代碼樣式 - 代碼模板
 */
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下。
//我的QQ:22070699
//配置web.xml

<!--  Set Character Encoding-->
   
    <filter>
  <filter-name>Set Character Encoding</filter-name>
  <filter-class>myAddrBook.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>
 
    <!--   Set Character Encoding-->

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97