• 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" %>
    
    
        main.jsp
    
    
    

    main......page......

    • webapp/index.jsp如下,是包含四种页面跳转方式的前端页面
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        index.jsp
    
    
    

    4种转发和重定向的方式


    "${pageContext.request.contextPath}/one.action">1.普通转发页面(对请求的默认处理方式)

    "${pageContext.request.contextPath}/two.action">2.action转发页面

    "${pageContext.request.contextPath}/three.action">3.普通重定向页面

    "${pageContext.request.contextPath}/four.action">4.action重定向页面
    • 新建控制器: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

  • 相关阅读:
    ThreadLocal原理总结(建议收藏观看)
    高校教务系统登录页面JS分析——南京邮电大学
    【1】MongoDB的安装以及连接
    Python150题day07
    9月13-14日上课内容 第三章 ELK日志分析系统及部署实例
    ffmpeg 滤镜实现不同采样率多音频混音
    Android网络请求(1)
    使用自开发的代理服务器解决 SAP UI5 FileUploader 上传文件时遇到的跨域访问错误试读版
    自定义mvc框架实现
    ElasticSearch join连接查询
  • 原文地址:https://www.cnblogs.com/nefu-wangxun/p/16648698.html