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

news2025/1/23 2:13:47

学习视频:孙哥说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.coloradmin.cn/o/1279672.html

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

相关文章

(数据结构)顺序表的查找

静态分配代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define MAX 100 typedef struct LinkList {int data[MAX];int lenth; }Link; //初始化 void CreateList(Link* L) {L->lenth 0;for (int i 0; i < MAX; i){L->data[i] 0;} } //插入 …

【算法专题】二分查找

二分查找 二分查找1. 二分查找2. 在排序数组中查找元素的第一和最后一个位置3. 搜索插入位置4. x 的平方根5. 山脉数组的峰顶索引6. 寻找峰值7. 寻找旋转排序数组中的最小值8. 点名 二分查找 1. 二分查找 题目链接 -> Leetcode -704.二分查找 Leetcode -704.二分查找 题…

没了解死锁怎么能行?进来看看,一文带你拿下死锁产生的原因、死锁的解决方案。

&#x1f308;&#x1f308;&#x1f308;今天给大家分享的是死锁产生的原因&#xff0c;以及如何解决死锁问题。 清风的CSDN博客 &#x1f6e9;️&#x1f6e9;️&#x1f6e9;️希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起…

ORA-00257: archiver error. Connect internal only, until freed 的解决方法

归档文件存储空间不足&#xff0c;导致出现该问题。 当我们将数据库的模式修改为归档模式的时候&#xff0c;如果没有指定归档目录&#xff0c;默认的归档文件就会放到Flash Recovery Area的目录&#xff0c;但是这个目录是有大小限制的&#xff0c;如果超过了这个大小&#x…

专升本期间部分的C语言程序整理

说明 这些程序是我在专升本期间在CSDN上上传的作业、练习等&#xff0c;仅为学习备考的一小部分程序&#xff0c;整理成一篇文章&#xff0c;方便专升本的学弟学妹参考。 时间&#xff1a;2021年~2022年专升本期间 字符串题 输入字符串提取 数字字符 并 求和 &#xff08;4处…

【排序】直接插入排序和希尔排序

目录 一、排序思想 1、直接插入排序 2、希尔排序 二、代码实现 三、性能比较 四、排序总结 1、直接插入排序 2、希尔排序 一、排序思想 1、直接插入排序 基本思想&#xff1a;把待排序的序列选取一个整数逐个插入到已经排好的有序序列中&#xff0c;直到所有整数都插入…

Android自定义View实现八大行星绕太阳转动效果

最近尝试使用Android自定义View实现了一个8大行星绕太阳转动的自定义View效果&#xff0c;效果静态图如下所示&#xff1a; 还没来得及对该效果进行比较通用的包装&#xff0c;仅仅实现效果&#xff0c;有兴趣的可以继续扩展、美化、包装一下。 核心代码就一个类PlanetsView。 …

ZLMediakit-method ANNOUNCE failed: 401 Unauthorized(ffmpeg、obs推流rtmp到ZLM发现的问题)

错误截图 解决办法&#xff1a;能推流成功&#xff0c;但是不能写入到wvp数据库中 修改配置文件config.ini 改成0 修改之后 重启服务 systemctl restart zlm*推流成功 解决办法&#xff1a;能推流&#xff0c;能写入数据库中 替换zlm版本&#xff0c;可以用我文章中提供的编译…

阅读软件OmniReader Pro mac功能特色

OmniReader Pro mac是一款文字识别和阅读软件&#xff0c;它可以将印刷体和手写体的文字转换为数字文本&#xff0c;并将其朗读出来。该软件适用于视力受损、阅读困难、语言障碍等用户&#xff0c;可以帮助他们更加轻松地获取信息和阅读文本。 OmniReader Pro具有简洁直观的用户…

为何全球电商都在拼“质价比”?

远在西雅图的希拉里&#xff0c;在著名的“黑色星期五”大促开始之前&#xff0c;她就已经准备好了一份购物清单。 然而&#xff0c;她发现身边的朋友们总是拉她组团购物。 在朋友和社交媒体的持续轰炸下&#xff0c;希拉里决定尝试一下这个让人贼上头的Temu。 最终&#xf…

