Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一)

学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅

第五章、SpringMVC控制器开发详解 三

5.1 核心要点

3.流程跳转

5.2 JavaWeb中流程跳转的核心回顾

5.2.1 JavaWeb中流程跳转的核心代码

在这里插入图片描述

5.2.2 JavaWeb页面跳转方式回顾

在这里插入图片描述

在这里插入图片描述

5.2.3测试

在这里插入图片描述

在web.xml里添加Servlet然后执行

在这里插入图片描述

可以看到通过url拼接可以获取传递的数据

5.3 Spring MVC的四种跳转形式

  1. 四种跳转指的是:在SpringMVC中控制器与JSP或者控制器与控制器之间的跳转。
    1. Controller - - forward —> JSP
    2. Controller - - redirect—> JSP
    3. Controller - - forward —> Controller
    4. Controller - - redirect—> Controller
  2. SpringMVC的四种跳转,底层上就是对Servlet跳转的封装。
  3. 默认情况下SpringMVC中控制器通过视图解析器跳转到JSP页面,通过的是forward形式。

5.3.1 控制器forward页面

  • 编码

    // 方式1 结合ViewResolver进行拼接成完整页面,并进行forward跳转
    @RequestMapping("view1")
    public String view1() {System.out.println("ViewController.view1");**return "result";**
    }// 方式2 使用forward关键字,视图解析器的拼接会失效,必须写完整路径
    @RequestMapping("view1")
    public String view1() {System.out.println("ViewController.view1");**return "forward:/result1.jsp";**
    }

5.3.2 控制器redirect页面

  • 编码

    // 使用了redirect关键字,视图解析器的拼接会失效,也要写完整路径
    @RequestMapping("view3")
    public String view3() {System.out.println("ViewController.view1");**return "redirect:/result.jsp";**
    }
    

5.3.3 forward控制器相互跳转

  • 是否存在控制器间相互跳转的需求

    是的,例如下图逻辑,登录后进入展示信息的页面,登录逻辑和展示信息逻辑属于两个不同的Controller,所以控制器间需要相互跳转

    在这里插入图片描述

  • 编码

    @Controller
    @RequestMapping("forwardController")
    public class ForwardController {@RequestMapping("forward1")public String forward1() {System.out.println("ForwardController.forward1");return "forward:/forwardController/forward2";}@RequestMapping("/forward2")public String forward2() {System.out.println("ForwardController.forward2");return "result";}
    }
    // 执行后控制台输出结果与预期一致
    

5.3.4 redirect控制器相互跳转

  • 编码

    @Controller
    @RequestMapping("redirectController")
    public class RedirectController {@RequestMapping("redirect1")public String redirect1() {System.out.println("RedirectController.redirect1");return "redirect:/redirectController/redirect2";}@RequestMapping("/redirect2")public String redirect2() {System.out.println("RedirectController.redirect2");return "result";}
    }
    // 执行后控制台输出结果与预期一致
    

5.4 Web作用域处理

5.4.1 JavaWeb中作用域回顾

  • 三种作用域及其使用场景回顾

    在这里插入图片描述

    在这里插入图片描述

5.4.2 SpringMVC中作用域处理

  • 基本使用方式及其存在的问题

    在这里插入图片描述

    @RequestMapping("view1")
    public String view1(HttpServletRequest request) {System.out.println("View2Controller.view2");request.setAttribute("name","xiaojr");return "result1";
    }
    // 在result1.jsp中通过${name}获取
    //存在问题:与ServletAPI耦合,同时与视图模板技术(jsp、ftl)耦合,在SpringMVC中不建议使用
    

    在这里插入图片描述

  • SpingMVC中request作用域的处理

    • 代码

      # 基于Model的方式 
      @RequestMapping("view2")
      public String view2(Model model) {// 等同于 request.addAttribute();model.addAttribute("name", "suns");return "result1";
      }
      # 基于ModelMap的方式 同上
      @RequestMapping("view3")
      public String view3(ModelMap modelMap) {modelMap.addAttribute("name", "suns2");return "result1";
      }
      
    • Model、ModelMap相关细节分析

      1. 通过Model、ModelMap进行作用域处理,可以解决视图模板技术耦合的问题

        因为SpringMVC通过视图解析器区别JSP、FreeMaker,再将Model、ModelMap的数据放到request或root里面运行。

        在这里插入图片描述

      2. SpringMVC中提供Model和ModelMap两种方式处理request作用域,他们的区别是什么

        虽然两者表现形式以及声明的形参类型都不同,但是在运行时,SpringMVC会动态提供对应的实现类型,名字是BindingAwareModelMap。所以本质上两者相同。

    下一章:Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(二)视图模板、静态资源访问

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/191996.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络入门---网络编程初步认识和实践

目录标题 前言准备工作udpserver.hpp成员变量构造函数初始化函数(socket,bind)start函数(recvfrom) udpServer.ccudpClient.hpp构造函数初始化函数run函数(sendto) udpClient.cc测试 前言 在上一篇文章中我们初步的认识了端口号的作用,ip地址和MAC地址在网络通信时…

QT 中 QProgressDialog 进度条窗口 备查

基础API //两个构造函数 QProgressDialog::QProgressDialog(QWidget *parent nullptr, Qt::WindowFlags f Qt::WindowFlags());QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *…

面试 Java 基础八股文十问十答第三期

