一、使用 原生ServletAPI
HttpServletRequest.setAttribute()
方法 将数据共享至请求作用域(request域);
/** * @author .29. * @create 2023-03-05 15:30 */ @Controller public class ScopeController { //使用原生ServletAPI 向请求作用域共享数据 @RequestMapping(value = "/testRequestByServletAPI") public String testRequestByServletAPI(HttpServletRequest request){ request.setAttribute("testRequestScope","use-ServletAPI-setAttribute(request请求作用域)"); return "success"; } }
二、使用 ModelAndView
- ModelAndView有Model和View的功能;
- Model主要用于向请求域共享数据;
- View主要用于设置视图,实现页面跳转;
ModelAndView 相关方法
:- ModelAndView.addObject() : 处理模型数据,即:向request请求作用域 共享数据
- ModelAndView.setViewName() : 设置视图名称
/** * @author .29. * @create 2023-03-05 15:30 */ @Controller public class ScopeController { //SpringMVC方式:通过ModelAndView,向请求作用域共享数据 @RequestMapping(value = "/testModelandView") public ModelAndView testModelAndView(){ ModelAndView mdv = new ModelAndView(); //addObject() : 处理模型数据,即:向request请求作用域 共享数据 mdv.addObject("testRequestScope","use-ModelAndView-setAttribute(request请求作用域)"); //setViewName() : 设置视图名称 mdv.setViewName("success"); return mdv; //设置完视图名称后,返回ModelAndView对象即可。 } }
三、使用Model
Model
对象,作为请求控制器方法的形参;Model.addAttribute()
方法,将数据共享至请求作用域(request域);
/** * @author .29. * @create 2023-03-05 15:30 */ @Controller public class ScopeController { //SpringMVC方式:通过Model,向请求作用域共享数据 @RequestMapping(value = "/testModel") public String testModel(Model model){ model.addAttribute("testRequestScope","use-Model-setAttribute(request请求作用域)"); System.out.println("model:"+model); System.out.println(model.getClass().getName()); return "success"; }
四、使用map
Map
对象,作为请求控制器方法的形参;Map.put()
方法,将数据共享至请求作用域(request域);
/** * @author .29. * @create 2023-03-05 15:30 */ @Controller public class ScopeController { ///SpringMVC方式:通过map,向请求作用域共享数据 @RequestMapping(value = "/testMap") public String testMap(Map<String,Object> map){ map.put("testRequestScope","use-Map-setAttribute(request请求作用域)"); System.out.println("map:"+map); System.out.println(map.getClass().getName()); return "success"; } }
五、使用ModelMap
ModelMap
对象,作为请求控制器方法的形参;ModelMap.addAttribute()
方法,将数据共享至请求作用域(request域);
/** * @author .29. * @create 2023-03-05 15:30 */ @Controller public class ScopeController { ///SpringMVC方式:通过ModelMap,向请求作用域共享数据 @RequestMapping(value = "/testModelMap") public String testModelMap(ModelMap modelMap){ modelMap.addAttribute("testRequestScope","use-ModelMap-setAttribute(request请求作用域)"); System.out.println("modelMap:"+modelMap); System.out.println(modelMap.getClass().getName()); return "success"; } }
六、Model、ModelMap、Map的关系
- Model、ModelMap、Map类型的参数其实本质上都是
BindingAwareModelMap
类型的
/** * Model、ModelMap、Map的关系 : * Model、ModelMap、Map类型的参数其实本质上都是 BindingAwareModelMap 类型的 * public interface Model{} * public class ModelMap extends LinkedHashMap<String, Object> {} * public class ExtendedModelMap extends ModelMap implements Model {} * public class BindingAwareModelMap extends ExtendedModelMap {} */
七、向session域、application域 共享数据(补充)
/** * @author .29. * @create 2023-03-05 15:30 */ @Controller public class ScopeController { //用原生ServletAPI,向session作用域共享数据 @RequestMapping(value = "/testSession") public String testSession(HttpSession session){ session.setAttribute("testSessionScope","use-ServletAPI-setAttribute(session作用域)"); return "success"; } //用原生ServletAPI,向session作用域共享数据 @RequestMapping(value = "/testApplication") public String testApplication(HttpSession session){ ServletContext application = session.getServletContext(); application.setAttribute("testApplicationScope","use-ServletAPI-setAttribute(Application作用域)"); return "success"; } }