全站亂碼過濾器簡單實現
阿新 • • 發佈:2018-11-21
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Map; import java.util.Set; public class EncodingFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //將ServletRequest和ServletResponse強轉成其子類 HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; //對request和response物件進行增強,其中,request物件我這裡採用了裝飾設計模式 response.setContentType("text/html;charset=utf-8"); MyRequest myRequest = new MyRequest(request); filterChain.doFilter(myRequest,response); } @Override public void destroy() { } private class MyRequest extends HttpServletRequestWrapper { HttpServletRequest request ; boolean flag = false; public MyRequest(HttpServletRequest request) { super(request); this.request = request; } public Map<String, String[]> getParameterMap(){ //判斷當前的請求是什麼請求 String method = request.getMethod(); if ("post".equalsIgnoreCase(method)){ //如果是post請求,直接設定 try { this.request.setCharacterEncoding("utf-8"); return this.request.getParameterMap(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); return super.getParameterMap(); } }else if ("get".equalsIgnoreCase(method)){ //是get請求 Map<String, String[]> map = this.request.getParameterMap(); if (map == null){ return super.getParameterMap(); } if (flag){ return map; } Set<String> keys = map.keySet(); for (String key : keys) { String[] values = map.get(key); for (String value : values) { try { value = new String(value.getBytes("iso-8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } flag = true; return map; }else{ return super.getParameterMap(); } } public String[] getParameterValues(String name){ Map<String, String[]> map = this.getParameterMap(); if(map == null){ return super.getParameterValues(name); } String[] strings = map.get(name); return strings; } public String getParameter(String name){ String[] parameterValues = this.getParameterValues(name); if (parameterValues == null){ return super.getParameter(name); } return parameterValues[0]; } } }