1. 程式人生 > >SSM專案中存入資料庫中文亂碼的問題

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

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

① 連線資料庫的配置語句

SSM框架中使用C3P0連線資料庫語句

jdbc:mysql://localhost:3306/dbname

改為

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

② 設定過濾器(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> 

在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編碼

<%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8" pageEncoding="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設定