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了,其实也是很简单的:html
<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中使用了其余的编码方式吧,不事后来不知道怎样就处理好了。。。)java
因为字符编码Filter网上有不少,又大多都是大同小异,因此我这也就不是原创的,可是说转载谁的,在下也不清楚到底谁,因此只能打出转载的旗号了。若有错误之处,欢迎指出哦。。。
web