• 中文
    • English
  • 注册
  • 查看作者
  • SpringMVC:向request作用域存储数据

    一.  数据准备

    首先在jsp文件中,显示request作用域中的指定数据:

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
    <!DOCTYPE html>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1> ${requestScope.user}</h1>
    
    </body>
    </html>

    二:使用Map

    我们将map作为方法的参数,然后在方法中把数据直接put进map,即可把数据存入request作用域。

    package io.zhangjia.springmvc.controller;
    
    import io.zhangjia.springmvc.controller.entity.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import java.util.Map;
    
    @Controller
    public class Test {
        @RequestMapping("/test")
        public String test(User user, Map<String, Object> map) {
            System.out.println("user = [" + user + "]");
            map.put("user", user);
            return "test";
        }
    }

    三:使用Model

    使用Model的方法也很简单,只需要将Model作为参数传入test方法,然后调用addAttribute方法即可

    package io.zhangjia.springmvc.controller;
    
    import io.zhangjia.springmvc.controller.entity.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    import java.util.Map;
    
    @Controller
    public class Test {
        @RequestMapping("/test")
        public String test(User user, Model model) {
            System.out.println("user = [" + user + "]");
            model.addAttribute("user", user);
            return "test";
        }
    }

    四:使用ModelAndView

    使用ModelAndView之前,需要先将test方法的返回值修改为ModelAndView,而且test方法中不需要传入额外的参数。

    setViewName(“test”)相当于上面几种方法中的return “test”

    package io.zhangjia.springmvc.controller;
    
    import io.zhangjia.springmvc.controller.entity.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import java.util.Map;
    
    @Controller
    public class Test {
     
        @RequestMapping("/test")
        public ModelAndView test(User user) {
            System.out.println("user = [" + user + "]");
            ModelAndView modelAndView = new ModelAndView();
            modelAndView.setViewName("test"); //相当于 return "test";
            modelAndView.addObject("user", user);
            return modelAndView;
        }
    }

    五:使用HttpServletRequest

    这种方法也是我们在没有学习Spring之前所采用的的最原始的方法,只需要将HttpServletRequest作为参数传入test方法,即可使用request,如果需要获取Session等资源,都可以采用这种方法

    package io.zhangjia.springmvc.controller;
    
    import io.zhangjia.springmvc.controller.entity.User;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import java.util.Map;
    
    @Controller
    public class Test {
       
        @RequestMapping("/test")
        public String test(User user, HttpServletRequest request) {
            System.out.println("user = [" + user + "]");
            request.setAttribute("user", user);
            return "test";
        }
    }

    六.  总结

    1.  Map

    • 添加 Map<String, Object> map 作为形参

    • 将需要存入request作用域的数据put进map中: map.put(“xxx”, xxx),即可完成存入

    2.  Model

    • 添加  Model model 作为形参

    • 使用model.addAttribute(“xxx”, xxxx),即可将需要存入request作用域的数据存入

    3.  ModelAndView

    • 不需要添加形参,但是需要修改方法的返回类型为ModelAndView

    • 新建Model对象:ModelAndView modelAndView = new ModelAndView();

    • 使用modelAndView.addObject(“xxx”, xxxx)即可将需要存入request作用域的数据存入

    4.  HttpServletRequest

    • 添加 HttpServletRequest request 作为形参

    • 使用request.setAttribute(“xxx”, xxxx)即可将需要存入request作用域的数据存入

  • 0
  • 0
  • 0
  • 2.3k
  • 请登录之后再进行评论

    登录
    单栏布局 侧栏位置: