java轉發與重定向的區別(適合新人)

最近有人私信我說,我寫的博客有些膚淺,沒有深究,在此我統一回復一下,這些博客大多都是概念性東西,是用通俗的例子讓你理解這個技術或者知識到底是怎麼一樣原理。
所以我在後面都加着適合新人,我們都是從新人走過來的,知道初學者的那種迷茫,只會代碼,不懂原理和含義,就比如,註解,你不去學習理解,初學者根本就不知道那是個什麼東西,爲什麼要使用註解。
如果是資深大牛,那就不要看了,還是那句話,適合新人。


首先,要理解一個概念:
轉發與重定向都是一個轉折,就比如我們的小腿骨骼和大腿骨骼,將它們連在一起的膝蓋關節就是代碼鐘的轉發與重定向

區別:
在這裏插入圖片描述

1,理解的案例:

在這裏插入圖片描述
在這裏插入圖片描述

2,轉發代碼演示:

現在 設定人物 : 瀏覽器是 A
SerlvetB是:B
SerlvetC是:C

SerlvetB代碼

package com.aaa.Forward;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
* 項目名稱:Forward  
* 類描述:(轉發)
* 創建人:莫參商 
* 創建時間:2020-1-16 下午3:37:37  
* 修改人:acer     
* @version   
*   
 */
@WebServlet("/ServletB")
public class ServletA extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		    // 獲取請求攜帶的id
	        String id = req.getParameter("id");
	        System.out.println("A對B說:幫我帶份飯,id號是:" + id);
	        System.out.println("B對A說:好的");
	        System.out.println("----分割線----");
	        //---後面B直接在服務器將請求轉發給C---
	        //獲取轉發對象,後面括號指定了轉發的路徑
	        RequestDispatcher dispatcher = req.getRequestDispatcher("/ServletC");
	        //執行轉發功能,並將請求和響應一併轉發過去
	        dispatcher.forward(req, resp);
	}
	
}

ServletC代碼

package com.aaa.Forward;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/ServletC")
public class ServletC extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
				// 設置瀏覽器解析的格式,否則瀏覽器會出現亂碼
		        resp.setContentType("text/html;charset=utf-8");
		        // 獲取請求攜帶的id
		        String id = req.getParameter("id");
		        System.out.println("B對C說:幫A拿下快遞,id號是:" + id);
		        System.out.println("拿到快遞了");
		        // 獲取輸出流
		        PrintWriter writer = resp.getWriter();
		        // 將信息返回給瀏覽器
		        writer.println("拿到快遞了");

	}
	
}

結果:
在這裏插入圖片描述
在這裏插入圖片描述
訪問的路徑沒有變化,並且id值也得到了!

3,重定向代碼演示:

現在 設定人物 : 瀏覽器是 A
SerlvetB01是:B
SerlvetC01是:C

SerlvetB01代碼

package com.aaa.Redirect;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
* 項目名稱:Forward  
* 類描述:(重定向)
* 創建人:莫參商 
* 創建時間:2020-1-16 下午3:37:37  
* 修改人:acer     
* @version   
*   
 */
@WebServlet("/ServletB01")
public class ServletB01 extends HttpServlet{
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		    // 獲取請求攜帶的id
	        String id = req.getParameter("id");
	        System.out.println("A對B說:幫我拿帶份飯,id號是:" + id);
	        System.out.println("B對A說:我沒有空,你找下C");
	        System.out.println("----分割線----");
	        //---後面B直接在服務器將請求轉發給C---
	       resp.sendRedirect("/Forward/ServletC01");
	       
	}
	
}

SerlvetC01代碼

package com.aaa.Redirect;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/ServletC01")
public class ServletC01 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
				// 設置瀏覽器解析的格式,否則瀏覽器會出現亂碼
		        resp.setContentType("text/html;charset=utf-8");
		        // 獲取請求攜帶的id
		        String id = req.getParameter("id");
		        System.out.println("B對C說:幫A帶份飯,id號是:" + id);
		        System.out.println("飯到了");
		        // 獲取輸出流
		        PrintWriter writer = resp.getWriter();
		        // 將信息返回給瀏覽器
		        writer.println("飯到了");

	}
	
}

結果:
在這裏插入圖片描述
在這裏插入圖片描述
重定向:
在這裏插入圖片描述
轉發:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章