Java Web(day05) —— 请求和响应
一、Java web之請求和響應
Servlet最主要作用就是處理客戶端請求并作出回應,為此,針對每次請求,Web容器在調(diào)用service()之前都會創(chuàng)建兩個對象,分別是HttpServletRequest和HttpServletResponse。其中HttpServletRequest封裝HTTP請求消息,HttpServletResponse封裝HTTP響應消息。需要注意的是,Web服務器運行過程中,每個Servlet都會只創(chuàng)建一個實例對象,不過每次請求都會調(diào)用Servlet實例的service(ServletRequest req, ServletResponse res)方法,這里HttpServletRequest是ServletRequest的子類,HttpServletResponse是ServletResponse的子類。
HttpServletRequest和HttpServletResponse接口繼承關系圖如下所示:
二、HttpServletResponse
HttpServletResponse接口繼承自ServletResponse接口,由于HTTP響應消息分為狀態(tài)行、響應消息體、消息體三部分,因此,在HttpServletResponse接口中定義了向客戶端發(fā)送響應狀態(tài)碼、響應消息頭、響應消息體的方法。雖然HttpServletResponse接口中的方法較多,但是我們常用的也就是那么幾個,如果用到其他的方法了可以閱讀響應的源碼或者相關資料就行了。
發(fā)送狀態(tài)碼相關函數(shù)
發(fā)送響應消息頭相關函數(shù)
發(fā)送響應消息體相關函數(shù)
中文輸出亂碼問題
計算機中的數(shù)據(jù)都是以二進制形式存儲的,因此,傳輸文本時,就會發(fā)生字符的字節(jié)之間的轉(zhuǎn)換。字符與字節(jié)之間的轉(zhuǎn)換時通過查碼表完成的,字符轉(zhuǎn)換為字節(jié)的過程稱為編碼,字節(jié)轉(zhuǎn)換為字符的過程稱為解碼,如果編碼和解碼使用的碼表不一樣,則會出現(xiàn)亂碼問題。
注意:HttpServletResponse對象的字符輸出流在編碼時,默認采用的是ISO 8859-1編碼,該編碼方式不兼容中文,比如會將"中國"編碼為"63 63"(在ISO 8959-1的碼表中查不到的字符會顯示63)。當瀏覽器對接收到的數(shù)據(jù)進行解碼時,會默認采用GB2312,將"63"解碼為"?",瀏覽器就將"中國"兩個字符解碼為"??"。
HttpServletResponse程序示例
有時會遇到定時跳轉(zhuǎn)頁面的問題,HTTP中Refresh頭字段可以通知瀏覽器在指定的時間內(nèi)自動刷新并跳轉(zhuǎn)到其他頁面,網(wǎng)頁定時刷新并跳轉(zhuǎn)到指定頁面。
package zzz;import java.io.IOException; import java.io.PrintWriter;import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class Hello extends HttpServlet {@Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {// 設置響應消息編碼response.setContentType("text/html;charset=utf-8");response.setHeader("Refresh", "2;url=http://www.baidu.com");PrintWriter out = response.getWriter();out.println("hello 中國,2秒后跳轉(zhuǎn)到百度...");}@Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {this.doGet(request, response);} }三、HttpServletRequest
HttpServletRequest接口繼承ServletRequest接口,專門用于封狀HTTP請求消息。由于HTTP請求信息包括請求行、請求頭和請求體三部分, 所以HttpServletRequest接口定義了獲取請求行、請求頭和請求體的相關方法。
獲取請求行的相關方法
獲取請求消息頭的相關方法
打印請求消息頭字段的所有值
打印請求消息頭字段的所有值
獲取請求體的相關方法
四、RequestDispatcher接口
當一個Web資源受到客戶端請求后,如果希望服務器通知另外一個資源如處理請求,除了使用功能sendRedirect()實現(xiàn)重定向外,還可以通過RequestDispatcher接口的實例對象來實現(xiàn),在ServletRequest接口中定義了一個獲取RequestDispatcher對象的方法–getRequestDispatcher(String path),它返回某個路徑所指定資源的RequestDispatcher對象,參數(shù)path必須以"/"開頭,用于表示當前Web應用的根目錄,也就是path路徑必須是在本W(wǎng)eb程序中,否則會出現(xiàn)異常。
RequestDispatcher接口中方法
總結(jié)
以上是生活随笔為你收集整理的Java Web(day05) —— 请求和响应的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高德开放平台天气查询API
- 下一篇: 办公室白领长时间久坐很伤身