import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Map;
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;public classEncodingFilter implements Filter {
FilterConfig config= null;
String encode= "utf-8";
@Overridepublic voiddestroy() {
}
@Overridepublic voiddoFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
response.setContentType("text/html;charset="+encode); //--解决响应乱码
chain.doFilter(new MyHttpServletRequest((HttpServletRequest) request), response);//--包装改造request中和获取请求参数相关的方法解决请求参数乱码
}
@Overridepublic voidinit(FilterConfig filterConfig) throws ServletException {this.config =filterConfig;
encode= config.getInitParameter("encode");
}classMyHttpServletRequest extends HttpServletRequestWrapper {
HttpServletRequest request;publicMyHttpServletRequest(HttpServletRequest request) {
super(request);this.request =request;
}
@Overridepublic MapgetParameterMap() {
Map map =request.getParameterMap();try{for (Map.Entryentity : map.entrySet()) {
String[] value=entity.getValue();for (int i = 0; i < value.length; i++) {
value[i]= new String(value[i].getBytes("iso8859-1"),
encode);
}
}returnsuper.getParameterMap();
}catch(Exception e) {
e.printStackTrace();throw newRuntimeException(e);
}
}
@OverridepublicString[] getParameterValues(String name) {return (String[]) getParameterMap().get(name);
}
@OverridepublicString getParameter(String name) {return getParameterValues(name)[0]==null?null:getParameterValues(name)[0];
}
}
}