您好,登錄后才能下訂單哦!
這篇文章主要介紹“JavaWeb重定向和請求轉發怎么實現”,在日常操作中,相信很多人在JavaWeb重定向和請求轉發怎么實現問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”JavaWeb重定向和請求轉發怎么實現”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
請求轉發: xxServlet收到請求,然后直接轉發給yyServlet,然后yyServlet返回給客戶端。整個過程中,客戶端發出一個請求,收到一個響應。
重定向:xxServlet收到請求,然后發出一個響應給客戶端,客戶端立即又發送一個請求訪問xxServlet中給的URL,即yyServlet的路徑,然后yyServlet給客戶端一個響應。整個過程中,客戶端發出兩個請求,收到兩個響應。
請求轉發:利用RequestDispather接口中的forward方法實現請求轉發。
請求重定向:利用HttpServletResponse的sendRedirect方法實現請求重定向。
(1)請求轉發
RequestDispather實例對象是由Servlet引擎創建的,它用于包裝一個要被其他資源調用的資源,(例如Servlet,HTML文件,JSP文件等),并可以通過其中的方法將客戶端的請求轉發給所包裝的資源。
示例代碼如下:
forwardTest.html
<!DOCTYPE html><html> <head> <title>forwardTest.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"> <meta name="description" content="this is my page"> <meta name="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> </head> <body> <a href="http://localhost:8080/MyWebProject/forwardServlet">forward</a> </body></html>
forwardServlet.java
package forwardTest;import java.io.IOException;import java.io.PrintWriter;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 forwardServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out=response.getWriter(); System.out.println("forwardServlet's doGet"); String path="testServlet"; //1.調用HttpServletRequest的getRequestDispatcher()方法,調用時需要傳入轉發的地址; RequestDispatcher requestDispatcher=request.getRequestDispatcher(path); //2.調用HttpServletRequest的forward(request,response)方法進行請求的轉發; requestDispatcher.forward(request,response); } }
testServlet.java
package forwardTest; 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 testServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out=response.getWriter(); System.out.println("testServlet's doGet"); } }
運行forwardTest.html后,點擊超鏈接,控制臺輸出:
可以看出, forwardServlet收到客戶端的請求后,調用HttpServletRequest的getRequestDispatcher()方法,利用forward(request,response)方法進行請求轉發,將請求直接轉發給testServlet,testServlet將響應返回給客戶端。達到了請求轉發的目的。
(2)請求重定向
redirectServlet.java
package forwardTest;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 redirectServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("redirectServlet's doGet"); String path="testServlet"; response.sendRedirect(path); } }
執行請求的重定向,直接調用response.sendRedirect(path)方法,path為重定向的地址。
本質區別:請求的轉發只發出了一次請求,而重定向則發出了兩次請求。在瀏覽器的開發工具中可以看到請求的次數:
具體的區別體現在:
(1)請求的轉發:地址欄是初次發出請求的地址。
請求的重定向:地址欄不是初次發出請求的地址,為最后響應的地址。
(2)請求轉發:在最終的Servlet中,request和中轉的那個request是同一個對象。
請求的重定向:在最終的Servlet中,request和中轉的那個request不是同一個對象。
(3)請求轉發:只能轉發給當前web應用的資源。
請求的重定向:可以重定向到任何資源。
(4)請求的轉發:/代表的是當前web應用的根目錄。
請求的重定向:/代表的是當前web站點的根目錄。
到此,關于“JavaWeb重定向和請求轉發怎么實現”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。