如何解決GET請求中文亂碼問題?
阿新 • • 發佈:2019-02-19
亂碼也是一件很頭痛的事
一般情況下我們利用下面方法,可以解決Post請求中文亂碼:
//將物件轉換為HttpServletRequest,HttpServletResponse HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; //操作 -----解決亂碼 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //放行 chain.doFilter(request, response);
但是卻解決不了Get請求中文亂碼問題。
如何做一個全域性編碼過濾器呢?可以來包括GET,POST請求
1.繼承
用一個類來繼承,重寫(增強)獲取資料的方法,在這個方法內部解決亂碼問題。(麻煩!不用)
2.裝飾設計模式
1.建立一個類讓它與被裝飾類實現同一個介面或者繼承同一個父類。(如:實現httpServletRequest介面,繼承HttpServletRequestWrapper類)
2.在裝飾類中持有被裝飾類的引用。
3.重寫要增強的方法
例如:
public class MyRequest extends HttpServletRequestWrapper{ HttpServletRequest request; public MyRequest(HttpServletRequest request) { super(request); this.request=request; } public String getParameter(String name) { name = request.getParameter(name);//亂碼 try { return new String(name.getBytes("iso-8859-1"),"UTF-8"); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }
//將物件轉換為HttpServletRequest,HttpServletResponse HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) resp; //操作 -----解決亂碼 request.setCharacterEncoding("utf-8"); response.setContentType("text/html;charset=utf-8"); //用自己的裝飾類 request = new MyRequest(request); //放行 chain.doFilter(request, response);