/**
* Tomcat
GET方式表單提交亂碼解決。
* @author BeanSoft
*
*/
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 轉(zhuǎn)成 HttpServletRequest
HttpServletRequest req =
(HttpServletRequest)request;
// 2.
如果是GET,就生成一個Wrapper對象,覆蓋獲取參數(shù)的方法進(jìn)行轉(zhuǎn)碼
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.調(diào)用chain.doFilter繼續(xù)向后執(zhí)行
chain.doFilter(req, response);
}
public void init(FilterConfig arg0) throws ServletException {
//
TODO Auto-generated method stub
}
}
/**
* 包裝器,覆蓋 getParameter()和 getParameterValues() 這兩個方法來進(jìn)行轉(zhuǎn)碼。
*
@author BeanSoft
*
*/
class MyRequest extends
HttpServletRequestWrapper {
public MyRequest(HttpServletRequest request) {
super(request);
//
TODO Auto-generated constructor stub
}
/**
* 字符串轉(zhuǎn)碼。
* @param input 輸入字符串
* @param srcEncoding 源字符串的編碼
* @param
targetEncoding 目標(biāo)編碼
* @return 轉(zhuǎn)換過的內(nèi)容
*/
public String
changeEncoding(String input, String srcEncoding, String targetEncoding) {
try
{
// 1. 獲取源編碼的bytes[]
byte[] data =
input.getBytes(srcEncoding);
// 2. 將bytes[]按照制定編碼轉(zhuǎn)換為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;
}
}