package msgboard.zt.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;
import javax.servlet.http.HttpServletResponse;
/**
* HttpServletRequest 编码过滤器
* @author daokoushuai
*
*/
public class CharacterEncoding implements Filter {
/**
* 设置的编码
*/
private String encoding;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req; // 强转成HttpServletRequest
HttpServletResponse response = (HttpServletResponse) resp; // 强转成HttpServletResponse
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
response.setContentType("text/html;charset=" + encoding); // 设置字符集和响应内容类型
MyCharset myCharset = new MyCharset(request);
filterChain.doFilter(myCharset, response);
}
class MyCharset extends HttpServletRequestWrapper {
private HttpServletRequest request = null; // 这里需在这里声明一个HttpServletRequest对象用作构造参数赋值,不然下面调用时自己的getParameter方法
public MyCharset(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) { //重写getParameter方法
String value = this.request.getParameter(name);
if (value == null) {
return null;
}
try {
if (!"get".equalsIgnoreCase(this.request.getMethod())) {
return value;
} else {
return new String(value.getBytes("ISO8859-1"), encoding);
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding"); // 获取web.xml配置的编码
}
}
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;
/**
* HttpServletRequest 编码过滤器
* @author daokoushuai
*
*/
public class CharacterEncoding implements Filter {
/**
* 设置的编码
*/
private String encoding;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain filterChain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req; // 强转成HttpServletRequest
HttpServletResponse response = (HttpServletResponse) resp; // 强转成HttpServletResponse
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
response.setContentType("text/html;charset=" + encoding); // 设置字符集和响应内容类型
MyCharset myCharset = new MyCharset(request);
filterChain.doFilter(myCharset, response);
}
class MyCharset extends HttpServletRequestWrapper {
private HttpServletRequest request = null; // 这里需在这里声明一个HttpServletRequest对象用作构造参数赋值,不然下面调用时自己的getParameter方法
public MyCharset(HttpServletRequest request) {
super(request);
this.request = request;
}
@Override
public String getParameter(String name) { //重写getParameter方法
String value = this.request.getParameter(name);
if (value == null) {
return null;
}
try {
if (!"get".equalsIgnoreCase(this.request.getMethod())) {
return value;
} else {
return new String(value.getBytes("ISO8859-1"), encoding);
}
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.encoding = filterConfig.getInitParameter("encoding"); // 获取web.xml配置的编码
}
}