SpringMVC:各个响应中的数据流转如何实现?
依赖request、session、application对象进行数据流转。
一、普通流转
直接从三大对象(request、session、application)中存入、取出数据。
例子:
此响应器会把数据放入指定对象中,然后进行请求转发到login响应器。
@RequestMapping("toLogin") public ModelAndView toLogin(HttpServletRequest request, HttpSession session) { ModelAndView mav = new ModelAndView("forward:/login"); //设置参数 request.setAttribute("req", "req 的传值"); session.setAttribute("session", "session 的传值"); request.getServletContext().setAttribute("application","application 的传值"); return mav; }
login响应器获取到数据,打印到控制台。
@RequestMapping("login") public ModelAndView login(HttpServletRequest request, HttpSession session) { ModelAndView mav = new ModelAndView("login"); //获取参数 System.out.println(request.getAttribute("req")); System.out.println(session.getAttribute("session")); System.out.println(request.getServletContext().getAttribute("application")); return mav; }
快速获取session对象内的数据
使用SessionAttribute注解实现。
例子:
存入数据。
@RequestMapping("toLogin") public ModelAndView toLogin(HttpSession session) { ModelAndView mav = new ModelAndView("forward:/login"); //设置参数 session.setAttribute("love","this is love"); return mav; }
取出数据。
@RequestMapping("login") public ModelAndView login(@SessionAttribute String love) { ModelAndView mav = new ModelAndView("login"); //获取参数 System.out.println(love); return mav; }
二、使用Map
实际上是把map集合放入request对象中了。
例子:
存入数据。
@RequestMapping("toLogin") public ModelAndView toLogin(Map<String,String> map) { ModelAndView mav = new ModelAndView("forward:/login"); //设置参数 map.put("data","可是这和我是一个冷酷的复读机又有什么关系呢?"); return mav; }
取出数据。
@RequestMapping("login") public ModelAndView login(HttpServletRequest request) { ModelAndView mav = new ModelAndView("login"); //获取参数 System.out.println(request.getAttribute("data")); return mav; }
三、使用ModelAndView对象
实际上也是把数据放入request对象中。
例子:
存入数据。
@RequestMapping("toLogin") public ModelAndView toLogin() { ModelAndView mav = new ModelAndView("forward:/login"); //设置参数 mav.addObject("love","this is love"); return mav; }
取出数据。
@RequestMapping("login") public ModelAndView login(HttpServletRequest request) { ModelAndView mav = new ModelAndView("login"); //获取参数 System.out.println(request.getAttribute("love")); return mav; }
四、使用Model对象。
实际上也是把数据放入request对象中。
存:model.addAttribute("love","this is love");
取:request.getAttribute("love")