package yin.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;
public class EncodingFilter implements Filter
{
String encoding;
@Override
public void destroy()
{
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest req = (HttpServletRequest) request;
String method = req.getMethod();
response.setContentType("text/html; charset=" + encoding);
if ("post".equals(method.toLowerCase()))
{
req.setCharacterEncoding(encoding);
}
else
{
req = new MyHttpServletRequestWrapper(req);
}
// 放行...
chain.doFilter(req, response);
}
@Override
public void init(FilterConfig config) throws ServletException
{
encoding = config.getServletContext().getInitParameter("encoding");
if (encoding == null)
{
encoding = "utf-8";
}
}
class MyHttpServletRequestWrapper extends HttpServletRequestWrapper
{
HttpServletRequest request;
String encoding;
public MyHttpServletRequestWrapper(HttpServletRequest request)
{
super(request);
this.request = request;
// 获取全局变量
encoding = request.getServletContext().getInitParameter("encoding");
}
@Override
public String getParameter(String name)
{
String string = request.getParameter(name);
try
{
string = new String(string.getBytes("iso-8859-1"), encoding);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
return string;
}
@Override
public String[] getParameterValues(String name)
{
String[] names = request.getParameterValues(name);
for (int i = 0; i < names.length; i++)
{
try
{
names[i] = new String(names[i].getBytes("iso-8859-1"), encoding);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
}
return names;
}
}
}
接下来就是配置web.xml了,其实也是很简单的:
<filter> <filter-name>EncodingFilter</filter-name> <filter-class>yin.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
这样基本上也就完成了,不过在运用时可能还会出现乱码(在下以前就出现过,可能是哪一个页面或者servlet中使用了其他的编码方式吧,不过后来不知道怎样就处理好了。。。)
由于字符编码Filter网上有很多,又大多都是大同小异,所以我这也就不是原创的,但是说转载谁的,在下也不清楚到底谁,所以只能打出转载的旗号了。如有错误之处,欢迎指出哦。。。
转载于:https://blog.51cto.com/yinbin99/1840860