1. 程式人生 > >如何解決GET請求中文亂碼問題?

如何解決GET請求中文亂碼問題?

亂碼也是一件很頭痛的事

一般情況下我們利用下面方法,可以解決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);