我们在servlet里面学到,servlet里面一共有四个域对象,四个域对象分别是page对象,request对象,session对象,application对象,四个域对象作用范围从小到大是page<request<session<application,servlet向域对象里面共享数据可以通过setAttribute方法向域对象保存数据,getAttribute向域对象获取数据。那SpringMVC怎么向域对象保存数据呢?
文章目录
共享域对象数据
一、共享request域数据
1、通过原生servlet方法
配置好前端控制器后和thymeleaf视图解析器后,springMVC里面只需要在方法参数列表里面传入request对象,就可以使用request对应的方法。那向request里面共享数据就和servlet一样,通过setAttribute共享。
@RequestMapping(value = {"/testrequest"})
public String toTestValue(HttpServletRequest request){
request.setAttribute("requestScope","原生servlet共享request数据");
return "textScope";
}
2、ModelAndView共享
ModelAndView,如果翻译过来就是”模型和视图“,可以理解成MVC架构中的”M“和”V“,其中包含”Model“和”view“两部分,主要功能是:(1)设置转向地址(2)将底层获取的数据进行存储(或者封装)(3)最后将数据传递给View。在使用这个类的时候注意返回类型要为ModelAndView类型,转向地址通过ModelAndView方法实现,数据封装通过addObject实现。功能(1)可以设置跳转页面,也就是请求页面,转发页面,通过setViewName方法设置。功能(2)通过addObject实现。
@RequestMapping(value = {"/testModelAndView"})
public ModelAndView toTestModelAndView(){
ModelAndView mav = new ModelAndView();
mav.addObject("requestScope","ModelAndView共享request数据");
mav.setViewName("textScope");
return mav;
}
3、Model共享
model共享和request共享差不多,传入一个Model实例,通过实例调用方法,然后向request域存数据。
@RequestMapping(value = {"/testModel"})
public String toTestModel(Model model){
model.addAttribute("requestScope","Model共享request数据");
return "textScope";
}
4、Map集合共享
@RequestMapping(value = {"/testMap"})
public String toTestMap(Map<String,Object> map){
map.put("requestScope","Map共享request数据");
return "textScope";
}
5、ModelMap共享
@RequestMapping(value = {"/testModelMap"})
public String toTestModelMap(ModelMap model){
model.addAttribute("requestScope","ModelMap共享request数据");
return "textScope";
}
二、共享session域数据
向session域里面共享数据和request一样,需要传入一个HttpSession 实例,然后通过这个实例调用setAttribute方法传入数据。还有一点就是前端通过thymeleaf视图解析器获取session域数据需要session.键名,和request不同。
@RequestMapping(value = {"/testSession"})
public String toTestSession(HttpSession session){
session.setAttribute("sessionScope","原生servlet共享session数据");
return "textScope";
}
三、共享application域数据
application域是最大的域,作用在整个工程里面。application就是ServletContext,它的获取方法很多,可以通过request获取,也可以通过session获取。
@RequestMapping(value = {"/testapplication"})
public String toTestApplication(HttpSession session){
ServletContext app = session.getServletContext();
app.setAttribute("applicationScope","原生servlet共享application数据");
return "textScope";
}