您好,登錄后才能下訂單哦!
本篇內容介紹了“Java中轉發與重定向的區別”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
轉發與重定向簡介
轉發和重定向都是實現頁面跳轉
也就是說,當我們訪問一個 Servlet 的時候 ,Servlet 幫我們跳轉到另一個界面。
轉發與重定向的區別
實現轉發調用的是 HttpServletRequest 對象中的方法
實現重定向調用的是 HttpServletResponse 對象中的方法
轉發時瀏覽器中的 url 地址不會發生改變
重定向時瀏覽器中的 url 地址會發生改變
轉發時瀏覽器只請求一次服務器
重定向時瀏覽器請求兩次服務器
轉發能使用 request 帶數據到跳轉的頁面
重定向能使用 ServletContext 帶數據到跳轉的頁面
代碼演示轉發和重定向
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 { //獲取表單提交過來的數據 //getParameter()方法可以獲取請求的參數信息 String name = req.getParameter("name"); String password = req.getParameter("password"); //打印獲取到的參數信息 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)){ //通過轉發實現跳轉 req.getRequestDispatcher("/success.jsp").forward(req,resp); }else { //通過重定向實現跳轉 resp.sendRedirect("/fail.jsp"); } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } }
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>
轉發和重定向如何帶數據到某個頁面
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 { //通過轉發帶數據 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>轉發和重定向傳代數據練習</title> </head> <body> <% //1、接收轉發傳代的數據 String name = (String) request.getAttribute("name"); out.println("轉發傳代的數據:"+name); %> </body> </html>
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 { //通過重定向帶數據 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>轉發和重定向傳代數據練習</title> </head> <body> <% //1、接收重定向傳代的數據 String name1 = (String)application.getAttribute("name"); out.println("重定向傳代的數據:"+name1); %> </body> </html>
練習
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> 加數1:<input type="number" name="one"> 加數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類型的數據轉換成int類型 String two=request.getParameter("two"); int t=Integer.parseInt(two);//強制轉換,將String類型的數據轉換成int類型 System.out.println(one+" "+two); int c=o+t; String co=String.valueOf(c);//將int類型的數據轉換成String類型 //轉發,可以攜帶數據 request.setAttribute("count",co); request.getRequestDispatcher("count.jsp").forward(request,response); //用于存放數據 // ServletContext s=this.getServletContext(); // s.setAttribute("count",co); //重定向只能依靠ServletContext獲取數據 // response.sendRedirect("count.jsp"); System.out.println(co); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request,response); } }
“Java中轉發與重定向的區別”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。