- 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乱码问题
- */
- 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");// 解决request乱码
- resp.setContentType("text/html;charset=utf-8"); // 解决response乱码
- if ("get".equalsIgnoreCase(request.getMethod())) {
- CharacterRequest characterRequest = new CharacterRequest(request); // 使用包装的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");//转换为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;
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/240120148646.html
来源: http://www.codesnippet.cn/detail/240120148646.html