SpringMvc @SessionAttributes与@SessionAttribute及@ModelAttribute

1.@SessionAttributes(加在类上面的注解)

将模型中的某个属性值暂存到HttpSession中,以便多个请求之间可以共享这个属性

value:通过指定key将model中的数据存在session域中

types:将model中指定类型的额数据存在session域中

@Controller
//把model当中key为name的存在了session当中
@SessionAttributes("name")
public class MyController {
    @RequestMapping("/testsession")
    public String etstsession(Model model){
        //把数据存到了request域
        model.addAttribute("name","dell");
        return "/result2.jsp";
    }
}
@Controller
//把model当中String类型的属性都存在了session当中
@SessionAttributes(types=String.class)
public class MyController {
    @RequestMapping("/testsession")
    public String etstsession(Model model){
        //把数据存到了request域
        model.addAttribute("name","dell");
        return "/result2.jsp";
    }
}

 2.@SessionAttribute

使用SessionAttribute来访问预先存在的全局会话属性,注解标记在处理器映射方法上来获取参数

假设提前在session域中存了key值为name的键值对             如若没有,服务器会报错

 @RequestMapping("testsession2")
    public String testsession2(@SessionAttribute("name") String name){
        System.out.println(name);
        return "/result2.jsp";
    }

2.@ModelAttribute

当提交表单,以自己创建的普通类来接受表单中的信息的时候,会自动的把这个对象存在model当中,并且使用类名首字母小写当做key

@modelAttribute修饰参数

可以指定一个类的实体存到model中的key值,如果不指定,则默认是将类名的第一个字母小写作为key值

@RequestMapping("/testModelAttribute")
    //会自动的把对应的模型存放在model当中
    public String testModelAttribute(@ModelAttribute("GOODS") Goods mygoods, Model model){
        System.out.println(mygoods);
        System.out.println(model.asMap());
        return "/result3.jsp";
    }
/*
*Goods{name='aa', price=20}
*{GOODS=Goods{name='aa', price=20}
*/

@modelAttribute修饰方法

被@modelAttribute标记的方法会在requestmapping映射方法之前被执行,

并且会把映射方法中的model先传到该方法中供其先设置部分参数   

如果有key值相同,则会被覆盖

@ModelAttribute
    public void testModelAttribute(Model model){
        System.out.println("ModelAttribute被执行");
        model.addAttribute("sex","male");
    }

    @RequestMapping("/testModelAttribute")
    //会自动的把对应的模型存放在model当中
    public String testModelAttribute(@ModelAttribute("GOODS") Goods mygoods, Model model){
        System.out.println(mygoods);
        System.out.println(model.asMap());
        return "/result3.jsp";
    }
/*
*ModelAttribute被执行
*Goods{name='aaa', price=20}
*{sex=male, GOODS=Goods{name='aaa', price=20},
*/
 @ModelAttribute
    public void testModelAttribute(Model model){
        System.out.println("ModelAttribute被执行");
        model.addAttribute("sex","male");
    }

    @RequestMapping("/testModelAttribute")
    //会自动的把对应的模型存放在model当中
    public String testModelAttribute(@ModelAttribute("GOODS") Goods mygoods, Model model){
        model.addAttribute("sex","female");
        System.out.println(mygoods);
        System.out.println(model.asMap());
        return "/result3.jsp";
    }
//key为sex的键值对属性male被覆盖为female
/*
*ModelAttribute被执行
*Goods{name='aaa', price=20}
*{sex=female, GOODS=Goods{name='aaa', price=20}
*/

注意点:在往被@ModelAttribute标记的方法中传入的model时,session中的数据也会被先传入到model中

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`@RequestMapping`是Spring MVC框架中的一个重要注解,用于将HTTP请求映射到控制器的方法上。这个注解用于简化RESTful风格的Web服务开发,使得路由和处理逻辑更加清晰和模块化。下面是一些关于`@RequestMapping`实验小结的关键点: 1. **路径映射**:`@RequestMapping`用于指定一个或多个HTTP请求方法(GET, POST, PUT, DELETE等),以及对应的URL路径。例如,`@RequestMapping(value = "/users", method = RequestMethod.GET)`表示该方法处理所有发送到"/users"路径的GET请求。 2. **请求参数**:可以通过`@RequestParam`或`@PathVariable`注解处理请求参数,如查询参数、路径变量等。如`@RequestParam(name="id") Long userId`会从请求中获取名为"id"的查询参数。 3. **返回类型**:`@ResponseBody`可以用来标记返回值为JSON或XML响应体,而`@ModelAttribute`用于处理表单提交的模型属性。 4. **异常处理**:可以使用`@ExceptionHandler`注解来捕获特定的异常,并提供定制的错误处理。 5. **分组和扫描器**:为了方便管理,可以通过`@RequestMapping`的`@ControllerAdvice`或`@Controller`的`@RequestMapping(basePath = "/api/v1")`来对多个控制器进行分组或定义统一的路径前缀。 相关问题-- 1. `@RequestMapping`如何处理不同类型的HTTP请求? 2. 如何在Spring MVC中使用`@RequestParam`和`@PathVariable`? 3. `@ResponseBody`和`@ModelAttribute`的区别是什么? 4. 如何在Spring MVC中实现全局异常处理? 5. 分组和扫描器在Spring MVC中的应用场景是什么?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值