JSP重定向轉發傳參
阿新 • • 發佈:2019-01-03
重定向傳參格式:response.sendRedirect("http://www.baidu.com");
內部轉發傳參格式:request.getRequestDispatcher("../login.jsp").forward(request, response);
我們通過程式碼來對比重定向和轉發傳參的特點區別:
目錄結構(黑色部分不需要用到,方便理解):
首先我們建立一個動態web工程,在WebContent資料夾下建立一個jsp介面(例:login.jsp),在form表單裡面的action裡面寫下地址,實現前臺提交資料給後臺處理後,後臺jsp自動跳轉到另一個jsp頁面:
login.jsp:
<form action="back/dologin.jsp" method="post" onsubmit="return checklogin()"> 達芬奇賬號:<input type="text" id="uname" name="uname"/><br/> 達芬奇密碼:<input type="password" id="pwd" name="pwd"/><br/> 達芬奇顏色:<input type="checkbox" name="color" value="紅色"/>紅色 <input type="checkbox" name="color" value="黃色"/>黃色 <input type="checkbox" name="color" value="藍色"/>藍色<br/> <input type="submit" value="登入"/> </form>
然後我們來到back資料夾下面的dologin.jsp
首先設定位元組碼,然後從請求物件中獲取使用者提交的使用者名稱和密碼的值,通過表單的name屬性值來獲取,再通過重定向和轉發來實現後臺jsp自動跳轉到另一個jsp頁面。
<%@page import="java.util.Arrays"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <% request.setCharacterEncoding("UTF-8"); String uname = request.getParameter("uname"); String pwd = request.getParameter("pwd"); String color[] = request.getParameterValues("color"); System.out.println(uname+"\t"+pwd+"\t"+Arrays.toString(color)); if("hjbzf".equals(uname) && "123".equals(pwd)){ /* 重定向之後的頁面取不到請求中的資訊 會發送兩次請求 位址列會發生變化 重定向可以訪問當前伺服器以外的資源 重定向不能訪問web-inf下的資源 */ /* response.sendRedirect("http://www.baidu.com"); */ /* out.print("<script>alert('登陸成功...');location.href='../zf1/success.jsp'</script>"); */ response.sendRedirect("../success.jsp"); }else{ /* 內部轉發後的頁面可以取到請求中的資訊 傳送一次請求 位址列不會發生變化 內部轉發只能訪問當前伺服器中的資源 可以訪問web-inf下的資源 */ request.getRequestDispatcher("../login.jsp").forward(request, response); /*request.getRequestDispatcher("http://www.baidu.com").forward(request, response);*/ response.setContentType("text/html;charset=UTF-8"); /* out.print("<script>alert('使用者名稱或密碼錯誤...');location.href='../login.jsp'</script>"); */ } %>
由此上面程式碼我們知道了,在重定向中:1、重定向之後的頁面取不到請求中的資訊;2、會發送兩次請求;3、位址列會發生變化;4、重定向可以訪問當前伺服器以外的資源;5、重定向不能訪問web-inf下的資源。
在轉發中:1、內部轉發後的頁面可以取到請求中的資訊;2、傳送一次請求;3、位址列不會發生變化;4、內部轉發只能訪問當前伺服器中的資源;5、可以訪問web-inf下的資源。