您的位置:首页 > 其它

使用过滤器解决全站中文乱码问题

2017-07-30 10:19 330 查看
package com.tinysoft.cn;
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;
import javax.servlet.http.HttpServletResponse;
/**
* 解决中文乱码问题,使用过滤器,对整个应用的编码和解码进行约定,这样就不会编解码不一致而导致中文乱码问题
* @author 董乐强      2017-7-29
*
*/
public class SetAllCharacterEncodingFilter implements Filter {
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
this.filterConfig = filterConfig;
}
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest) req;
response=(HttpServletResponse) resp;
} catch (Exception e) {
throw new RuntimeException("non-http request");
}
String encoding = "UTF-8";//默认为UTF-8
//得到用于配置的参数
String value = filterConfig.getInitParameter("encoding");
if(value!=null)
encoding=value;
//这个只使用Post的请求方式
request.setCharacterEncoding(encoding);
response.setContentType("text/html;charset="+encoding);

//处理Get方式提交请求的过滤方式
MyHttpServletRequest mrequest = new MyHttpServletRequest(request);
chain.doFilter(mrequest, response);
}
public void destroy() {
// TODO Auto-generated method stu
}
}
//在不改写已有类的基础上,为其加功能
class MyHttpServletRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
public MyHttpServletRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
//这段是get方式的核心过滤中文乱码问题
@Override
public String getParameter(String name) {
String value = request.getParameter(name);
if(value==null)
return value;
try {
if("get".equalsIgnoreCase(request.getMethod()))
value = new String(value.getBytes("ISO-8859-1"),request.getCharacterEncoding());
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return value;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: