SpringMVC学习篇(三)

news2025/7/19 16:50:38

转发和重定向

1 保存数据四种方式

1.1 转发范围

1.1.1 Model

a 设置值
a.1 语法
 Model对象.addAttribute(key,value);
a.2 示例
m.addAttribute("a","香蕉");
b 有效范围
在转发的当前页面有效

1.1.2 ModelMap

a 设置值
a.1 语法
 ModelMap对象.addAttribute(key,value);
a.2 示例
  mm.addAttribute("b","梨子");
b 有效范围
在转发的当前页面有效

1.1.3 HttpServletRequest

a 设置值
a.1 语法
 HttpServletRequest对象.setAttribute(key,value);
a.2 示例
  request.setAttribute("c", "西瓜");
b 有效范围
在转发的当前页面有效

1.2 重定向范围

HttpSession

a 设置值
a.1 语法
 HttpSession对象.setAttribute(key,value);
a.2 示例
    session.setAttribute("d", "菠萝");
b 有效范围
在当前会话内有效,只要访问的还是这个会话就会一直有数据的

2.转发

2.1 特点

a 地址栏不变,一次请求
b 转发使用的是forward:
c 转发后原先配置的视图解析器会失去作用,只以转发的地址为准
d forward:/最好加上一个/,避免出现双层路径的问题

2.2 示例代码

2.2.1 前端部分

<%--
  Created by IntelliJ IDEA.
  User: SSS翱翔万里
  Date: 2022/11/12
  Time: 15:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>1</title>
</head>
<body>
<%--login1的地址是requestMapping--%>
    <form action="/login4" method="post">
        用户名:<input type="text" name="yhm">
        密码:<input type="password"  name="pwd">
        <button>登录</button>
    </form>
   <hr>
   <li>a:${a}</li>
   <li>b:${b}</li>
   <li>c:${c}</li>
   <li>d:${d}</li>
</body>
</html>

2.2.2 后台部分

  @RequestMapping("save")
    public String save(Model m,ModelMap mm, HttpServletRequest request, HttpSession session){
        //转发拿的到 前面三种是转发 后面是重定向
        m.addAttribute("a","香蕉");
        mm.addAttribute("b","梨子");
        request.setAttribute("c", "西瓜");
        session.setAttribute("d", "菠萝");
        /*forward 转发,使用后不走视图解析器*/
        /*转到页面 扩展名是要写的*/
        return "forward:/index.jsp";
    }

2.3 运行截图

2.3.1 回车访问前

在这里插入图片描述

2.3.2 回车访问后

在这里插入图片描述

2.3.3 点击登录按钮后

在这里插入图片描述

3.重定向

3.1 特点

a 地址栏改变,两次请求
b 重定向使用的是redirect:
c 重定向后原先配置的视图解析器会失去作用,只以重定向的地址为准
d redirect:/最好加上一个/,避免出现双层路径的问题

3.2 思路

第一步 先通过redirect进入控制器
第二步 通过控制器和视图解析器跳转到指定页面

3.3 示例代码

3.3.1 前端部分

<%--
  Created by IntelliJ IDEA.
  User: SSS翱翔万里
  Date: 2022/11/12
  Time: 15:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>1</title>
</head>
<body>
<%--login1的地址是requestMapping--%>
    <form action="/login4" method="post">
        用户名:<input type="text" name="yhm">
        密码:<input type="password"  name="pwd">
        <button>登录</button>
    </form>
   <hr>
   <li>a:${a}</li>
   <li>b:${b}</li>
   <li>c:${c}</li>
   <li>d:${d}</li>
</body>
</html>

3.3.2 后台部分

a 设置值然后跳转到控制器
@RequestMapping("save")
    public String save(Model m,ModelMap mm, HttpServletRequest request, HttpSession session){
        //转发拿的到 前面三种是转发 后面是重定向
        m.addAttribute("a","香蕉");
        mm.addAttribute("b","梨子");
        request.setAttribute("c", "西瓜");
        session.setAttribute("d", "菠萝");
        /*redirect 重定向 使用后不走视图解析器*/
        /*转到页面 扩展名是要写的 控制器需要写双层*/
        /*重定向正确用法进入控制器 控制器通过视图解析器跳转的*/
        return "redirect:/toIndex";
    }
b 控制器经过逻辑后再跳转到指定页面
  @RequestMapping("toIndex")
    public String index(Model m){
        System.out.println("进入了跳主页的方法");
        System.out.println("a:"+m.getAttribute("a"));
        return "index";
    }

3.4 运行截图

3.4.1 回车访问前

在这里插入图片描述

3.4.2 回车访问后

在这里插入图片描述

3.4.3 控制台运行结果

在这里插入图片描述

3.4.4 点击登录后

在这里插入图片描述

4 展示相应的操作信息(添加成功了就提示添加成功)

4.1 分析

我们之前添加操作的时候,是把操作成功或者失败的信息存在session域中
然后再写一个专门用于处理信息的页面msg,用于展示操作状态信息,并进行及时的移除
但是SpringMVC提供了一种简便方案,就是RedirectAttributes对象的addFlashAttribute设置进去,
需要注意的是,先要跳转控制器然后在跳转页面才能正确拿到;其他方式是拿不到的
该方案保存的数据在展示完成了之后会立即销毁的

4.2 示例代码

4.2.1 添加方法

@RequestMapping("add")
public String add(RedirectAttributes ra){
    /*转发在控制器里面拿不到,页面可以拿到*/
    System.out.println("添加成功");
    ra.addFlashAttribute("msg", "添加成功");
    /*重定向不能跳页面 ,自动删除*/
    return "redirect:/toIndex";
}

4.2.2 页面跳转方法

@RequestMapping("toIndex")
public String index(Model m){
    /*转发在控制器里面拿不到,页面可以拿到*/
    System.out.println("进入了跳主页的方法");
    System.out.println("a:"+m.getAttribute("a"));
    return "index";
}

4.2.3 index.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: SSS翱翔万里
  Date: 2022/11/12
  Time: 15:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录界面</title>
</head>
<body>
<%--login1的地址是requestMapping--%>
    <form action="/login4" method="post">
        用户名:<input type="text" name="yhm">
        密码:<input type="password"  name="pwd">
        <button>登录</button>
    </form>
   <hr>
   <li>操作结果:${msg}</li>
</body>
</html>

5 运行截图

5.1 回车访问前

在这里插入图片描述

5.2 回车访问后

在这里插入图片描述

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

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

相关文章

API网关功能一览

API网关功能一览 无论是单体应用&#xff0c;SOA或者现在流行的微服务架构&#xff0c;都需要一个API网关。 API网关作为内网的入口&#xff1b;统一对外提供服务。 一些公共服务的建设&#xff0c;也可以在网关层统一处理。 网关应该是无状态&#xff0c;容易线性扩展的;运行时…

基于Swagger的接口自动化测试

本文是一篇讲述敦煌网云原生微服务与服务接口(API)自动化测试实现的文章。 云原生微服务框架项目升级在如火如荼的进行中&#xff0c;根据磐石框架延伸产生的测试技术&#xff0c;亦是本文主旨所在。 一、Swagger介绍 原始时代&#xff0c;可能在工程开发前夕&#xff0c;会…

XSS进阶一

目录实验目的预备知识实验环境实验步骤一实例一、热身运动&#xff0c;不设防实验步骤二实例二、小写不行&#xff0c;就大写吧实验步骤三实例三、大写小写都不行&#xff0c;看你怎么办&#xff1f;实验目的 1.深入理解xss工作原理。 2.怎么去绕过规则实现xss。 3.培养学生的…

卷积版动作仿真模拟网络

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

【图像分割】基于差分进化算法优化模糊熵实现多级图像阈值分割附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

猿创征文|2022年前端之路——我的前端开发好帮手

&#x1f4ac;关于「猿创征文 」第四季 | 2022 年我的开发者工具 活动主旨&#xff1a;开发者每天都在使用、寻找、贡献、创作各类开发者工具&#xff0c;包括开源服务、付费软件、API等。好的工具可以极大帮助我们提升效率&#xff0c;服务业务。本期邀请大家创作在2022年有效…

Linux 中 /etc/hosts 文件的用途是什么

前言 无论是Linux操作系统还是windows操作系统&#xff0c;都存在 /etc/hosts 文件&#xff0c;该文件主要用于映射 IP 地址和域名之间的连接。如果你对这句话还不是特别理解&#xff0c;那就跟着我继续往下一起来看一下这个文件到底是如何将IP地址和域名之间进行映射的。 /e…

云原生学习的最佳路径

前言 运维这个课程是一个入行门槛低&#xff0c;精通比较难的岗位。 之所以比较难精通&#xff0c;是因为学的比较杂。更重要的是很多种知识并没有一个很好的连贯性。 比如你学zabbix和学docker&#xff0c;就是在学两个东西。 在或者你学nginx和学mysql&#xff0c;这也是两…

SparkSQL-数据模型DataFrameDataSet

数据模型DataFrame 1. DataFrame是什么 在 Spark 中&#xff0c;DataFrame 是一种以 RDD 为基础的分布式数据集&#xff0c;类似于传统数据库中的二维表格。DataFrame 与 RDD 的主要区别在于&#xff0c;前者带有 schema 元信息&#xff0c;即 DataFrame 所表示的二维表数据集…

