1.前提條件:
某些來(lái)自于瀏覽器發(fā)送請(qǐng)求,往往需要服務(wù)端中多個(gè)Servlet協(xié)同處理。但是瀏覽器一次只能訪問(wèn)一個(gè)Servlet粘茄,導(dǎo)致用戶需要手動(dòng)通過(guò)瀏覽器發(fā)起多次請(qǐng)求才能得到服務(wù)侨核。這樣增加用戶獲得服務(wù)難度,導(dǎo)致用戶放棄訪問(wèn)當(dāng)前網(wǎng)站祈惶。
2.提高用戶使用感受規(guī)則:無(wú)論本次請(qǐng)求涉及到多少個(gè)Servlet,用戶只需要【手動(dòng)】通知瀏覽器發(fā)起 一次請(qǐng)求即可
3.多個(gè)Servlet之間調(diào)用規(guī)則:
1)重定向解決方案
2)請(qǐng)求轉(zhuǎn)發(fā)解決方案
重定向解決方案:
1.工作原理: 用戶第一次通過(guò)【手動(dòng)方式】通知瀏覽器訪問(wèn)OneServlet雕旨。OneServlet工作完畢后,將TwoServlet地址寫(xiě)入到響應(yīng)頭location屬性中捧请,導(dǎo)致Tomcat將302狀態(tài)碼寫(xiě)入到狀態(tài)行凡涩。
在瀏覽器接收到響應(yīng)包之后,會(huì)讀取到302狀態(tài)疹蛉。此時(shí)瀏覽器自動(dòng)根據(jù)響應(yīng)頭中l(wèi)ocation屬性地址發(fā)起第二次請(qǐng)求活箕,訪問(wèn)TwoServlet去完成請(qǐng)求中剩余任務(wù)
2.實(shí)現(xiàn)命令:
response.sendRedirect("請(qǐng)求地址")
將地址寫(xiě)入到響應(yīng)包中響應(yīng)頭中l(wèi)ocation屬性
3.特征:
1)請(qǐng)求地址:
既可以把當(dāng)前網(wǎng)站內(nèi)部的資源文件地址發(fā)送給瀏覽器 (/網(wǎng)站名/資源文件名)也可以把其他網(wǎng)站資源文件地址發(fā)送給瀏覽器(http://ip地址:端口號(hào)/網(wǎng)站名/資源文件名)
2)請(qǐng)求次數(shù):
瀏覽器至少發(fā)送兩次請(qǐng)求,但是只有第一次請(qǐng)求是用戶手動(dòng)發(fā)送可款。后續(xù)請(qǐng)求都是瀏覽器自動(dòng)發(fā)送的育韩。
- 請(qǐng)求方式:
重定向解決方案中,通過(guò)地址欄通知瀏覽器發(fā)起下一次請(qǐng)求闺鲸,因此通過(guò)重定向解決方案調(diào)用的資源文件接收的請(qǐng)求方式一定是GET
4.缺點(diǎn):
重定向解決方案需要在瀏覽器與服務(wù)器之間進(jìn)行多次往返筋讨,大量時(shí)間消耗在往返次數(shù)上,增加用戶等待服務(wù)時(shí)間
請(qǐng)求轉(zhuǎn)發(fā)解決方案:
1.原理: 用戶第一次通過(guò)手動(dòng)方式要求瀏覽器訪問(wèn)OneServlet摸恍。
OneServlet工作完畢后,通過(guò)當(dāng)前的請(qǐng)求對(duì)象代替瀏覽器向Tomcat發(fā)送請(qǐng)求,申請(qǐng)調(diào)用TwoServlet蛮粮。
Tomcat在接收到這個(gè)請(qǐng)求之后益缎,自動(dòng)調(diào)用TwoServlet來(lái)完成剩余任務(wù)
2.實(shí)現(xiàn)命令: 請(qǐng)求對(duì)象代替瀏覽器向Tomcat發(fā)送請(qǐng)求
//1.通過(guò)當(dāng)前請(qǐng)求對(duì)象生成資源文件申請(qǐng)報(bào)告對(duì)象
RequestDispatcher report = request.getRequestDispatcher("/資源文件名");
//一定要以"/"為開(kāi)頭
//2.將報(bào)告對(duì)象發(fā)送給Tomcat
report.forward(當(dāng)前請(qǐng)求對(duì)象,當(dāng)前響應(yīng)對(duì)象)
3.優(yōu)點(diǎn):
1)無(wú)論本次請(qǐng)求涉及到多少個(gè)Servlet,用戶只需要手動(dòng)通過(guò)瀏覽器發(fā)送一次請(qǐng)求
- Servlet之間調(diào)用發(fā)生在服務(wù)端計(jì)算機(jī)上然想,節(jié)省服務(wù)端與瀏覽器之間往返次數(shù)增加處理服務(wù)速度
4.特征:
1)請(qǐng)求次數(shù)
在請(qǐng)求轉(zhuǎn)發(fā)過(guò)程中莺奔,瀏覽器只發(fā)送一次請(qǐng)求
2)請(qǐng)求地址
只能向Tomcat服務(wù)器申請(qǐng)調(diào)用當(dāng)前網(wǎng)站下資源文件地址
request.getRequestDispathcer("/資源文件名") 不要寫(xiě)網(wǎng)站名
3)請(qǐng)求方式
在請(qǐng)求轉(zhuǎn)發(fā)過(guò)程中,瀏覽器只發(fā)送一個(gè)了個(gè)Http請(qǐng)求協(xié)議包变泄。參與本次請(qǐng)求的所有Servlet共享同一個(gè)請(qǐng)求協(xié)議包令哟,因此這些Servlet接收的請(qǐng)求方式與瀏覽器發(fā)送的請(qǐng)求方式保持一致