解決中文亂碼的filter(包括get和post提交兩種方式)
public class TomcatFormFilter implements Filter {
public void destroy() {
// TODO Auto-generated method stub
}
public void doFilter(ServletRequest request,
ServletResponse response, FilterChain chain) throws IOException,
ServletException {
// 1. ServletRequest 轉成 HttpServletRequest
HttpServletRequest req =
(HttpServletRequest)request;
// 2. 如果是GET,就生成一個Wrapper對象,覆蓋獲取參數的方法進行轉碼
if("GET".equalsIgnoreCase(req.getMethod()))
{
req = new
MyRequest(req);
}
// 3.
如果是POST,request.setCharacterEncoding("UTF-8")
else
if("POST".equalsIgnoreCase(req.getMethod())) {
req.setCharacterEncoding("UTF-8");
}
// 4.調用chain.doFilter繼續向後執行
chain.doFilter(req, response);
}
public void init(FilterConfig arg0) throws
ServletException {
// TODO Auto-generated method stub
}
}
class MyRequest extends HttpServletRequestWrapper {
public MyRequest(HttpServletRequest request)
{
super(request);
// TODO Auto-generated constructor stub
}
public String changeEncoding(String input, String
srcEncoding, String targetEncoding) {
try {
// 1. 獲取源編碼的bytes[]
byte[] data =
input.getBytes(srcEncoding);
// 2.
將bytes[]按照制定編碼轉換爲String
return new String(data,
targetEncoding);
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch
block
e.printStackTrace();
}
return input;
}
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
if(value != null) {
value = changeEncoding(value,
"ISO8859-1", "UTF-8");
}
return value;
}
@Override
public String[] getParameterValues(String name)
{
String[] values =
super.getParameterValues(name);
if(values != null && values.length >
0) {
for (int i = 0; i <
values.length; i++) {
String value
= values[i];
values[i] =
changeEncoding(value, "ISO8859-1", "UTF-8");
}
}
return values;
}
}