• springmvc请求转发和重定向的四种跳转方式


    一、本质

    1、本质还是两种跳转,即 请求转发和重定向,衍生出四种,分别是:

    • 请求转发到页面
    • 请求转发到action
    • 重定向到页面
    • 重定向到action

    二、准备页面

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Titletitle>
        <script src="js/jquery-3.3.1.js">script>
    head>
    <body>
    <a href="${pageContext.request.contextPath}/one.action">1、请求转发到页面a><br/>
    <a href="${pageContext.request.contextPath}/two.action">2、请求转发到actiona><br/>
    <a href="${pageContext.request.contextPath}/three.action">3、重定向到页面a><br/>
    <a href="${pageContext.request.contextPath}/four.action">4、重定向到actiona><br/>
    <a href="${pageContext.request.contextPath}/five.action">5、跳任意页面a><br/>
    body>
    html>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    三、四种跳转方式

    1、请求转发到页面

    @RequestMapping("/one")
        public String one(){
            System.out.println("这是请求转发页面跳转.........");
            //默认是请求转发,使用视图解析器拼接前缀后缀进行页面跳转
            return "main";  
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2、请求转发到action

     @RequestMapping("/two")
        public String two(){
            System.out.println("这是请求转发action跳转.........");
            //  /admin/  /other.action  .jsp
            //forward: 这组字符串可以屏蔽前缀和后缀的拼接.实现请求转发跳转
            return "forward:/other.action";  //默认是请求转发,使用视图解析器拼接前缀后缀进行页面跳转
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    @RequestMapping("/other")
        public String other(){
            System.out.println("进入到OtherController........");
            return "main";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、重定向到页面

    @RequestMapping("/three")
        public String three(){
            System.out.println("这是重定向页面.......");
            //redirect:  这组字符串可以屏蔽前缀和后缀的拼接.实现重定向跳转
            return "redirect:/admin/main.jsp";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4、重定向到action

    @RequestMapping("/four")
        public String four(){
            System.out.println("这是重定向action.......");
            //redirect:  这组字符串可以屏蔽前缀和后缀的拼接.实现重定向跳转
            return "redirect:/other.action";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    5、额外补充:跳转任意目录下的页面

    @RequestMapping("/five")
        public String five(){
            System.out.println("这是随便跳.......");
            return "forward:/fore/login.jsp";
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    四、简单源码分析视图解析器InternalResourceViewResolver

    InternalResourceViewResolver类 继承UrlBasedViewResolver
    在这里插入图片描述
    UrlBasedViewResolver类中,包含了前缀、后缀以及重定向和转发的属性

    public class UrlBasedViewResolver extends AbstractCachingViewResolver implements Ordered {
        public static final String REDIRECT_URL_PREFIX = "redirect:";
        public static final String FORWARD_URL_PREFIX = "forward:";
        @Nullable
        private Class<?> viewClass;
        private String prefix = "";
        private String suffix = "";
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    当action重定向或者转发到某个页面地址时,会默认根据配置文件加上前缀和后缀,就像这样

    
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/admin/"/>
            <property name="suffix" value=".jsp"/>
        bean>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    如果不想加上该前缀和后缀,此时可以使用视图解析器的静态常量值
    redirect和forward,这两个字符串可以屏蔽前缀和后缀的拼接.实现页面的转发和重定向跳转

    return "forward:/fore/login.jsp";
    或者
    return "redirect:/admin/main.jsp";
    
    • 1
    • 2
    • 3
  • 相关阅读:
    代码随想录二刷:数组
    【MDP】②quadprog求解正定、半正定、负定二次规划
    Android Studio常见问题
    JsonUtils
    echarts重叠柱状图(非堆叠柱状图)
    MySQL8.0.x 版本安装步骤傻瓜式教程【官方版】
    [NAS] Synology (群晖) DSM同步数据到阿里云盘
    主从数据一致性
    Apache Hudi 如何加速传统的批处理模式?
    LeetCode 498. 对角线遍历
  • 原文地址:https://blog.csdn.net/weixin_43860634/article/details/127619989