Http狀態碼:
1.介紹:
1)Http 狀態碼是由三位數字組成的一個符號,
2)Http 服務器在推送回應包之前,根據本次請求處理情況,將Http狀態碼寫入到回應包中【狀態行】上,
3)Http 狀態碼的功能可以分為兩個:
如果Http服務器針對本次請求,回傳了對應的資源檔案,通過Http狀態碼通知瀏覽器應該如何處理這個結果,
如果Http服務器針對本次請求,無法回傳對應的資源檔案,通過Http狀態碼向瀏覽器解釋不能提供服務的原因,
2.Http 狀態碼由 100---599 組成,分為 5 個大類:
1)1 _ _( _ 指代任何數字):
舉個栗子:
100 --->通知瀏覽器本次回傳的資源檔案,并不是一個獨立的資源檔案,需要瀏覽器在接收回應包之后,繼續向Http服務器索要依賴的其他資源檔案,
2)2 _ _:
舉個栗子:
200 --->通知瀏覽器本次回傳的資源檔案是一個完整獨立資源檔案,瀏覽器在接收到之后不需要索要其他關聯檔案,
3)3 _ _:
舉個栗子:
300 --->通知瀏覽器本次回傳的不是一個資源檔案內容,而是一個資源檔案地址,需要瀏覽器根據這個地址自動發起請求來索要這個資源檔案,
4)4 _ _:
舉個栗子:
404 ---> 通知瀏覽器,由于在服務端沒有定位到被訪問的資源檔案,此無法提供幫助,
405 ---> 通知瀏覽器,在服務端已經定位到被訪問的資源檔案(Servlet),但是這個Servlet對于瀏覽器采用的請求方式不能處理(比如請求是以get方式發送的,但對應的Servlet只有doPost( )方法),
5)5 _ _:
舉個栗子:
500 ---> 通知瀏覽器,在服務端已經定位到被訪問的資源檔案(Servlet),這個Servlet可以接收瀏覽器采用請求方式,但是Servlet在處理請求期間,由于Java例外導致處理失敗(比如 java 檔案中存在空指標例外),
多個Servlet之間呼叫規則:
一、前提條件:
某些來自于瀏覽器發送的請求,往往需要服務端中多個Servlet協同處理,但是瀏覽器一次請求只能訪問一個Servlet,導致用戶需要手動通過瀏覽器發起多次請求才能得到完整的服務,這樣增加用戶獲得服務難度,導致用戶一生氣,不用咱們的網站了,oh,no!!!
二、如何解決?
無論本次請求涉及到多少個Servlet,用戶只需要【手動】通知瀏覽器發起一次請求即可,這樣就可以提高用戶的體驗了,
三、多個Servlet之間呼叫規則:
1、重定向解決方案
2、請求轉發解決方案
四、重定向解決方案:
1、作業原理: 用戶第一次通過【手動方式】通知瀏覽器訪問OneServlet,OneServlet作業完畢后,將TwoServlet地址寫入到回應頭中的location屬性中,導致Tomcat將302狀態碼寫入到狀態行,在瀏覽器接收到回應包之后,會讀取到302狀態,此時瀏覽器,自動根據回應頭中location屬性地址發起第二次請求,訪問TwoServlet去完成請求中剩余任務,
2、實作命令:
response.sendRedirect("請求地址") ; //將地址寫入到回應包中回應頭中location屬性
3、重定向解決方案原理圖:

碼來!!!(模擬一下重定向解決方案)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<servlet>
<servlet-name>OneServlet</servlet-name>
<servlet-class>com.burnyouth.controller.OneServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>TwoServlet</servlet-name>
<servlet-class>com.burnyouth.controller.TwoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OneServlet</servlet-name>
<url-pattern>/one</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TwoServlet</servlet-name>
<url-pattern>/two</url-pattern>
</servlet-mapping>
</web-app>
package com.burnyouth.controller;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
public class OneServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("OneServlet負責洗韭菜");
//重定向解決方案:
response.sendRedirect("/myWeb/two");
}
}
package com.burnyouth.controller;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
public class TwoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TwoServlet負責韭菜炒雞蛋");
}
}
4、特點:
1)請求地址:
既可以把當前網站內部的資源檔案地址發送給瀏覽器 (/網站名/資源檔案名),也可以把其他網站資源檔案地址發送給瀏覽器(http://ip地址:埠號/網站名/資源檔案名)
2)請求次數:
瀏覽器至少發送兩次請求,但是只有第一次請求是用戶手動發送,后續請求都是瀏覽器自動發送的,
3) 請求方式:
重定向解決方案中,通過地址欄(location)通知瀏覽器發起下一次請求,因此通過重定向解決方案呼叫的資源檔案接收的請求方式一定是【GET】,
5、缺點:
重定向解決方案需要在瀏覽器與服務器之間進行多次往返,大量時間消耗在往返次數上,增加用戶等待服務時間,
五、請求轉發解決方案:
1.原理:用戶第一次通過手動方式要求瀏覽器訪問OneServlet,OneServlet作業完畢后,通過當前的請求物件代替瀏覽器向Tomcat發送請求,申請呼叫TwoServlet,Tomcat在接收到這個請求之后,自動呼叫TwoServlet來完成剩余任務,
2.實作命令【請求物件代替瀏覽器向Tomcat發送請求】:
1)通過當前請求物件生成資源檔案申請報告物件
RequestDispatcher report = request.getRequestDispatcher("/資源檔案名"); //一定要以"/"為開頭
2)將報告物件發送給Tomcat
report.forward(request,response);//request為當前請求物件,response為當前回應物件
3、請求轉發解決方案原理圖:

碼來!!!(模擬一下請求轉發解決方案)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">
<servlet>
<servlet-name>OneServlet</servlet-name>
<servlet-class>com.burnyouth.controller.OneServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>TwoServlet</servlet-name>
<servlet-class>com.burnyouth.controller.TwoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>OneServlet</servlet-name>
<url-pattern>/one</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>TwoServlet</servlet-name>
<url-pattern>/two</url-pattern>
</servlet-mapping>
</web-app>
package com.burnyouth.controller;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
public class OneServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("OneServlet 實施麻醉...");
//請求轉發方案:
//1、通過當前請求物件生成資源檔案申請報告物件:
RequestDispatcher report = request.getRequestDispatcher("/two");//不需要寫當前地址
//2、將報告物件發送給Tomcat
report.forward(request,response);
}
}
package com.burnyouth.controller;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
public class TwoServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("TwoServlet 實施手術...");
}
}
4.優點:
1)無論本次請求涉及到多少個Servlet,用戶只需要手動通過瀏覽器發送一次請求,
2) Servlet之間呼叫發生在服務端計算機上,節省服務端與瀏覽器之間往返次數,增加處理服務速度,
5.特征:
1)請求次數:
在請求轉發程序中,瀏覽器只發送一次請求,
2)請求地址:
只能向Tomcat服務器申請呼叫 當前網站下 的資源檔案地址,
request.getRequestDispathcer("/資源檔案名") ;//不要寫網站名
3)請求方式:
在請求轉發程序中,瀏覽器只發送一個了個Http請求協議包,參與本次請求的所有Servlet共享同一個請求協議包,因此這些Servlet接收的請求方式與瀏覽器發送的請求方式保持一致,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/441924.html
標籤:其他
