最近有人私信我說,我寫的博客有些膚淺,沒有深究,在此我統一回復一下,這些博客大多都是概念性東西,是用通俗的例子讓你理解這個技術或者知識到底是怎麼一樣原理。
所以我在後面都加着適合新人,我們都是從新人走過來的,知道初學者的那種迷茫,只會代碼,不懂原理和含義,就比如,註解,你不去學習理解,初學者根本就不知道那是個什麼東西,爲什麼要使用註解。
如果是資深大牛,那就不要看了,還是那句話,適合新人。
首先,要理解一個概念:
轉發與重定向都是一個轉折,就比如我們的小腿骨骼和大腿骨骼,將它們連在一起的膝蓋關節就是代碼鐘的轉發與重定向
區別:
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("飯到了");
}
}
結果:
重定向:
轉發: