在部署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>