linux之buildroot(3)配置软件包

Linux之buildroot(3)配置软件包 Author&#xff1a;Onceday Date&#xff1a;2023年11月30日 漫漫长路&#xff0c;才刚刚开始… 全系列文章请查看专栏: buildroot编译框架_Once_day的博客-CSDN博客。 参考文档&#xff1a; Buildroot - Making Embedded Linux Easymdev.t…

idea通过remote远程调试云服务器

引用了第三方的包&#xff0c;调试是看不到运行流程&#xff0c;于是想到了idea的remote方法 -agentlib:jdwptransportdt_socket,servery,suspendn,address9002 写一个.sh文件并启动 nohup java -jar -agentlib:jdwptransportdt_socket,servery,suspendn,address9002 ./demo.j…

vr工业制造流程3D模拟仿真可视化展示

工业仿真3D数字化展示系统具有多方面的独特之处&#xff0c;主要体现在以下几个方面&#xff1a; 1、真实感和交互性&#xff1a;该系统可以将实际的工业设备、产品、场景等进行数字化建模&#xff0c;通过三维图形技术将其呈现在计算机屏幕上&#xff0c;使用户可以在虚拟环境…

微信订阅号和服务号的区别

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;我们都知道&#xff0c;服务号一个月只能发4次文章&#xff0c;但是订阅号每天都能发文章。不过在接收消息这一方面&#xff0c;服务号群发的消息有消息提醒&#xff0c;并显示在对话框&#xff1b…

网络之路27:IRF设备堆叠

正文共&#xff1a;3210 字 34 图&#xff0c;预估阅读时间&#xff1a;5 分钟 目录 网络之路第一章&#xff1a;Windows系统中的网络 0、序言 1、Windows系统中的网络1.1、桌面中的网卡1.2、命令行中的网卡1.3、路由表1.4、家用路由器 网络之路第二章&#xff1a;认识企业设备…

使用策略模式彻底消除if-else

文章目录 使用策略模式彻底消除if-else1. 场景描述2. if-else方式3. 策略模式 使用策略模式彻底消除if-else 如果一个对象有很多的行为&#xff0c;如果不用恰当的模式&#xff0c;这些行为就只好使用多重的条件选择语句来实现&#xff0c;这样会显得代码逻辑很臃肿&#xff0c…

TEMU三季度销售额或达50亿美金,多多跨境已成第二增长引擎

2023年11月28日&#xff0c;拼多多发布了2023年第三季度业绩报告。 报告显示&#xff0c;三季度的收入为688.4亿元&#xff0c;同比增长93.9%&#xff0c;按照美国通用会计准则&#xff0c;实现净利润155.4亿元&#xff0c;净利润率达到22.6%。 拼多多将近翻倍的业绩成长&…

mybatis整合(手动添加jar包方式)

操作步骤 创建数据库 建立user表 放入数据 1、创建javaweb工程并添加Jar包 用到的jar包 junit 用于测试 mybatis框架&#xff1a;mybatis-3.5.9.jar mysql数据库&#xff1a;mysql-connector-java-8.0.28.jar 2、添加MyBatis核心配置文件 <?xml version"1.0"…

19.字符串——查找三个字符串中的最大字符串(打擂台)

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 四、举一反三总结 前言 本系列为字符串处理函数编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 查找三个字符串中的最大字符串 二、题目分析 打擂台 三、解题 程序运行代码 #include<…

linux进程优先级_nice

4.1.3.4 进程优先级&#xff1a;nice nice以更改过的优先序来执行程序&#xff0c;如果未指定程序&#xff0c;则会印出目前的排程优先序&#xff0c;内定的 adjustment 为 10&#xff0c;范围为 -20&#xff08;最高优先序&#xff09;到 19&#xff08;最低优先序&#xff0…