本文共 3299 字,大约阅读时间需要 10 分钟。
全局范围的处理方法:
/**
* */ package com.hsrj.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.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @创建日期 2015-1-4 * */ public class FilertServletEncond extends HttpServlet implements Filter{ Logger logger = LoggerFactory.getLogger(FilertServletEncond.class.getSimpleName()); protected String encoding = ""; private FilterConfig config; private String charset = "UTF-8"; /* (non-Javadoc) * @see javax.servlet.Filter#init(javax.servlet.FilterConfig) */ public void init(FilterConfig filterConfig) throws ServletException { this.config = filterConfig; String charset = config.getServletContext().getInitParameter("charset"); if( charset != null && charset.trim().length() != 0) { this.charset = charset; } } /* (non-Javadoc) * @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest, * javax.servlet.ServletResponse, javax.servlet.FilterChain) * 处理页面传值乱码问题 */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.err.println("doFilter 拦截器.............." ); HttpServletResponse httpresp=(HttpServletResponse)response; HttpServletRequest httpreq=(HttpServletRequest)request; httpresp.setContentType("text/html; charset=UTF-8"); httpresp.setHeader("Cache-Control","no-cache"); httpresp.setHeader("Pragma","no-cache");//向下版本兼容 httpreq.setCharacterEncoding(charset); httpresp.setCharacterEncoding(charset); if(httpreq.getMethod().equalsIgnoreCase("get")) { httpreq = new GetHttpServletRequestWrapper(httpreq,"UTF-8"); } System.out.println("----请求被"+config.getFilterName()+"过滤"); //传递给目标servlet或jsp的实际上时包装器对象的引用,而不是原始的HttpServletRequest对象 chain.doFilter(request, response); System.out.println("----响应被"+config.getFilterName()+"过滤"); } /* (non-Javadoc) * @see javax.servlet.GenericServlet#destroy() */ @Override public void destroy() { charset = null; config = null; System.out.println(config.getFilterName()+"被销毁"); } }/**
* */ package com.hsrj.filter; import java.io.UnsupportedEncodingException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; /** * @创建日期 2015-1-21 * * get请求解决乱码 * */ public class GetHttpServletRequestWrapper extends HttpServletRequestWrapper{ private String charset = "UTF-8"; public GetHttpServletRequestWrapper(HttpServletRequest request) { super(request); } /** * 获得被装饰对象的引用和采用的字符编码 * @param request * @param charset */ public GetHttpServletRequestWrapper(HttpServletRequest request, String charset) { super(request); this.charset = charset; } /** * 实际上就是调用被包装的请求对象的getParameter方法获得参数,然后再进行编码转换 */ public String getParameter(String name) { String value = super.getParameter(name); value = value == null ? null : convert(value); return value; } public String convert(String target) { System.out.println("编码转换之前:" + target); try { return new String(target.trim().getBytes("ISO-8859-1"), charset); } catch (UnsupportedEncodingException e) { return target; } } }转载地址:http://pfjdi.baihongyu.com/