package
filter;
import
java.io.IOException;
import
java.io.UnsupportedEncodingException;
import
java.util.Map;
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;
/**
* 使用此过滤器解决reqeust/response乱码问题
* @author 马隆博
*/
public
class
CharacterFilter
implements
Filter {
@Override
public
void
init(FilterConfig fConfig)
throws
ServletException {}
@Override
public
void
doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain)
throws
IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
req.setCharacterEncoding(
"utf-8"
);
resp.setContentType(
"text/html;charset=utf-8"
);
if
(
"get"
.equalsIgnoreCase(request.getMethod())) {
CharacterRequest characterRequest =
new
CharacterRequest(request);
chain.doFilter(characterRequest, response);
return
;
}
doFilter(request, response, chain);
}
@Override
public
void
destroy() {}
}
/**
* 包装后的Request
* @author 马隆博
*/
class
CharacterRequest
extends
HttpServletRequestWrapper {
public
CharacterRequest(HttpServletRequest request) {
super
(request);
}
@SuppressWarnings
(
"finally"
)
private
String convertCharacter(String value) {
String resultValue = value;
try
{
resultValue =
new
String(value.getBytes(
"ISO-8859-1"
),
"utf-8"
);
}
catch
(UnsupportedEncodingException e) {
e.printStackTrace();
}
finally
{
return
resultValue;
}
}
@Override
public
String getParameter(String name) {
String value =
super
.getParameter(name);
if
(value !=
null
){
value = convertCharacter(value);
}
return
value;
}
@Override
public
Map<String, String[]> getParameterMap() {
Map<String, String[]> map =
super
.getParameterMap();
if
(map !=
null
) {
for
(String[] values : map.values()) {
for
(String value : values) {
value = convertCharacter(value);
}
}
}
return
map;
}
@Override
public
String[] getParameterValues(String name) {
String[] values =
super
.getParameterValues(name);
if
(values !=
null
) {
for
(String value : values) {
value = convertCharacter(value);
}
}
return
values;
}
}