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)开发详解:控制器跳转与作用域(二)视图模板、静态资源访问

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【教学类-06-12】20231202 0-9数字分合-房屋样式(一)-下右空-升序-抽7题

作品展示-屋顶分合(0-9之间随机抽取7个不重复分合) 背景需求: 大班幼儿学分合题,通常区角里会设计一个“房屋分合”的样式 根据这种房屋样式,设计0-9内的升序分合题模板 素材准备 WORD样式 代码展示: 2-9…

vue3请求代理proxy中pathRewrite失效

问题引入 在vue3配置请求代理proxy的时候pathRewrite失效。 有这样一个例子,作用是为了把所有以/api开头的请求代理到后端的路径和端口上,在vue.config.js配置文件中 设置了代理跨域和默认端口。但是重新运行之后发现端口是改了,但是路径仍然…

fl studio21.2最新汉化中文完整版网盘下载

fl studio 21中文版是Image-Line公司继20版本之后更新的水果音乐制作软件,很多用户不太理解,为什么新版本不叫fl studio 21或fl studio2024,非得直接跳到21.2版本,其实该版本是为了纪念该公司22周年,所以该版本也是推出…

认知觉醒(二)

认知觉醒(二) 内观自己,摆脱焦虑 第一章 大脑——一切问题的起源 第一节 大脑:重新认识你自己 我猜很多人并不真正了解自己,甚至从未了解过,所以才会对自身的各种问题困惑不已。这里我说的“自己”,特指自己的大…

自定义类型:结构体(自引用、内存对齐、位段(位域))

目录 一. 结构体类型的声明和定义 1.1结构体相关概念 1.11结构的声明 1.12成员列表 1.2定义结构体类型变量的方法 1.21先声明结构体类型再定义变量名 ​​​​1.22在声明类型的同时定义变量 1.23直接定义结构类型变量 二、结构体变量的创建、初始化​和访问 2.1结构体…

VS安装QT VS Tools编译无法通过

场景: 项目拷贝到虚拟机内部后,配置好相关环境后无法编译,安装QT VS Tools后依旧无法编译,查找资料网上说的是QT工具版本不一致导致的,但反复试了几个版本后依旧无法编译通过。错误信息如下: C:\Users\Ad…

【动态规划】LeetCode-64.最小路径和

🎈算法那些事专栏说明:这是一个记录刷题日常的专栏,每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目,在这立下Flag🚩 🏠个人主页:Jammingpro 📕专栏链接&…

第九节HarmonyOS 常用基础组件4-Button

一、Button Button组件主要用来响应点击操作,可以包含子组件。 示例代码: Entry Component struct Index {build() {Row() {Column() {Button(确定, { type: ButtonType.Capsule, stateEffect: true }).width(90%).height(40).fontSize(16).fontWeigh…

大数据技术之Flume(超级详细)

大数据技术之Flume(超级详细) 第1章 概述 1.1 Flume定义 Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。 1.2 Flume组成架构 Flume组成架构如…

C# WPF上位机开发(计算器界面设计)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 c# wpf最大的优势就是开发业务软件比较快、效率比较高。一般来说,它的界面和逻辑部分可以同时开发。界面的部分用xaml编写即可&#xf…

深度学习——第03章 Python程序设计语言(3.1 Python语言基础)

无论是在机器学习还是深度学习中,Python已经成为主导性的编程语言。而且,现在许多主流的深度学习框架,例如PyTorch、TensorFlow也都是基于Python。本课程主要是围绕“理论实战”同时进行,所以本章将重点介绍深度学习中Python的必备…

解读Java虚拟机垃圾回收器:探究经典算法背后的奥秘

目录 一、GC分类与性能指标 (一)垃圾回收器分类 (二)性能指标 (三)不可能三角 二、不同的垃圾回收器概述 三、Serial回收器:串行回收 四、ParNew回收器:并行回收 五、Parall…

Nginx实现多虚拟主机配置

Nginx实现多虚拟主机配置 Nginx为什么要进行多虚拟主机配置呢?what? Nginx实现多虚拟主机配置的主要原因是,一个服务器可能会承载多个网站或应用程序,这些网站或应用程序需要使用不同的域名或IP地址来进行访问。如果只有一个虚拟…

SHAP(五):使用 XGBoost 进行人口普查收入分类

SHAP(五):使用 XGBoost 进行人口普查收入分类 本笔记本演示了如何使用 XGBoost 预测个人年收入超过 5 万美元的概率。 它使用标准 UCI 成人收入数据集。 要下载此笔记本的副本,请访问 github。 XGBoost 等梯度增强机方法对于具有…

Python----Pandas

目录 Series属性 DataFrame的属性 Pandas的CSV文件 Pandas数据处理 Pandas的主要数据结构是Series(一维数据)与DataFrame(二维数据) Series属性 Series的属性如下: 属性描述pandas.Series(data,index,dtype,nam…

模板初阶(2):函数模板的匹配原则,类模板的实例化

一、函数模板的匹配原则 int Add(const int& x, const int& y) {return x y; }template <class T> T Add(const T& x, const T& y) {return x y; }int main() {int a1 1, a2 2;Add(a1, a2);double d1 1.1, d2 2.2;Add(d1, d2);return 0; }一个非模…

ELK配置记录

1. filebeat.yml配置 启动命令&#xff1a; ./filebeat -e -c filebeat.yml # 输入 filebeat.inputs: - type: logenabled: truepaths:- /soft/log/base.*#跨行日志正则&#xff0c;从有时间的开始&#xff0c;到下一个时间之前结束multiline.pattern: ^\[[0-9]{4}-[0-9]{2}…

责任链设计模式

package com.jmj.pattern.responsibility;/*** 请假条类*/ public class LeaveRequest {//姓名private String name;//请假天数private int num;//请假内容private String content;public LeaveRequest(String name, int num, String content) {this.name name;this.num num;…

FL Studio21.2汉化永久中文语言包

FL Studio21.2这款软件在国内被广泛使用&#xff0c;因此又被称为"水果"。它提供音符编辑器&#xff0c;可以针对作曲者的要求编辑出不同音律的节奏&#xff0c;例如鼓、镲、锣、钢琴、笛、大提琴、筝、扬琴等等任何乐器的节奏律动。此外&#xff0c;它还提供了方便快…

使用极限网关助力 ES 集群无缝升级、迁移上/下云

在工作中大家可能会遇到以下这些场景&#xff1a; 自建 ES 集群需要平滑迁移到 XX 云&#xff1b;从 XX 云将 ES 集群迁移到自建机房&#xff1b;ES 集群进行跨版本升级&#xff0c;同时保留回退能力&#xff1b; 这些场景往往都还有个共同的需求&#xff1a;迁移过程要保证业…