1. 程式人生 > >JSP重定向轉發傳參

JSP重定向轉發傳參

重定向傳參格式: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下的資源。