转发和重定向的页面跳转方式

  • 页面跳转方式,本质上只有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测试
  • 网站首页

  • 测试1:普通转发页面
  • 响应页面(left),控制台输出(right)如下:重点关注响应页面的地址栏地址,由于访问次序为one.action --->转发--->main.jsp,所以显示one.action

  • 测试2:action转发页面
  • 响应页面(left),控制台输出(right)如下:重点关注响应页面的地址栏地址,由于访问次序为two.action --->转发---> one.action --->转发--->main.jsp,所以显示two.action

  • 测试3:普通重定向页面

  • 响应页面(left),控制台输出(right)如下:重点关注响应页面的地址栏地址,由于访问次序为three.action --->重定向--->main.jsp,所以显示main.jsp

  • 测试4:action重定向页面
  • 响应页面(left),控制台输出(right)如下:重点关注响应页面的地址栏地址,由于访问次序为four.action --->重定向---> three.action --->重定向--->main.jsp,所以显示main.jsp

SpringMVC 04: SpringMVC中4种页面跳转方式的更多相关文章

  1. springMVC 几种页面跳转方式

    今天主要写一下响应界面跳转的几种方式 1.在注解的方式中 1.1通过HttpServletResponse的API直接输出(不需要配置渲染器) controller类的主要代码 @Controller ...

  2. 在jsp中常用的内置对象(5个)小总结和两种页面跳转方式(服务器端调转、客户端跳转)的区别

    jsp中常用的几个内置对象: 一.request对象 主要作用:  (1)获取请求页面的信息   比如:request.getParameter("参数名");  (2)获取客户端 ...

  3. 原创+转发:微信小程序navigator、redirectTo、switchTab几种页面跳转方式

    什么是事件? 事件是视图层到逻辑层的通讯方式. 事件可以将用户的行为反馈到逻辑层进行处理. 详解(以常见的tap点击事情为例) 模板.wxml代码: <view id="tapTest ...

  4. mui几种页面跳转方式对比

    1.初始化时创建子页面 mui.init({ subpages: [{ url: your - subpage - url, //子页面HTML地址,支持本地地址和网络地址 id: your - su ...

  5. JS控制的几种页面跳转方式和传值

    第一种:<script language="javascript" type="text/javascript">window.location.h ...

  6. java servlet 几种页面跳转的方法及传值

    java servlet 几种页面跳转的方法及传值   java web 页面之间传值有一下这几种方式1.form 表单传递参数2.url地址栏传递参数3.session4.cookie5.appli ...

  7. Shiro中session超时页面跳转的处理

    问题描述 shiro在管理session后,在session超时会进行跳转,这里有两种情况需要考虑,一种是ajax方式的请求超时,一种页面跳转请求的超时. 本文从这两个方面分别考虑并处理. ajax请 ...

  8. 微信小程序从零开始开发步骤(六)4种页面跳转的方法

    用法:用于页面跳转,相当于html里面的<a></a>标签. API教程:https://mp.weixin.qq.com/debug/wxadoc/dev/component ...

  9. ReactNavigation中如何实现页面跳转

    一.ReactNavigation中如何实现页面跳转 因为每个屏幕组件(具有路由地址的组件)都是由App根组件自动创建并挂载的,App组件 在创建屏幕组件时,会自动传递进来一个props:   nav ...

随机推荐

  1. 七、服务器硬件及RAID配置实战

    一.RAID磁盘阵列介绍 磁盘阵列的全名(Redundant Arrays of Inexpensive Disk,RAID),中文简称是独立冗余磁盘阵列.冗余(如果磁盘出现故障,可以保证数据不丢) ...

  2. React技巧之导入组件

    正文从这开始~ 总览 在React中,从其他文件中导入组件: 从A文件中导出组件.比如说,export function Button() {} . 在B文件中导入组件.比如说,import {But ...

  3. identityserver4 (ids4)中如何获取refresh_token刷新令牌token 使用offline_access作用域

    ids4默认自带的api接口/api/connect/token 调用这个接口的时候,需要在body里面的 x-www-form-urlencoded模式下写 {     grant_type: &q ...

  4. 【微服务专题之】.Net6下集成消息队列上-RabbitMQ

    ​ 微信公众号:趣编程ACE关注可了解更多的.NET日常实战开发技巧,如需源码 请公众号后台留言 源码;[如果觉得本公众号对您有帮助,欢迎关注] .Net中RabbitMQ的使用 [微服务专题之].N ...

  5. 广西省行政村边界shp数据/广西省乡镇边界/广西省土地利用分类数据/广西省气象数据/降雨量分布数据/太阳辐射数据

    ​  数据下载链接:数据下载链接 广西壮族自治区,地处中国南部,北回归线横贯中部,属亚热带季风气候区.南北以贺州--东兰一线为界,此界以北属中亚热带季风气候区,以南属南亚热带季风气候区. 数据范围:全 ...

  6. 当在命令行输入"pip install xxx"

    当输入"pip install xxx"时发生了什么 不知道你在下载一些包的时候有没有什么疑惑,输入了"pip install xxx" ,系统是如何找到对应的 ...

  7. Tomcat深入浅出——最终章(六)

    前言 利用了六天的时间,对Tomcat的内容进行了整理. 学习不易.整理也不易,自己坚持的更了下来,很不错. 希望每一位在努力前行的小伙伴,都要相信坚持就会有收获. 本次Tomcat就探寻到这里,明年 ...

  8. java getway springcloud 记录请求数据

    java getway springcloud 记录请求数据,兼容post请求无参数和response返回无参数 方式1 import com.icar.web.icarutils.util.Clie ...

  9. 应用启动加速-并发初始化spring bean

    背景 随着需求的不断迭代,服务承载的内容越来越多,依赖越来越多,导致服务启动慢,从最开始的2min以内增长到5min,导致服务发布很慢,严重影响开发效率,以及线上问题的修复速度.所以需要进行启动加速. ...

  10. maven项目(引入依赖失败, pom.xml 报错\爆红)

    引入项目过程中,idea引入磁盘的某个的maven项目 这里以springboot项目以例子,发现pom.xml 的依赖大面积爆红,springboot的版本依赖也报错了,然后发现下面有进度条在下载, ...