天天看點

SSM項目中存入資料庫中文亂碼的問題存入資料庫中文亂碼的問題

存入資料庫中文亂碼的問題

① 連接配接資料庫的配置語句

SSM架構中使用C3P0連接配接資料庫語句

改為

jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-
           

② 設定過濾器(Filter)檔案

設定EocdingFilter.java檔案:

package cn.com.cxsw.ssm.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;
import javax.servlet.annotation.WebFilter;

/**
 * Servlet Filter implementation class EocdingFilter
 */
@WebFilter("/EocdingFilter")
public class EocdingFilter implements Filter {

    public EocdingFilter() {
        // TODO Auto-generated constructor stub
    }

    public void destroy() {
    }

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }

    public void init(FilterConfig fConfig) throws ServletException {
    }

}
           

③ web.xml中設定過濾器配置

!!!!!注意web.xml配置資訊的位置:

<web-app>

       <!--定義了WEB應用的名字-->
       <display-name></display-name>

       <!--聲明WEB應用的描述資訊-->
       <description></description>

       <!--context-param元素聲明應用範圍内的初始化參數-->
      <context-param></context-param>

      <!--過濾器元素将一個名字與一個實作javax.servlet.Filter接口的類相關聯-->
      <filter></filter>

      <!--一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯-->
      <filter-mapping></filter-mapping>

      <!--servlet API的版本2.3增加了對事件監聽程式的支援,事件監聽程式在建立、修改和删除會話或servlet環境時得到通知。Listener元素指出事件監聽程式類-->
      <listener></listener>

      <!--在向servlet或JSP頁面制定初始化參數或定制URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務的-->
      <servlet></servlet>

      <!--伺服器一般為servlet提供一個預設的URL:http://host/webAppPrefix/servlet/ServletName。但是,常常會更改這個URL,以便servlet可以通路初始化參數或更容易地處理相對URL。在更改預設URL時,使用servlet-mapping元素-->
      <servlet-mapping></servlet-mapping>

      <!--如果某個會話在一定時間内未被通路,伺服器可以抛棄它以節省記憶體。可通過使用HttpSession的setMaxInactiveInterval方法明确設定單個會話對象的逾時值,或者可利用session-config元素制定預設逾時值-->
      <session-config></session-config>

      <!--如果Web應用具有想到特殊的檔案,希望能保證給他們配置設定特定的MIME類型,則mime-mapping元素提供這種保證-->
      <mime-mapping></mime-mapping>

      <!--訓示伺服器在收到引用一個目錄名而不是檔案名的URL時,使用哪個檔案-->
      <welcome-file-list></welcome-file-list>

      <!--在傳回特定HTTP狀态代碼時,或者特定類型的異常被抛出時,能夠制定将要顯示的頁面-->
      <error-page></error-page>

       <!--對标記庫描述符檔案(Tag Libraryu Descriptor file)指定别名。此功能使你能夠更改TLD檔案的位置,而不用編輯使用這些檔案的JSP頁面-->
      <taglib></taglib>

      <!--聲明與資源相關的一個管理對象-->
      <resource-env-ref></resource-env-ref>

      <!--聲明一個資源工廠使用的外部資源-->
      <resource-ref></resource-ref>

      <!--制定應該保護的URL。它與login-config元素聯合使用-->
      <security-constraint></security-constraint>

      <!--指定伺服器應該怎樣給試圖通路受保護頁面的使用者授權。它與sercurity-constraint元素聯合使用-->
     <login-config></login-config>

      <!--給出安全角色的一個清單,這些角色将出現在servlet元素内的security-role-ref元素的role-name子元素中。
          分别地聲明角色可使進階IDE處理安全資訊更為容易-->
      <security-role></security-role>

       <!--聲明Web應用的環境項-->
       <env-entry></env-entry>

      <!--聲明一個EJB的主目錄的引用-->
      <ejb-ref></ejb-ref>

      <!--聲明一個EJB的本地主目錄的應用-->
      <ejb-local-ref></ejb-local-ref>

</web-app> 
           

相關文檔:

OrcaleHelpCenter的指南

Hafiz.Zhang的部落格

在web.xml設定如下:

<!-- Spring字元集過濾器 -->
<filter>
        <filter-name>SpringEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>SpringEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
</filter-mapping>
           

④ 在jsp檔案中設定UTF-8編碼

⑤ mysql中設定utf-8格式

在mysql中:

show variables like 'character%'; 來檢視目前資料庫的相關編碼集。
           

MySQL 有六處使用了字元集,分别為:

client 、connection、database、results、server 、system。

其中

與伺服器端相關:database、server、system(永遠無法修改,就是utf-8);

與用戶端相關:connection、client、results 。

類型 含義
client 為用戶端使用的字元集
connection 為連接配接資料庫的字元集設定類型,如果程式沒有指明連接配接資料庫使用的字元集類型則按照伺服器端預設的字元集設定
database 為資料庫伺服器中某個庫使用的字元集設定,如果建庫時沒有指明,将使用伺服器安裝時指定的字元集設定
results 為資料庫給用戶端傳回時使用的字元集設定,如果沒有指明,使用伺服器預設的字元集
server 為伺服器安裝時指定的預設字元集設定
system 為資料庫系統使用的字元集設定

将下的預設編碼 default-character-set=utf8 改為 default-character-set=gbk

具體設定:mysql資料庫utf-8設定