SpringMVC学习篇(三)
创始人
2024-01-21 18:50:32

转发和重定向

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/12Time: 15:31To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

1


<%--login1的地址是requestMapping--%>
用户名:密码:

  • a:${a}
  • b:${b}
  • c:${c}
  • d:${d}
  • 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/12Time: 15:31To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    1
    
    
    <%--login1的地址是requestMapping--%>
    用户名:密码:

  • a:${a}
  • b:${b}
  • c:${c}
  • d:${d}
  • 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/12Time: 15:31To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    登录界面
    
    
    <%--login1的地址是requestMapping--%>
    用户名:密码:

  • 操作结果:${msg}
  • 5 运行截图

    5.1 回车访问前

    在这里插入图片描述

    5.2 回车访问后

    在这里插入图片描述

    相关内容

    热门资讯

    埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
    ps局部放大 放大某个部位的图... 软件类学习建议:边看边练习,可以先收藏后学习。一、使用Ctrl快捷键放大:Ctrl + +缩小:Ct...
    苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
    北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
    应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
    脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
    长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
    猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
    世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
    埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
    ps局部放大 放大某个部位的图... 软件类学习建议:边看边练习,可以先收藏后学习。一、使用Ctrl快捷键放大:Ctrl + +缩小:Ct...
    苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
    北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...