请求转发与重定向的区别和执行流程
生活随笔
收集整理的這篇文章主要介紹了
请求转发与重定向的区别和执行流程
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
請求轉發與重定向的區別和執行流程
文章目錄
- 請求轉發與重定向的區別和執行流程
- 1 請求轉發與重定向區別
- 2 現實生活的例子
- 2.1 重定向
- 2.2 請求轉發
- 3 重定向-流程圖、代碼、結果
- 3.1 流程圖
- 3.2 代碼BoyServlet
- 3.3 代碼GirlServlet
- 3.4 web.xml文件
- 3.5 結果
- 4 請求轉發-流程圖、代碼、結果
- 4.1 請求轉發-流程圖
- 4.2 代碼BoyServlet
- 4.3 代碼GirlServlet
- 4.4 web.xml文件
- 4.5 結果
本文通過現實生活的例子引出重定向和請求轉發,通過圖解的方式講解了整執行流程,希望可以幫助到大家
1 請求轉發與重定向區別
| 1 | 第二次請求誰請求的? | 瀏覽器 | 服務器 |
| 2 | 瀏覽器發送了幾次請求? | 2次以上 | 1次 |
| 3 | servlet可以共享request嗎? | 不可以 | 可以 |
| 4 | 地址欄是否發生改變? | 是 | 不是 |
| 5 | 瀏覽器地址欄顯示的哪一次訪問地址? | 最后一次 | 第一次 |
| 6 | 可以跳轉到什么資源? | 任意資源 | 項目內部 |
| 7 | 第二次的請求路徑是? | 絕對路徑 | 內部路徑 |
2 現實生活的例子
2.1 重定向
①:A對B說,幫忙拿下快遞
②:B對A說,沒有空,你找下C吧
③:A對C說,幫忙拿下快遞
④:C然后拿了快遞給A
2.2 請求轉發
①:A對B說,幫忙拿下快遞
②:第二步,B沒有空,直接找讓C幫A拿下快遞
③:C拿到了快遞并返回給A
3 重定向-流程圖、代碼、結果
3.1 流程圖
3.2 代碼BoyServlet
import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class BoyServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 獲取請求攜帶的idString id = request.getParameter("id");System.out.println("A對B說:幫我拿下快遞,id號是:" + id);System.out.println("B對A說:我沒有空,你找下C");System.out.println("----分割線----");// 重定向方式1:response.setStatus(302);response.setHeader("location", "/redirect/girl");// 重定向方式2:(正常用此方法)// response.sendRedirect("/redirect/girl");}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);} }3.3 代碼GirlServlet
import java.io.IOException; import java.io.PrintWriter;import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class GirlServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//設置瀏覽器解析的格式,否則瀏覽器會出現亂碼response.setContentType("text/html;charset=utf-8");//獲取請求攜帶的idString id = request.getParameter("id");System.out.println("A對C說,幫我拿下快遞,id號是:"+id);System.out.println("拿到快遞了");//獲取輸出流PrintWriter writer = response.getWriter();//將信息返回給瀏覽器writer.println("拿到快遞了");}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);} }3.4 web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>redirect</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><description></description><display-name>BoyServlet</display-name><servlet-name>BoyServlet</servlet-name><servlet-class>com.redirect.BoyServlet</servlet-class></servlet><servlet-mapping><servlet-name>BoyServlet</servlet-name><url-pattern>/boy</url-pattern></servlet-mapping><servlet><description></description><display-name>GirlServlet</display-name><servlet-name>GirlServlet</servlet-name><servlet-class>com.redirect.GirlServlet</servlet-class></servlet><servlet-mapping><servlet-name>GirlServlet</servlet-name><url-pattern>/girl</url-pattern></servlet-mapping> </web-app>3.5 結果
瀏覽器輸入
瀏覽器返回結果
控制臺打印結果
4 請求轉發-流程圖、代碼、結果
4.1 請求轉發-流程圖
4.2 代碼BoyServlet
import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class BoyServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 獲取請求攜帶的idString id = request.getParameter("id");System.out.println("A對B說:幫我拿下快遞,id號是:" + id);System.out.println("B對A說:好的");System.out.println("----分割線----");//---后面B直接在服務器將請求轉發給C---//獲取轉發對象,后面括號指定了轉發的路徑RequestDispatcher dispatcher = request.getRequestDispatcher("/girl");//執行轉發功能,并將請求和響應一并轉發過去dispatcher.forward(request, response);}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);} }4.3 代碼GirlServlet
import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;public class GirlServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 設置瀏覽器解析的格式,否則瀏覽器會出現亂碼response.setContentType("text/html;charset=utf-8");// 獲取請求攜帶的idString id = request.getParameter("id");System.out.println("B對C說:幫A拿下快遞,id號是:" + id);System.out.println("拿到快遞了");// 獲取輸出流PrintWriter writer = response.getWriter();// 將信息返回給瀏覽器writer.println("拿到快遞了");}protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);} }4.4 web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><display-name>dispatcher</display-name><welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.htm</welcome-file><welcome-file>index.jsp</welcome-file><welcome-file>default.html</welcome-file><welcome-file>default.htm</welcome-file><welcome-file>default.jsp</welcome-file></welcome-file-list><servlet><description></description><display-name>BoyServlet</display-name><servlet-name>BoyServlet</servlet-name><servlet-class>com.dispatcher.BoyServlet</servlet-class></servlet><servlet-mapping><servlet-name>BoyServlet</servlet-name><url-pattern>/boy</url-pattern></servlet-mapping><servlet><description></description><display-name>GirlServlet</display-name><servlet-name>GirlServlet</servlet-name><servlet-class>com.dispatcher.GirlServlet</servlet-class></servlet><servlet-mapping><servlet-name>GirlServlet</servlet-name><url-pattern>/girl</url-pattern></servlet-mapping> </web-app>4.5 結果
瀏覽器輸入
瀏覽器返回結果
控制臺結果
總結
以上是生活随笔為你收集整理的请求转发与重定向的区别和执行流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于时空相关属性模型的公交到站时间预测算
- 下一篇: 数字孪生及其在航空航天中的应用