01、案例:编码转换
(1) 自定义过滤器,实现Filter接口。
@WebFilter(urlPatterns="/*",
initParams={
@WebInitParam(name="encoding",value="utf-8")})
public class CharacterEncodingFilter implements Filter {
● urlPatterns="/*"表示对所有的HTTP请求进行过滤。
● 设置了初始化参数,名字为encoding,参数值可以按需要配置。
(2) 在初始化方法中读取参数。
public class CharacterEncodingFilter implements Filter {
private String encoding;
public void init(FilterConfig filterCondig)
throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding");
}
}
(3) 在doFilter中过滤请求。
先把HTTP请求的参数转换成单字节码ISO-8859-1,然后用配置的encoding进行编码。此处只对GET请求进行了处理,POST请求一般不会乱码。
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (encoding != null)
request.setCharacterEncoding(encoding);
HttpServletRequest r = (HttpServletRequest)request;
if(r.getMethod().equalsIgnoreCase("get")){
Enumeration<?> names = request.getParameterNames();
while (names.hasMoreElements()){
String[] values = request.getParameterValues(names.nextElement().toString());
for (int i = 0; i < values.length; ++i){
values[i] = new String(values[i].getBytes("ISO-8859-1"), encoding );
}
}
}
chain.doFilter(request, response);
}