tomcat項目中文亂碼問題解決方法


在部署tomcat項目時經常會遇到中文亂碼問題,解決的方法可參考以下步驟。

1、更改Tomcat安裝目錄下的conf\server.xml,指定瀏覽器的編碼格式為“utf-8”格式:
  方法是更改 server.xml 中的

    <Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='utf-8' />
注意設置URIEncoding='utf-8'

2、設置servlet過濾器

       方法是在項目的web.xml文件中加入以下filter

  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>net.servlet.CharacterEncodingFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

net.servlet.CharacterEncodingFilter中的代碼如下

package net.servlet;

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 CharacterEncodingFilter  implements Filter  {

	private static String encoding = "utf-8";   
    private boolean ignore=true;  
	
    protected String getEncoding(){   
        return this.encoding;   
    }   
    
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		String pencoding="utf-8";
		if(ignore||null==request.getCharacterEncoding()){               
            if(pencoding!=null){   
                request.setCharacterEncoding(pencoding);   
            }   
        }   
//      System.out.println("encoding===="+encoding);   
        response.setContentType("text/html;charset="+pencoding);   
//      do something here   
        //當前工作全部完成后,將請求放開給過濾器鏈的下一filter    
        chain.doFilter(request, response);   
		
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		  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;   
	        }   
	}
}
3、如果以上兩個步驟還沒有解決亂碼問題,那就有可能是數據庫本身的問題。應當將數據庫的編碼方式統一設置為utf-8。此外,還應注意設置數據庫連接的編碼類型。 如果使用mysql數據庫,在指定數據庫連接url時應指定 characterEncoding。

<DataSources>
	    <ds name="MyPrintPhoto">
			<username>root</username>
			<password>123456</password>
			<dburl>jdbc:mysql://localhost:3306/myprintphoto?useUnicode=true&characterEncoding=utf8&useOldAliasMetadataBehavior=true
			</dburl>
			<classname>com.mysql.jdbc.Driver</classname>
		</ds>
</DataSources>



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM