@SessionAttributes注解和ModelMap一起使用时,数据作用域

本文深入探讨了Spring MVC中@SessionAttributes注解的作用与使用方法,通过实例对比了使用与未使用该注解时,数据在请求、会话及ModelMap间的传递差异,以及如何在会话结束时清除绑定的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HttpServletRequest request, HttpSession session, ModelMap map 请求测试

不绑定@SessionAttributes注解
test.java:
类上添加注解@Controller

 @RequestMapping("test7")
    public String test7(HttpServletRequest request, HttpSession session, ModelMap modelMap){

        request.setAttribute("req","这是request7");
        session.setAttribute("sess","这是session7");

        //未绑定注解
        modelMap.put("test71","这是modelMap7");

        return "show2";

    }

show2.jsp:

 <h1>request7:::::${requestScope.req}</h1>
 <h1>request7   Mod:::::${requestScope.test71}</h1>
 <h1>session7:::::${sessionScope.sess}</h1>
 <h1>session   Mod:::::${sessionScope.test71}</h1>
 <a href="/tuichu7">退出7</a>

在show2.jsp页面点击进行二次跳转,并在控制台打印信息
退出方法的代码:

  @RequestMapping("tuichu7")
    public String tctest7(HttpSession session, ModelMap map,  HttpServletRequest request){
        session.invalidate();
        System.out.println(request.getAttribute("req"));
        System.out.println(session.getAttribute("sess"));
        System.out.println(request.getAttribute("test71")+"....reque.modelmaptest71");
        System.out.println(map.get("test71"));
        return "show2";
    }

运行结果为:
控制台为:
控制台输出结果
null
这是session7
null…reque.modelmaptest61
null

在这里插入图片描述

绑定注解且退出不消除绑定
test.java
类上添加注解
@Controller
@SessionAttributes({“test61”,“test81”})

 @RequestMapping("test6")
    public String test6(HttpServletRequest request, HttpSession session, ModelMap modelMap){
        request.setAttribute("req","这是request6");
        session.setAttribute("sess","这是session6");

        //绑定注解,不消除绑定
        modelMap.put("test61","这是modelMap6");

        return "show2";

    }

show2.jsp:

 <h1>request6:::::${requestScope.req}</h1>
 <h1>request6   Mod:::::${requestScope.test61}</h1>
 <h1>session6:::::${sessionScope.sess}</h1>
 <h1>session   Mod:::::${sessionScope.test61}</h1>
 <a href="/tuichu6">退出6</a>

在show2.jsp页面点击进行二次跳转,并在控制台打印信息

退出代码:

  @RequestMapping("tuichu6")
    public String tctest6(HttpSession session, ModelMap map,  HttpServletRequest request){

        System.out.println(request.getAttribute("req"));
        System.out.println(session.getAttribute("sess"));
        System.out.println(request.getAttribute("test61")+"....reque.modelmaptest61");
        System.out.println(map.get("test61"));
        return "show2";
    }

结果
控制台输出结果:
null
这是session6
null…reque.modelmaptest61
这是modelMap6

页面显示结果
在这里插入图片描述
虽然控制台显示为requset.test6为null,但是页面依然会显示出来

**绑定注解,并在退出时消除 注解中的session **
test.java
@Controller
@SessionAttributes({“test61”,“test81”})

 @RequestMapping("test8")
    public String test8(HttpServletRequest request, HttpSession session, ModelMap modelMap){
        request.setAttribute("req","这是request8");
        session.setAttribute("sess","这是session8");

        //绑定注解,然后注销注解的session
        modelMap.put("test81","这是modelMap8");
        return "show2";
    }

show2.jsp

 <h1>request8:::::${requestScope.req}</h1>
 <h1>request8   Mod:::::${requestScope.test81}</h1>
 <h1>session8:::::${sessionScope.sess}</h1>
 <h1>session   Mod:::::${sessionScope.test81}</h1>
 <a href="/tuichu8">退出8</a>

在show2.jsp页面点击进行二次跳转,并在控制台打印信息
tuichu8:
HttpSession 消除session

    @RequestMapping("tuichu8")
    public String tctest8(HttpSession session, ModelMap map,  HttpServletRequest request,SessionStatus status){

        //2.消除http  session
        //3.消除http  session和注解session
        session.removeAttribute("test81");

  

        session.invalidate();
        return "show2";
    }

结果
页面显示结果为
在这里插入图片描述
先出注解中的session 需要SessionStatus status

SessionStatus status消除session
tuichu8

 @RequestMapping("tuichu8")
    public String tctest8(HttpSession session, ModelMap map,  HttpServletRequest request,SessionStatus status){

        //2.消除http  session
        //3.消除http  session和注解session
        session.removeAttribute("test81");

        //3
        status.setComplete();

        session.invalidate();
        return "show2";
    }

页面第一次退出跳转结果
在这里插入图片描述
再次点击退出,页面第三次跳转
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值