面试 Java 基础八股文十问十答第三期 作者:程序员小白条,个人博客 ⭐点赞⭐收藏⭐不迷路!⭐ 21.说下Java8的Stream流的常用方法 答: forEach遍历、find、match进行匹配reduce进行归约,比如求和,乘,除聚合…

淘宝用户体验VOC标签体系

本专题共10篇内容,包含淘宝APP基础链路过去一年在用户体验数据科学领域(包括商详、物流、性能、消息、客服、旅程等)一些探索和实践经验。 在商详页基于用户动线和VOC挖掘用户决策因子带来浏览体验提升;在物流侧洞察用户求助时间与…

计算机组成原理笔记——存储器(静态RAM和动态RAM的区别,动态RAM的刷新, ROM……)

■ 随机存取存储器 ■ 1.随机存取存储器:按存储信息的原理不同分为:静态RAM和动态RAM 2.静态RAM(SRAM):用触发器工作原理存储信息,但电源掉电时,存储信息会丢失具有易失性。 3.存储器的基本单元…

springboot监听器模式源码精讲

1.前言 很多时候我们看源码的时候看不下去,其中一个原因是系统往往使用了许多设计模式,如果你不清楚这些设计模式,这无疑增加了你阅读源码的难度。 springboot中就大量使用了设计模式,本文主要介绍其中的一种监听器模式&#xf…

数学建模-基于BL回归模型和决策树模型对早产危险因素的探究和预测

整体求解过程概述(摘要) 近年来,全球早产率总体呈上升趋势,在我国,早产儿以每年 20 万的数目逐年递增,目前早产已经成为重大的公共卫生问题之一。据研究,早产是威胁胎儿及新生儿健康的重要因素,可能会造成死亡或智力体…

深度学习 -- 神经网络

1、神经网络的历史 2、 M-P模型 M-P模型是首个通过模仿神经元而形成的模型。在M-P模型中,多个输入节点对应一个输出节点y。每个输入x,乘以相应的连接权重w,然后相加得到输出y。结果之和如果大于阈值h,则输出1,否则输出0。输入和输出均是0或1。 公式2.1: …

Redis 安装部署

文章目录 1、前言2、安装部署2.1、单机模式2.1.1、通过 yum 安装(不推荐,版本老旧)2.1.1、通过源码编译安装(推荐) 2.2、主从模式2.3、哨兵模式2.4、集群模式2.5、其他命令2.6、其他操作系统 3、使用3.1、Java 代码 —…

神经网络中的 Grad-CAM 热图(Gradient-weighted Class Activation Mapping)

Grad-CAM(Gradient-weighted Class Activation Mapping)是一种用于可视化卷积神经网络(CNN)中特定类别的激活区域的方法。其基本思想是使用网络的梯度信息来获取关于特定类别的空间定位信息。 Grad-CAM 的具体公式如下&#xff1…

Python逐步打造惊艳的折线图

大家好,Matplotlib可以快速轻松地使用现成的函数绘制图表,但是微调步骤需要花费更多精力。今天本文将介绍如何使用Matplotlib绘制吸引人的图表,实现折线图的惊艳变身。 1.数据 为了说明方法,本文使用了包含过去50年各国GDP信息的…

QT 中 QTimer 类 备查

基础 // 指定了父对象, 创建的堆内存可以自动析构 QTimer::QTimer(QObject *parent nullptr);// 根据指定的时间间隔启动或者重启定时器, 需要调用 setInterval() 设置时间间隔 void QTimer::start();// 启动或重新启动定时器,超时间隔为msec毫秒。 void QTimer::…

韩语语法中에和로/으로区别,柯桥发音入门韩语培训学校

에和로/으로在行动的去向与到达或涉及的地点一致时,二者可以互换。 但是에表示到达或涉及的具体地点,而로/으로表示的时动作指向的方向或经过的地点。 在只表示去向而不表示具体地点时,只能用로/으로,而在只表示具体地点而不表示方…

2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果)

2023.12.2 做一个后台管理网页(左侧边栏实现手风琴和隐藏/出现效果) 网页源码见附件,比较简单,之前用很多种方法实现过该效果,这次的效果相对更好。 实现功能: (1)实现左侧边栏的手…

摩根士丹利:人工智能推动增长

摩根士丹利(NYSE:MS)将人工智能战略整合到其财富管理业务中,标志着竞争性金融格局迈出了变革性的一步。该公司的人工智能计划,包括与 OpenAI 合作开发人工智能聊天机器人,促进了其财富部门的显着增长。值得…

【数据库】数据库基于封锁机制的调度器,使冲突可串行化,保障事务和调度一致性

封锁使可串行化 ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定期更…

Linux查看计算机处理器相关的信息

采用命令lscpu。部分结果如下:

MicroPython标准库

MicroPython标准库 arraybinascii(二进制/ASCII转换)builtins – 内置函数和异常cmath – 复数的数学函数collections – 集合和容器类型errno – 系统错误代码gc – 控制垃圾收集器hashlib – 散列算法heapq – 堆队列算法io – 输入/输出流json – JSON 编码和解码math – 数…

详解Spring中BeanPostProcessor在Spring工厂和Aop发挥的作用

😉😉 学习交流群: ✅✅1:这是孙哥suns给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Mybatis、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783…

【开源】基于Vue+SpringBoot的音乐平台

项目编号: S 055 ,文末获取源码。 \color{red}{项目编号:S055,文末获取源码。} 项目编号:S055,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示 四、核心代码4.1 查询单首…