今天是劉小愛自學Java的第90天。 感謝你的觀看,謝謝你。 話不多說,開始今天的學習: 昨天學習了request,做一個簡單的回顧: request是瀏覽器向服務器發(fā)起請求,會傳遞一些信息。 那么現(xiàn)在問題來了,我向你發(fā)起了請求,你是不是應該給我一個回應? 這就需要使用到response響應了。 response和request有一定的類似之處,今天就來仔細學一學這個response。 一、響應response1響應流程 ①瀏覽器向服務器發(fā)起請求 瀏覽器通過映射路徑向服務器發(fā)起請求,昨天已詳細講解,不再贅述。 ②服務器響應瀏覽器 既然是響應,肯定是通過response對象調(diào)用方法響應,其API為: getWriter().print("hello")。 就是一個輸出語句,這樣在服務器中就將信息響應給瀏覽器了。 我這里使用的是一個字符串,也可是使用某個對應路徑的文件,比如圖片。 2響應報文 在請求中有請求行、請求頭、請求體;在響應中也會有響應行、響應頭、響應體。 同樣的操作,使用抓包工具查看響應數(shù)據(jù): ①響應行 昨天學請求報文的時候,我一直以為General中的都是請求頭。 事實上這是由請求行和響應行共同組成,其中它們還有重復的部分。
②響應頭 同樣也是以鍵值對的形式傳遞一些信息。 ③響應體 在Response選項卡中可以看到響應體,也就是輸出的內(nèi)容。 3響應行中的轉(zhuǎn)態(tài)碼 關于狀態(tài)碼是非常多的,狀態(tài)碼由三個數(shù)字組成,根據(jù)開頭第一個數(shù)字有不同的功能。 根據(jù)第2、3個數(shù)字又有進一步垂直細分。 因為狀態(tài)碼太多了,很難將其每一個都記下來,了解常用的幾個即可。
二、響應API和請求API一樣,響應API是通過Java中HttpServletResponse這個類對應的對象操作。 1響應行 setStatus(200)方法,參數(shù)即為狀態(tài)碼,可以向服務器發(fā)送對應的額狀態(tài)碼。 雖然說響應行中也有協(xié)議/版本,但是這些服務器是不能設定的,這也很好理解,都是由統(tǒng)一制定的規(guī)則。 2響應頭 setHeader(參數(shù)a,參數(shù)b)方法,一共有兩個參數(shù),可以實現(xiàn)對應的功能,逐一講解: ①關于頁面定時刷新:
我做了一個測試,發(fā)現(xiàn)如果時間不寫,只寫一個url,刷新頁面時竟然不會跳轉(zhuǎn)。 也不知道我是不是忽視了什么,暫且就以這個測試作為一個結(jié)果好了。 ②內(nèi)容類型為簡單文本:
因為該方式時常被使用,所以其有一個簡化版的方法: setContentType(text/plain;charset=utf-8) 說白了也就是將setHeader()方法中的參數(shù)a變成方法名里的一部分了,也好理解記憶。 ③內(nèi)容類型為HTML: ②中參數(shù)為text/plain,plain,簡單的樸素的意思,也就是其輸出的內(nèi)容是沒有經(jīng)過渲染的,輸出什么就是什么。 而③中是text/html,html是超文本標記語言,在瀏覽器中會經(jīng)過渲染成對應的格式。 輸出的雖然是h1標簽,但是在瀏覽器中會被渲染成一個標題格式的字體。 3響應體 也就是最先開始說的API:getWriter().print() 三、重定向昨天學習了request中的轉(zhuǎn)發(fā),在response中有個和其非常類似的功能,叫重定向。 重定向,重新定了一個方向。瀏覽器訪問服務器是有多次的。 ①第一次訪問服務器 根據(jù)瀏覽器的訪問路徑,服務器通過響應頭實現(xiàn)重定向: setHeader("location","/responseServletTwo") 前面參數(shù)為location,后面參數(shù)為對應的路徑。 這個的意思就是服務器響應瀏覽器,告訴它:你去找我給你設定的這個路徑。 事實上,這時就已經(jīng)完成一次請求一次響應了。 其還有一種簡寫方法: response.sendRedirect("/responseServletTwo") Redirect,翻譯就是重定向的意思。 ②第二次訪問服務器 瀏覽器根據(jù)服務器重定向的路徑再次訪問,這樣就找到了ResponseServletTwo。 該servlet再次響應瀏覽器,從而輸出內(nèi)容。 以上就是對于重定向的說明,其作用和request中的轉(zhuǎn)發(fā)非常的相似。 但轉(zhuǎn)發(fā)與重定向也有一定的區(qū)別,畫圖分析: 轉(zhuǎn)發(fā)本質(zhì)上只有一次請求一次響應,是服務器內(nèi)部的轉(zhuǎn)發(fā)行為。 無論多少次轉(zhuǎn)發(fā)就一次請求和一次響應,瀏覽器上的路徑不變。 重定向是多次請求多次響應,瀏覽器上的路徑發(fā)生了改變。 用現(xiàn)實生活中的一個例子來理解:
當然,這個例子不太準確,畢竟瀏覽器是主動方,是由它發(fā)起請求的,菜碗是被動的。 只是暫且使用這個例子來加深自己對其的理解。 最后謝謝你的觀看。 如果可以的話,麻煩幫忙點個贊,謝謝你。 |
|