您好,登錄后才能下訂單哦!
本篇內(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); } }
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ù)到某個頁面
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>
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>
練習
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ì)量的實用文章!
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。