1. 程式人生 > >通過Servlet插入資料庫的中文資料亂碼解決

通過Servlet插入資料庫的中文資料亂碼解決

1.亂碼原因

亂碼的原因: 當使用表單進行Post方式提交後接收到的亂碼問題。 這個問題也是一個常見的問題。這個亂碼也是tomcat的內部編碼格式ISO8859-1在搗亂,也就是說post提交時,如果沒有設定提交的編碼格式,則會以ISO8859-1方式進行提交,接受的jsp卻以UTF-8的方式接受。導致亂碼。

2.解決方法

2-1 接受引數時進行編碼轉換 String s = new String(request.getParameter(“something”).getBytes(“ISO-8859-1”),”UTF-8”);這樣的話,每一個引數都必須這樣進行轉碼,因為要執行對每一個引數的轉碼,比較麻煩,可以捨棄。

2-2 在請求頁面上開始處,執行請求的編碼程式碼,request.setCharacterEncoding(“UTF-8”),把提交內容的字符集設為UTF-8。這樣的話,接受此引數的頁面就不必在轉碼了。直接使用String s=request.getParameter(“something”);即可得到漢字引數。但是如果存在多頁的話,我們需要在每一頁執行 這個方法也就對post提交的有效果,對於get提交和上傳檔案時的enctype=”multipart/form-data”是無效的。

2-3為了避免每頁都要寫request.setCharacterEncoding(“UTF-8”),建議使用過濾器對所有jsp進行編碼處理。比較推薦使用過濾器,降低了程式碼的冗餘。

3.過濾器的使用:

3-1:簡介:過濾器是在伺服器上執行的,且位於請求響應中間起過濾功能的程式,其工作原理就是在與過濾器相關聯的Servlet或JSP前執行,一個過濾器可以與一個或者多個Servlet,JSP繫結。 工作原理: 程式碼分析: filter程式碼:

//實現編碼轉換的過濾器
package filter;

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;

public class EncodingFilter implements Filter
{  
    protected String encoding = null;  
    protected FilterConfig config;  
    public void init(FilterConfig filterConfig) throws ServletException 
    {   
        this.config = filterConfig;   // 得到在 web.xml 中配置的編碼   
        this.encoding = filterConfig.getInitParameter("Encoding");  }  
    public void doFilter(   ServletRequest request,   ServletResponse response,   FilterChain chain)   throws IOException, ServletException {   if (request.getCharacterEncoding() == null) {       // 得到指定的編碼   
        String encode = getEncoding();   
        if (encode != null) {         //設定 request 的編碼     
            request.setCharacterEncoding(encode);     
            response.setCharacterEncoding(encode);    
            }  
        }   
    chain.doFilter(request, response);  
    } 
    protected String getEncoding() 
    {   
        return encoding; 
    }  
    public void destroy() 
    { 

    } 
}

web.xml配置檔案

  <filter>
    <display-name>EncodingFilter</display-name>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>filter.EncodingFilter</filter-class>
    <init-param>        
 <param-name>Encoding</param-name>        
 <param-value>utf-8</param-value>       
</init-param> 
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>