在上一節(jié)
服務(wù)器如何處理客戶端請(qǐng)求中,我們了解,request對(duì)象中封裝了請(qǐng)求信息,使用response對(duì)象可以向客戶端響應(yīng)消息。在
Http協(xié)議詳解之響應(yīng)中,我們知道響應(yīng)首行信息中包含了響應(yīng)狀態(tài)碼,而今天,我們要學(xué)習(xí)的就是如何使用response向客戶端發(fā)送狀態(tài)碼。
response對(duì)象的類型是HttpServletResponse。Servlet的生命周期方法之一service()方法,它的兩個(gè)參數(shù)的類型分別是ServletRequest和ServletResponse。其中HttpServletResponse和ServletResponse是子與父的關(guān)系,在HttpServlet類中,生命周期方法service()將它的參數(shù)都強(qiáng)轉(zhuǎn)成HttpServletRequest類型和HttpServletResponse 類型。
ServletRequest和ServletResponse是與協(xié)議無(wú)關(guān)的兩個(gè)接口,而HttpServletRequest和HttpServletResponse是與http協(xié)議有關(guān)的兩個(gè)接口。
下面我們來(lái)了解HttpServletResponse,首先查看該接口的API,如圖1-1所示:
圖1-1 HttpServletResponse接口方法
圖1-1中,有三個(gè)方法被紅色標(biāo)注,它們是發(fā)送狀態(tài)碼的相關(guān)方法,與Http協(xié)議相關(guān),因此該方法是在HttpServletResponse類中定義。
接下來(lái)對(duì)著三個(gè)方法進(jìn)行分析,如下所示:
(1)void sendError(int sc)
該方法是向客戶端發(fā)生錯(cuò)誤的狀態(tài)碼,例如404、500等。
(2)void sendError(int sc,java.lang.String msg)
該方法是向客戶端發(fā)送錯(cuò)誤的狀態(tài)碼,并且添加錯(cuò)誤信息,例如,404,您訪問(wèn)的資源不存在。
(3)void setStatus(int sc)
該方法是向客戶端發(fā)送成功的狀態(tài)碼,還可以用來(lái)發(fā)送302狀態(tài)碼。
下面我們來(lái)看一個(gè)案例,使用response向客戶端發(fā)送404狀態(tài)碼,具體如下:
(1)創(chuàng)建web應(yīng)用,Example01,在該應(yīng)用中新建一個(gè)Servlet類,StatusServlet,主要代碼如例1-1所示:
例1-1 StatusServlet.java
public class StatusServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.sendError(404,"您訪問(wèn)的資源不存在");
}
}
(2)StatusServlet在web.xml文件中配置的訪問(wèn)路徑是“/StatusServlet”;
(3)將Example10發(fā)布到Tomcat服務(wù)器中,然后啟動(dòng)服務(wù)器,在瀏覽器地址欄上輸入:http://localhost:8080/Example01/StatusServlet,瀏覽器顯示結(jié)果如圖1-2所示:
圖1-2 瀏覽器顯示結(jié)果
由圖1-2所示,在StatusServlet類中,使用response發(fā)送404狀態(tài)碼發(fā)送成功,這里要注意的是,當(dāng)使用response的setStatus(int sc)方法發(fā)送404狀態(tài)碼時(shí),不起任何作用。
本文版權(quán)歸傳智播客Java培訓(xùn)學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
作者:傳智播客Java培訓(xùn)學(xué)院
首發(fā):http://8y3kgpwe.cn/javaee