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

  • 页面跳转方式,本质上只有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. 深入理解 volatile 关键字

    volatile 关键字是 Java 语言的高级特性,但要弄清楚其工作原理,需要先弄懂 Java 内存模型.如果你之前没了解过 Java 内存模型,那可以先看看之前我写过的一篇「深入理解 Java 内 ...

  2. mysql中innodb和myisam区别

    前言 InnoDB和MyISAM是很多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,5.7之后就不一样了. 1.事务和外键 ● InnoDB具有事务,支持4个事务隔离级别,回滚,崩溃修 ...

  3. Jenkins + maven + svn 自动部署项目

    1.安装Jenkins sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins. ...

  4. 实践GoF的23种设计模式:装饰者模式

    摘要:装饰者模式通过组合的方式,提供了能够动态地给对象/模块扩展新功能的能力.理论上,只要没有限制,它可以一直把功能叠加下去,具有很高的灵活性. 本文分享自华为云社区<[Go实现]实践GoF的2 ...

  5. multiset 用法复习

    前言 看题解上有 \(\text{multiset}\) 然后发现没脑子的我又忘了... 正文 \(\text{multiset}\) 可以看成一个序列,插入一个数,删除一个数都能够在 \(O(\lo ...

  6. 攻防世界MISC—进阶区21-30

    21.easycap 得到一个pcap文件,协议分级统计,发现都是TCP协议 直接追踪tcp流,得到FLAG 22.reverseMe 得到一张镜面翻转的flag,放入PS中,图像-图像旋转-水平翻转 ...

  7. 手机APP无法抓包HTTPS解决方案

    问题表现:某个APP的HTTPS流量抓取不到,Fiddler报错,但可以正常抓取其它的HTTPS流量 可能原因: 1.Flutter应用,解决方案:https://www.cnblogs.com/lu ...

  8. 【PostgreSQL 】PostgreSQL 15对distinct的优化

    示例表 table t_ex; c1 | c2 ----+---- 2 | B 4 | C 6 | A 2 | C 4 | B 6 | B 2 | A 4 | B 6 | C 2 | C 以下SQL语 ...

  9. 5-21 拦截器 Interceptor

    Spring MVC拦截器 什么是拦截器 拦截器是SpringMvc框架提供的功能 它可以在控制器方法运行之前或运行之后(还有其它特殊时机)对请求进行处理或加工的特定接口 常见面试题:过滤器和拦截器的 ...

  10. 5-20 Web服务器和Nginx

    什么是Web服务器 简单来说 Web服务器就是一个能够接收http请求并作出响应的java程序 我们再二阶段编写的webServer项目其实就是我们手写的Web服务器 我们现在开发的标准SpringB ...