modelandview 中的model
thymeleaf 获得要访问页面的string 值之后,加上前缀加上后缀 ,请求转发,跳转至该页面,所以可以直接设置请求的参数。
点我使用原生的request设置request的attribute
控制方法:
@RequestMapping(value = "yuansheng_request")
public String display_yuansheng_request_attribute(HttpServletRequest request)
{ request.setAttribute("name","zyk");
//thymeleaf加上前后缀之后,请求转发方式跳转该页面,所以可以使用request设置请求
return "sucess";
}
sucess页面:
servlet原生方式获取数据:
点我使用原生设置session的attribute
控制方法
@RequestMapping(value = "/test_session")
public String display_session(HttpSession session)
{
session.setAttribute("sesson","session_zyk");
return "sucess";
}
success页面
session获取:
@RequestMapping(value = "/test_application")
public String display_application(HttpSession session)
{
ServletContext application= session.getServletContext();
application.setAttribute("testapplication","application_zyk");
return "sucess";
}
点我使用原生设置application的attribute
success页面
application获取:
点我使用ModelAndView设置request的attribute
控制方法:
@RequestMapping(value = "ModelAndView_request")
public ModelAndView display_modelandview()
{
ModelAndView mav=new ModelAndView();
mav.addObject("modelandview_name","zyk_mvn");
mav.setViewName("sucess");
return mav;
}
sucess页面
modelandview方式获取:
控制方法
@RequestMapping(value = "/Model_Request")
public String display_model(Model model)
{
model.addAttribute("model_name","zyk_model");
System.out.println(model.getClass().getName());
return "sucess";
}
点我使用Model设置request的attribute
sucess页面
model方式获取:
点我使用testMap设置request的attribute
控制方法
@RequestMapping(value = "/testMap")
public String display_model(Map map)
{
map.put("test_map","zyk_map");
System.out.println(map.getClass().getName());
return "sucess";
}
success页面
map方式获取:
点我使用testMap设置request的attribute
@RequestMapping(value = "/testmodelmap")
public String display_model(ModelMap modelmap)
{
modelmap.addAttribute("testscope","zyk_modelmap");
System.out.println(modelmap.getClass().getName());
return "sucess";
}
success页面
modelmap方式获取:
在每个方法设置参数的地方打断点debug调试,在方法栈(就是进入栈中的方法,方法只有进入栈中才可以执行)中,
发现他们都被DispatcherServlet方法调用了
即DispatcherServlet是先于控制方法中的添加属性语句( modelmap.addAttribute("testscope","zyk_modelmap");举个栗子)执行的,并在执行过程中调用了控制方法中添加属性的语句
DispatherServlet这个方法,点进去会发现是这一句 mv=....
而mv是个modelandview对象 所以得出结论如下
看源码的结论:不管用如上的哪种方式,即使是原生request,也会把请求数据放入model,请求页面放入view,最后返回一个modelandview对象
验证:
在mv=...下面打个断点,等它执行完控制器中添加的属性的语句,会发现 mv中已经有刚才传递的数据了