1. 控制消息頭
addHeader(String name,String value)用於添加消息頭,不管有沒有重名的消息頭。
setHeaderr(String name,String value)用於設置消息頭,如果存在重名則替換掉原先的消息頭。
addIntHeader(String name,int value)和setIntHeader(String name,int value)方法用於設置數字爲消息頭的值。與上面兩個相比只多了個轉換int爲stirng的功能。
addDateHeader(String name,long date)和setDateHeader(String name,long date)方法。
2. 設置發送內容的編碼和瀏覽器接收解析的編碼
通過HttpResponse.setContentType("text/html;charset=GB2312");這種方式將設置發送編碼爲charset的值,同時瀏覽器也會按照這個值去接收解析。因爲它是直接對ContentType消息頭進行設置。
通過HttpResponse. setCharacterEncoding("UTF-8");這種方式只能夠設置發送編碼,要想設置接收編碼,程序中必須有語句HttpResponse.setContentType("text/html”)。遮陰前一個語句設置了編碼,如果沒有後一個語句,只是設置了發送,但是沒有設置消息頭,瀏覽器不知道如何接受。(如果在代碼中沒有手動設置ContentType消息頭,則服務器發送給客戶端的消息頭中將不包含它)。
例如:
resp.setContentType("text/html");
resp.setCharacterEncoding("UTF-8");
PrintWriter out = resp.getWriter();
out.write("我是張!");
setLocale(java.util.Locale)方法
這個方法用於設置國家和語言環境,要想設置編碼必須在web.xml中設置對應關係。
例如:
在web.xml中:
<locale-encoding-mapping-list>
<locale-encoding-mapping>
<locale>zh_CN</locale>
<encoding>UTF-8</encoding>
</locale-encoding-mapping>
</locale-encoding-mapping-list>
在代碼中:
resp.setContentType("text/html");
resp.setLocale(java.util.Locale.CHINA);
PrintWriter out = resp.getWriter();
out.write("我是張!");
注意:這個如果要設置瀏覽器的接收編碼,也要加上resp.setContentType("text/html");原理和上面相同。
2.4 如果上面三個都沒有設置,那麼服務器將默認選擇使用ISO-8859-1發送,將產生中文亂碼。一般表現爲??????形式的亂碼。而涉及到對UTF-8轉碼錯誤的亂碼,一般是“看不懂象形文字“。
3. 一些常用的Header。
3.1 實現定時刷新或者跳轉。
resp.setHeader("Refresh", "2");//定時刷新
resp.setHeader("Refresh", "5;url=http://www.baidu.com"); //定時跳轉
3.2 禁止緩存
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
3. response.getWriter()和response.getOutputStream()方法。
4. response.sendRedirect()重定向。
使用RequestDispatcher實現請求轉發。
在Servlet中獲取RequestDispatcher對象的方法:
通過ServletContext接口,getServletContext().getRequestDispatcher(String path)這裏的path只能是以/開頭,代表web應用程序的根目錄。
通過Request的getRequestDispatcher(String path)方法,這裏的path如果是以/開頭,代表web應用程序的根目錄,否則相對目錄。