Postman的接口测试和持续集成——接口测试方法论

在使用Postman完成从单接口测试用例的设计到业务逻辑接口测试用例的设计之后&#xff0c;相信我们已经掌握了接口测试的思维以及具体的实现方法。到目前为止&#xff0c;我们还处在手动测试阶段&#xff0c;尽管和以前基于界面的业务测试相比已经有了很大区别&#xff0c;但距离…

shell脚本编程基础(上)

目录 (一&#xff09;shell介绍 1.什么是shell 扩展知识 2. shell功能 &#xff08;二&#xff09;shell语法 2.1 如何书写一个shell脚本 0x01 shell脚本的命名&#xff1a; 0x02 shell脚本格式&#xff1a; 0x03 shell中的注释使用#号 2.2 如何运行一个shell脚本 2.3 s…

Redis 实现限流策略

除了控制流量&#xff0c;限流还有一个应用目的是用于控制用户行为&#xff0c;避免垃圾请求。 比如在 UGC 社区&#xff0c;用户的发帖、回复、点赞等行为都要严格受控&#xff0c;一般要严格限定某行为在规定 时间内允许的次数&#xff0c;超过了次数那就是非法行为。对非法…

Word处理控件Aspose.Words功能演示:使用 Python 合并 Word 文档

当您必须将多个 Word 文档合并到一个文件中时&#xff0c;可能会有多种情况。例如&#xff0c;当多人编写文档的不同部分时&#xff0c;您需要在最后组合内容。另一方面&#xff0c;您可能需要将所有发票合并到一个 Word 文档中。为了以编程方式执行此合并&#xff0c;本文介绍…

码神之路项目总结(四)

一、图片上传 请求接口&#xff1a; 思路&#xff1a; 1、后端用MultipartFile接收前端传过来的文件信息 2、用uuid将文件重命名&#xff0c;然后将文件以新文件名通过七牛云上传到七牛云服务器 二、导航--文章分类 请求接口&#xff1a; 思路&#xff1a; 1、直接从文章…

全球绿色建筑的 10 个最酷的例子

全球变暖和气候变化&#xff0c;是我们日常生活中需要解决的社会问题。从减少塑料的使用到尽量减少汽车的使用&#xff0c;因为它会导致化石燃料的燃烧&#xff0c;每个人都必须具有社会意识&#xff0c;以减轻全球变暖的影响。 在这种情况下&#xff0c;我们为世界十大绿色建…

MyBatis:基础入门

MyBatis基础入门 文章目录MyBatis基础入门一、MyBatis 简介二、MyBatis 工作原理三、MyBatis 与 Hibernate 的对比1. 原生 Jdbc 存在的问题2. MyBatis 与 Hibernate 的对比四、MyBatis demo1. 引入 Maven 依赖2. 创建mybatis-config.xml配置文件3. 编写JavaBean类4. Mapper层编…

Java开发高质量代码建议1:三元操作符的类型务必一致

在Java开发中&#xff0c;三元操作符是 if-else 的简化写法&#xff0c;在项目中使用它的地方很多&#xff0c;也非常好用&#xff0c;但是好用又简单的东西并不表示就可以随便用&#xff0c;如下代码: public class Main {public static void main(String[] args) {int i 90…

ZYNQ之FPGA学习----Vivado功能仿真

1 Vivado功能仿真 阅读本文需先学习: FPGA学习----Vivado软件使用 典型的FPGA设计流程&#xff0c;如图所示&#xff1a; 图片来自《领航者ZYNQ之FPGA开发指南》 Vivado 设计套件内部集成了仿真器 Vivado Simulator&#xff0c;能够在设计流程的不同阶段运行设计的功能仿真和…

搞笑段子很皮的文案系列001,可爱有趣文案系列合集

大家好&#xff0c;我是我赢助手&#xff0c;专注于自媒体短视频去水印、去重和文案提取运营。 今天给大家分享下收集的一些文案&#xff1a;搞笑段子很皮的文案系列 1. 女人之间不用吵架&#xff0c;你比她漂亮就行了。 2. 暧昧&#xff0c;把这两个字拆开&#xff0c;就是真…

docker centos7容器中文乱码问题解决

中文乱码与yum安装失败问题 如下图所示&#xff0c;往文件里输入内容&#xff1a;测试中文乱码问题&#xff0c;结果发现乱码。 甚至如果文件名带有中文也会乱码。 执行locale命令&#xff0c;如下所示。 LANGen_US.UTF-8 LC_CTYPE"en_US.UTF-8" LC_NUMERIC"…