溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中轉發(fā)與重定向的區(qū)別

發(fā)布時間:2021-06-18 10:51:47 來源:億速云 閱讀:139 作者:chen 欄目:編程語言

本篇內(nèi)容介紹了“Java中轉發(fā)與重定向的區(qū)別”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

 轉發(fā)與重定向簡介

轉發(fā)和重定向都是實現(xiàn)頁面跳轉

也就是說,當我們訪問一個 Servlet 的時候 ,Servlet 幫我們跳轉到另一個界面。

轉發(fā)與重定向的區(qū)別

  • 實現(xiàn)轉發(fā)調(diào)用的是 HttpServletRequest 對象中的方法

  • 實現(xiàn)重定向調(diào)用的是 HttpServletResponse 對象中的方法

    • 轉發(fā)時瀏覽器中的 url 地址不會發(fā)生改變

    • 重定向時瀏覽器中的 url 地址會發(fā)生改變

  • 轉發(fā)時瀏覽器只請求一次服務器

  • 重定向時瀏覽器請求兩次服務器

    • 轉發(fā)能使用 request 帶數(shù)據(jù)到跳轉的頁面

    • 重定向能使用 ServletContext 帶數(shù)據(jù)到跳轉的頁面

代碼演示轉發(fā)和重定向

package servlet;   import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;   @WebServlet("/login") public class ServletDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取表單提交過來的數(shù)據(jù) //getParameter()方法可以獲取請求的參數(shù)信息 String name = req.getParameter("name"); String password = req.getParameter("password");   //打印獲取到的參數(shù)信息 System.out.println("name:"+name); System.out.println("password:"+password);   //如果name=admin,password=123,則跳轉到succee.jsp,否則跳轉到fail.jsp if("admin".equals(name)&&"123".equals(password)){ //通過轉發(fā)實現(xiàn)跳轉 req.getRequestDispatcher("/success.jsp").forward(req,resp); }else { //通過重定向?qū)崿F(xiàn)跳轉 resp.sendRedirect("/fail.jsp"); } }   @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp);   } }

Java中轉發(fā)與重定向的區(qū)別

Java中轉發(fā)與重定向的區(qū)別

Java中轉發(fā)與重定向的區(qū)別

Java中轉發(fā)與重定向的區(qū)別

JSP代碼

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>登錄</title> </head> <body> <form action="/login"> <table align="center"> <tr> <td>賬號:</td> <td><input type="text" name="name"></td> </tr> <tr> <td>密碼:</td> <td><input type="text" name="password"></td> </tr> <tr> <td><input type="submit" value="登錄"></td> <td><input type="reset" value="重置"></td> </tr> </table> </form> </body> </html>

轉發(fā)和重定向如何帶數(shù)據(jù)到某個頁面

Java中轉發(fā)與重定向的區(qū)別

package servlet; import javax.servlet.ServletContext;  import javax.servlet.ServletException;  import javax.servlet.annotation.WebServlet;  import javax.servlet.http.HttpServlet;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import java.io.IOException; @WebServlet("/login")  public class ServletDemo extends HttpServlet {  @Override  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //通過轉發(fā)帶數(shù)據(jù)  req.setAttribute("name","張三");  req.getRequestDispatcher("/send.jsp").forward(req,resp); } @Override  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  doGet(req, resp); }  }

send.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>轉發(fā)和重定向傳代數(shù)據(jù)練習</title> </head> <body> <% //1、接收轉發(fā)傳代的數(shù)據(jù) String name = (String) request.getAttribute("name"); out.println("轉發(fā)傳代的數(shù)據(jù):"+name);   %>   </body> </html>

Java中轉發(fā)與重定向的區(qū)別

package servlet; import javax.servlet.ServletContext;  import javax.servlet.ServletException;  import javax.servlet.annotation.WebServlet;  import javax.servlet.http.HttpServlet;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;  import java.io.IOException; @WebServlet("/login")  public class ServletDemo extends HttpServlet {  @Override  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    //通過重定向帶數(shù)據(jù)  ServletContext servletContext = this.getServletContext();  servletContext.setAttribute("name","王二麻子");  resp.sendRedirect("/send2.jsp"); } @Override  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  doGet(req, resp); }  }

send2.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>轉發(fā)和重定向傳代數(shù)據(jù)練習</title> </head> <body> <% //1、接收重定向傳代的數(shù)據(jù) String name1 = (String)application.getAttribute("name"); out.println("重定向傳代的數(shù)據(jù):"+name1); %> </body> </html>

練習

Java中轉發(fā)與重定向的區(qū)別

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="CountServlet" method="post"> <h4>加法計算器</h4> 加數(shù)1:<input type="number" name="one"> 加數(shù)2:<input type="number" name="two"> <input type="submit" value="計算"> </form> </body> </html>

count.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> 計算結果:<%=request.getAttribute("count")%> <!--計算結果:<%=application.getAttribute("count")%>--> </body> </html>

Servlet

package servlet; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/CountServlet") public class CountServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String one=request.getParameter("one"); int o=Integer.parseInt(one);//強制轉換,將String類型的數(shù)據(jù)轉換成int類型 String two=request.getParameter("two"); int t=Integer.parseInt(two);//強制轉換,將String類型的數(shù)據(jù)轉換成int類型 System.out.println(one+" "+two); int c=o+t; String co=String.valueOf(c);//將int類型的數(shù)據(jù)轉換成String類型 //轉發(fā),可以攜帶數(shù)據(jù) request.setAttribute("count",co); request.getRequestDispatcher("count.jsp").forward(request,response); //用于存放數(shù)據(jù) // ServletContext s=this.getServletContext(); // s.setAttribute("count",co); //重定向只能依靠ServletContext獲取數(shù)據(jù) // response.sendRedirect("count.jsp"); System.out.println(co); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }

“Java中轉發(fā)與重定向的區(qū)別”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI