SpringMVC学习篇(三)

转发和重定向

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 回车访问后

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SSS4362

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值