Model对象.addAttribute(key,value);
m.addAttribute("a","香蕉");
在转发的当前页面有效
ModelMap对象.addAttribute(key,value);
mm.addAttribute("b","梨子");
在转发的当前页面有效
HttpServletRequest对象.setAttribute(key,value);
request.setAttribute("c", "西瓜");
在转发的当前页面有效
HttpSession对象.setAttribute(key,value);
session.setAttribute("d", "菠萝");
在当前会话内有效,只要访问的还是这个会话就会一直有数据的
a 地址栏不变,一次请求
b 转发使用的是forward:
c 转发后原先配置的视图解析器会失去作用,只以转发的地址为准
d forward:/最好加上一个/,避免出现双层路径的问题
<%--
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" %>
1
<%--login1的地址是requestMapping--%>
a:${a}
b:${b}
c:${c}
d:${d}
@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";
}
a 地址栏改变,两次请求
b 重定向使用的是redirect:
c 重定向后原先配置的视图解析器会失去作用,只以重定向的地址为准
d redirect:/最好加上一个/,避免出现双层路径的问题
第一步 先通过redirect进入控制器
第二步 通过控制器和视图解析器跳转到指定页面
<%--
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" %>
1
<%--login1的地址是requestMapping--%>
a:${a}
b:${b}
c:${c}
d:${d}
@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";
}
@RequestMapping("toIndex")
public String index(Model m){
System.out.println("进入了跳主页的方法");
System.out.println("a:"+m.getAttribute("a"));
return "index";
}
我们之前添加操作的时候,是把操作成功或者失败的信息存在session域中
然后再写一个专门用于处理信息的页面msg,用于展示操作状态信息,并进行及时的移除
但是SpringMVC提供了一种简便方案,就是RedirectAttributes对象的addFlashAttribute设置进去,
需要注意的是,先要跳转控制器然后在跳转页面才能正确拿到;其他方式是拿不到的
该方案保存的数据在展示完成了之后会立即销毁的
@RequestMapping("add")
public String add(RedirectAttributes ra){
/*转发在控制器里面拿不到,页面可以拿到*/
System.out.println("添加成功");
ra.addFlashAttribute("msg", "添加成功");
/*重定向不能跳页面 ,自动删除*/
return "redirect:/toIndex";
}
@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" %>
登录界面
<%--login1的地址是requestMapping--%>
操作结果:${msg}