Http協議中默認的編碼字符集和平臺字符集都不是中文的,所以Web項目中經常會遇到中文亂碼問題。
為防止中文亂碼出現,首先我們要把項目中每個網頁的編碼形式改成中文的,HTML網頁中的charset改成UTF-8,JSP網頁中的pageEncoding改成UTF-8。
然后我們做一個過濾器,每次對網頁的請求都會進入到過濾器,并且把request和response都改成UTF-8編碼形式,這樣防止了中文亂碼的出現。
源代碼如下:
package com.dr.servletform;
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.jsp.jstl.core.Config;
public class MyFilter implements Filter{
String encoding="";
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("pass here-------");
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
String encoding=config.getInitParameter("encoding");
this.encoding=encoding;
System.out.println(encoding);
}
}
web.xml中配置如下:
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.dr.servletform.MyFilter</filter-class>
- <init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
- <filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>