SpringMVC 04: SpringMVC中4種頁面跳轉方式

轉發和重定向的頁面跳轉方式

  • 頁面跳轉方式,本質上只有2種方式:轉發 + 重定向
  • 但在SpringMVC的具體實現上,轉發可以細分為:普通的頁面轉發 + 經由action方法的頁面轉發
  • 重定向可以細分為:普通的頁面重定向 + 經由action方法的頁面重定向
  • 所以在具體的程式碼實現層面上,頁面跳轉可以細分為4種方式
  • 本例中的SpringMVC項目配置和SpringMVC部落格集(指SpringMVC 02)一致
  • 在webapp/admin目錄下新建main.jsp,作為各種請求的最終響應頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>main.jsp</title>
</head>
<body>
<h2>main......page......</h2>
</body>
</html>
  • webapp/index.jsp如下,是包含四種頁面跳轉方式的前端頁面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>index.jsp</title>
</head>
<body>
<h2>4種轉發和重定向的方式</h2>
<hr>
<a href="${pageContext.request.contextPath}/one.action">1.普通轉發頁面(對請求的默認處理方式)</a><br><br>
    
<a href="${pageContext.request.contextPath}/two.action">2.action轉發頁面</a><br><br>
    
<a href="${pageContext.request.contextPath}/three.action">3.普通重定向頁面</a><br><br>
    
<a href="${pageContext.request.contextPath}/four.action">4.action重定向頁面</a>
</body>
</html>
  • 新建控制器:JumpAction,其中含有測試4種頁面跳轉方式的action方法
package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class JumpAction {
    
    /**
        1.
    	之前在springmvc.xml中配置了視圖解析器,這是SpringMVC處理頁面跳轉的默認方式,屬於普通轉發跳轉
    	會將頁面轉發到action方法的返回值和前綴後綴拼接形成的路徑所對應資源頁面
    */
    @RequestMapping("/one")
    public String one(){
        System.out.println("one action被訪問......");
        return "main";
    }

    /**    2.
     *     下面是我們註冊的視圖解析器的父類:UrlBasedViewResolver,中的幾個參數
     *     通過對底層源程式碼的解讀,可知在action方法的返回值字元串中,如果以"redirect:"或者"forward:"開頭則不會執行視圖解析器的路徑拼接
     *     而是會按照redirect或forward完成頁面重定向或頁面跳轉
     *
     *     public static final String REDIRECT_URL_PREFIX = "redirect:";
     *     public static final String FORWARD_URL_PREFIX = "forward:";
     *     private String prefix = "";
     *     private String suffix = "";
     *     
     *     注意:不管要使用action的頁面轉發或者是action的頁面重定向,由於action方法是控制器內部的方法
     *     所以要想訪問action方法必須訪問到控制SpringMVC控制器,而要訪問控制器,前提是要能被SpringMVC核心處理器處理(也就是底層的servlet)
     *     而要想被底層servlet處理,必須滿足請求路徑的通配條件,這是我們在web.xml文件中配置好的"*.action"
     *     所以要在請求的末尾加上".action"以滿足請求的通配要求,才有資格被交給SpringMVC的控制器中的方法處理
     */
    @RequestMapping("/two")
    public String two(){
        System.out.println("other action被訪問......");
        return "forward:/one.action";
    }

    
    /**
     *    如果是普通重定向,直接重定向到項目資源,不需要控制器中的action方法的處理,請求路徑後不用跟".action",直接寫重定向的資源路徑即可
     *
     */
    @RequestMapping("/three")
    public String three(){
        System.out.println("three action被訪問......");
        return "redirect:/admin/main.jsp";
    }

    
    /**
     *    要在請求的末尾加上".action"以滿足請求的通配要求,才有資格被交給SpringMVC的控制器中的方法執行
     *
     */
    @RequestMapping("/four")
    public String four(){
        System.out.println("other action被訪問....");
        return "redirect:/three.action";
    }
}
  • 部署並啟動tomcat測試
  • 網站首頁

image

  • 測試1:普通轉發頁面
  • 響應頁面(left),控制台輸出(right)如下:重點關注響應頁面的地址欄地址,由於訪問次序為one.action —>轉發—>main.jsp,所以顯示one.action

image

  • 測試2:action轉發頁面
  • 響應頁面(left),控制台輸出(right)如下:重點關注響應頁面的地址欄地址,由於訪問次序為two.action —>轉發—> one.action —>轉發—>main.jsp,所以顯示two.action

image

  • 測試3:普通重定向頁面

  • 響應頁面(left),控制台輸出(right)如下:重點關注響應頁面的地址欄地址,由於訪問次序為three.action —>重定向—>main.jsp,所以顯示main.jsp

image

  • 測試4:action重定向頁面
  • 響應頁面(left),控制台輸出(right)如下:重點關注響應頁面的地址欄地址,由於訪問次序為four.action —>重定向—> three.action —>重定向—>main.jsp,所以顯示main.jsp

image

Tags: