[java]代码库
package cn.edu.itcast.filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
// 解决全站中文乱码的问题
public class AllCharacterFilter implements Filter{
private FilterConfig filterConfig ;
@Override
public void init(FilterConfig arg0) throws ServletException {
this.filterConfig = arg0 ;
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
System.out.println("整站中文过滤器开始............");
HttpServletRequest request = (HttpServletRequest)req ;
HttpServletResponse response = (HttpServletResponse)res ;
String encoding = filterConfig.getInitParameter("encoding");
if(encoding == null){
encoding = "UTF-8" ;
}
// 默认只能解决POST方式的中文乱码问题
request.setCharacterEncoding(encoding) ;
response.setCharacterEncoding(encoding) ;
response.setContentType("text/html;charset="+encoding) ;
MyHttpServletRequest myRequest = new MyHttpServletRequest(request);
chain.doFilter(myRequest, response) ;
System.out.println("整站中文过滤器结束............");
}
@Override
public void destroy() {
}
}
// 包装设计模式修改GET请求处理方式
class MyHttpServletRequest extends HttpServletRequestWrapper
{
public MyHttpServletRequest(HttpServletRequest request)
{
super(request);
}
@Override
public String getParameter(String name)
{
String value = super.getParameter(name) ;
if(value != null)
{
String method = super.getMethod() ;
if("get".equalsIgnoreCase(method))
{
try
{
value = new String (value.getBytes("ISO-8859-1"),super.getCharacterEncoding()) ;
} catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
}
return value ;
}
}