乱码问题,究其原因,都是所使用的字符集不一样所导致的。解决方法也有很多种。以下介绍的的事通过设置过滤器
来实现的方法
1、EncodingFilter
package com.njupt.filter;
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.http.HttpServletRequest;
public class EncodingFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("filter起作用啦啦啦啦");
HttpServletRequest req = (HttpServletRequest)request;
String method = req.getMethod();
if("GET".equals(method)){
EncodingHttpServletRequestWrapper wrapper = new EncodingHttpServletRequestWrapper(req);
chain.doFilter(wrapper, response);
}else{
chain.doFilter(request,response);
}
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
2、EncodingHttpServletRequestWrapper
package com.njupt.filter;
import java.io.UnsupportedEncodingException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class EncodingHttpServletRequestWrapper extends
HttpServletRequestWrapper {
private HttpServletRequest request;
public EncodingHttpServletRequestWrapper(HttpServletRequest request){
super(request);
this.request = request;
}
@Override
public String getParameter(String name) {
String value = request.getParameter(name);
if(value != null){
String data = null;
try {
data = new String(value.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return data;
}
return super.getParameter(name);
}
}
需要注意的是,写完了Filter,记得要在web.xml中配置上,配置代码如下:
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.njupt.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
而且,这时候,JSP页面的编码要显式指明是UTF-8,否则,也很可能开始乱码。代码如下:
<%@ page contentType="text/html; charset=utf-8" %>