全局范围的处理方法:
/**
*
*/
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;
}
}
}