zoukankan      html  css  js  c++  java
  • Spring MVC中Controller如何将数据返回给页面

    要实现Controller返回数据给页面,Spring MVC 提供了以下几种途径:

    • ModelAndView:将视图和数据封装成ModelAndView对象,作为方法的返回值,数据最终会存到HttpServletRequest对象中!
    • Model对象:通过给方法添加引用Model对象入参,直接往Model对象添加属性值。那么哪些类型的入参才能够引用Model对象,有三种类型,分别是  org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map。只要是这些类型的入参,都是指向Model对象的,而且不管定义多少个这些类型的入参都是指向同一个Model对象!
    • @SessionAttributes:通过给Controller类添加@SessionAttributes注解,该注解的name和value属性值都是Model的key值,意思是指Model中这些key对应的数据也会存到HttpSession,不仅仅存到HttpServletRequest对象中!这样页面可以共享HttpSession中存的数据了!
    • @ModelAttribute:使用@ModelAttribute注解的方法会在此Controller每个方法执行前被执行,指定@ModelAttribute的name或value都是一样的功能,都是作为key,将注解的方法返回的对象作为value存放到Model中,不指定name和value的话,则以注解的方法返回的类型名称首字母小写作为key。

    当然,除了上述的途径,也可以使用传统的方式,那就是直接使用HttpServletRequest或HttpSession对象来存数据,页面上再去取。

    注意:Model中存的数据,最终都会存放到HttpServletRequest对象中,页面上可以通过HttpServletRequest对象获取数据。

    接下来,我们就看看demo,通过demo来理解如何通过这几种方式实现将数据返回给页面。

    demo场景:通过ResetFul风格的URL路径传递用户ID给Controller,Controller查询出对应的用户信息返回给页面。

    Spring MVC配置的视图解析器:

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <property name="prefix" value="/jsp/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  
    

      ReturnModelDataController1.java:

    package edu.mvcdemo.controller;  
      
    import java.util.Map;  
      
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.beans.factory.annotation.Qualifier;  
    import org.springframework.context.annotation.Scope;  
    import org.springframework.stereotype.Controller;  
    import org.springframework.ui.Model;  
    import org.springframework.ui.ModelMap;  
    import org.springframework.web.bind.annotation.PathVariable;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.RequestMethod;  
    import org.springframework.web.servlet.ModelAndView;  
    import edu.mvcdemo.model.User;  
    import edu.mvcdemo.service.IUserService;  
      
    /** 
     * @编写人: yh.zeng 
     * @编写时间:2017-7-10 下午9:16:54 
     * @文件描述: Controller中如何将model数据返回给页面的demo1 
     */  
    @Controller  
    @Scope(value="singleton") //只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton  
    @RequestMapping("users")  
    public class ReturnModelDataController1 {  
          
        @Autowired  
        @Qualifier("userService")  
        private IUserService userService;  
      
          
        /** 
         * 方式一,通过ModelAndView返回用户信息数据到页面 
         * @return 
         */  
        @RequestMapping(value="/view/{userId}/use/ModelAndView", method=RequestMethod.GET)  
        private ModelAndView getUserInfo(@PathVariable("userId") Integer userId){  
            User user = userService.getUserById(userId);  
            return new ModelAndView("userinfo", "user", user);  
        }  
          
        /** 
         * 方式二,通过Model返回用户信息数据到页面 
         * @return 
         */  
        @RequestMapping(value="/view/{userId}/use/Model", method=RequestMethod.GET)  
        private String getUserInfo(@PathVariable("userId") Integer userId, Model model){  
            User user = userService.getUserById(userId);  
            model.addAttribute("user", user);  
            return "userinfo";  
        }  
          
          
        /** 
         * 方式三,通过ModelMap返回用户信息数据到页面 
         * @return 
         */  
        @RequestMapping(value="/view/{userId}/use/ModelMap", method=RequestMethod.GET)  
        private String getUserInfo(@PathVariable("userId") Integer userId, ModelMap model){  
            User user = userService.getUserById(userId);  
            model.addAttribute("user", user);  
            return "userinfo";  
        }  
          
        /** 
         * 方式四,通过Map返回用户信息数据到页面 
         * @return 
         */  
        @RequestMapping(value="/view/{userId}/use/Map", method=RequestMethod.GET)  
        private String getUserInfo(@PathVariable("userId") Integer userId, Map<String,Object> model){  
            User user = userService.getUserById(userId);  
            model.put("user", user);  
            return "userinfo";  
        }  
      
    }  

    RetunnModelDataController2.java:

    [java] view plain copy
    package edu.mvcdemo.controller;  
      
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.beans.factory.annotation.Qualifier;  
    import org.springframework.context.annotation.Scope;  
    import org.springframework.stereotype.Controller;  
    import org.springframework.web.bind.annotation.PathVariable;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.RequestMethod;  
    import org.springframework.web.bind.annotation.SessionAttributes;  
    import org.springframework.web.servlet.ModelAndView;  
    import edu.mvcdemo.model.User;  
    import edu.mvcdemo.service.IUserService;  
      
    /** 
     * @编写人: yh.zeng 
     * @编写时间:2017-7-11 下午9:09:03 
     * @文件描述: Controller中如何将model数据返回给页面的demo2 
     */  
    @Controller  
    @Scope(value="singleton") //只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton  
    @RequestMapping("users")  
    @SessionAttributes({"user"}) //Model中key=user的数据也会存到HttpSession  
    public class RetunnModelDataController2 {  
          
        @Autowired  
        @Qualifier("userService")  
        private IUserService userService;  
          
        /** 
         * 方式五,通过@SessionAttributes将指定key的模型数据存到HttpSession,让页面可以获取 
         * @return 
         */  
        @RequestMapping(value="/view/{userId}/use/SessionAttributes", method=RequestMethod.GET)  
        private ModelAndView getUserInfo(@PathVariable("userId") Integer userId){  
            User user = userService.getUserById(userId);  
            return new ModelAndView("userinfo", "user", user);  
        }  
      
    }  

    RetunnModelDataController3.java:

    package edu.mvcdemo.controller;  
      
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.beans.factory.annotation.Qualifier;  
    import org.springframework.context.annotation.Scope;  
    import org.springframework.stereotype.Controller;  
    import org.springframework.ui.Model;  
    import org.springframework.web.bind.annotation.ModelAttribute;  
    import org.springframework.web.bind.annotation.PathVariable;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.RequestMethod;  
    import edu.mvcdemo.model.User;  
    import edu.mvcdemo.service.IUserService;  
      
    /** 
     * @编写人: yh.zeng 
     * @编写时间:2017-7-11 下午9:09:03 
     * @文件描述: Controller中如何将model数据返回给页面的demo3 
     */  
    @Controller  
    @Scope(value="singleton") //只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton  
    @RequestMapping("users")  
    public class RetunnModelDataController3 {  
          
        @Autowired  
        @Qualifier("userService")  
        private IUserService userService;  
          
        /** 
         * 注解@ModelAttribute用法一: 
         * 使用@ModelAttribute注解的方法会在此Controller每个方法执行前被执行, 
         * 指定@ModelAttribute的name或value都是一样的功能,都是作为key,将注解的方法返回的对象作为value存放到Model中, 
         * 不指定name和value的话,则以注解的方法返回的类型名称首字母小写作为key。 
         * @param userId  ResetFul路径的请求参数 
         * @return 
         */  
        @ModelAttribute(name="user")   
        public User addAccount(@PathVariable("userId") Integer userId) {    
           return userService.getUserById(userId);    
        }    
      
        /** 
         * 注解@ModelAttribute用法二: 
         * 使用@ModelAttribute注解的方法会在此Controller每个方法执行前被执行 
         * @param userId    ResetFul路径的请求参数 
         * @param model     模型对象,可以使用org.springframework.ui.Model、org.springframework.ui.ModelMap  
         *                       或 java.uti.Map 作为入参类型,以引用模型对象 
         */  
      /*@ModelAttribute 
        public void addAccount(@PathVariable("userId") Integer userId, Model model) {   
           User user =  userService.getUserById(userId);  
           model.addAttribute("user", user); 
        }*/  
          
        /** 
         * 方式六,通过@SessionAttributes将指定key的模型数据存到HttpSession,让页面可以获取 
         * @return 
         */  
        @RequestMapping(value="/view/{userId}/use/ModelAttribute", method=RequestMethod.GET)  
        private String getUserInfo(@PathVariable("userId") Integer userId){  
            return "userinfo";  
        }  
      
    }  

    RetunnModelDataController4.java:

    package edu.mvcdemo.controller;  
      
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpSession;  
    import org.springframework.beans.factory.annotation.Autowired;  
    import org.springframework.beans.factory.annotation.Qualifier;  
    import org.springframework.context.annotation.Scope;  
    import org.springframework.stereotype.Controller;  
    import org.springframework.web.bind.annotation.PathVariable;  
    import org.springframework.web.bind.annotation.RequestMapping;  
    import org.springframework.web.bind.annotation.RequestMethod;  
    import edu.mvcdemo.model.User;  
    import edu.mvcdemo.service.IUserService;  
      
    /** 
     * @编写人: yh.zeng 
     * @编写时间:2017-7-11 下午9:09:03 
     * @文件描述: Controller中如何将model数据返回给页面的demo2 
     */  
    @Controller  
    @Scope(value="singleton") //只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton  
    @RequestMapping("users")  
    public class RetunnModelDataController4 {  
          
        @Autowired  
        @Qualifier("userService")  
        private IUserService userService;  
          
        /** 
         * 方式七,直接将数据存到HttpSession,让页面可以获取 
         * @param userId 
         * @param session 
         * @return 
         */  
        @RequestMapping(value="/view/{userId}/use/HttpSession", method=RequestMethod.GET)  
        private String getUserInfo(@PathVariable("userId") Integer userId, HttpSession session){  
            User user = userService.getUserById(userId);  
            session.setAttribute("user", user);  
            return "userinfo";  
        }  
          
        /** 
         * 方式八,直接将数据存到HttpServletRequest,让页面可以获取 
         * @param userId 
         * @param session 
         * @return 
         */  
        @RequestMapping(value="/view/{userId}/use/HttpServletRequest", method=RequestMethod.GET)  
        private String getUserInfo(@PathVariable("userId") Integer userId, HttpServletRequest request){  
            User user = userService.getUserById(userId);  
            request.setAttribute("user", user);  
            return "userinfo";  
        }  
      
    }  

    用户信息页面userinfo.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"  
        pageEncoding="UTF-8"%>  
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    <html>  
    <head>  
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    <title>userinfo.jsp</title>  
    </head>  
    <body>  
            <c:if test="${sessionScope.user != null}">  
                <h3>HttpSession对象中也存了用户信息!用户信息如下:</h3>   
                            用户编号:${sessionScope.user.no}  
                <br>  
                            用户名:${sessionScope.user.userName}  
                <br>  
                            年龄:${sessionScope.user.age}  
            </c:if>  
            <c:if test="${requestScope.user != null}">  
                <h3>HttpServletRequest对象中存的用户信息如下:</h3>   
                            用户编号:${requestScope.user.no}  
                <br>  
                            用户名:${requestScope.user.userName}  
                <br>  
                            年龄:${requestScope.user.age}  
            </c:if>  
    </body>  
    </html>  

    效果:

    方式一:通过org.springframework.web.servlet.ModelAndView实现

    方式二:通过org.springframework.ui.Model实现

    方式三:通过org.springframework.ui.ModelMap实现

    方式四:通过java.util.Map实现

    方式五:通过org.springframework.web.bind.annotation.SessionAttributes标注指定Model中的某些数据也存储到HttpSession中

    方式六:通过org.springframework.web.bind.annotation.ModelAttribute实现

    方式七:直接将数据存到HttpSession,让页面可以获取

    方式八:直接将数据存到HttpServletRequest,让页面可以获取

    项目demo见https://github.com/zengyh/MavenSpringMvcDemo.git

    要实现Controller返回数据给页面,Spring MVC 提供了以下几种途径:

    • ModelAndView:将视图和数据封装成ModelAndView对象,作为方法的返回值,数据最终会存到HttpServletRequest对象中!
    • Model对象:通过给方法添加引用Model对象入参,直接往Model对象添加属性值。那么哪些类型的入参才能够引用Model对象,有三种类型,分别是  org.springframework.ui.Model、org.springframework.ui.ModelMap 或 java.uti.Map。只要是这些类型的入参,都是指向Model对象的,而且不管定义多少个这些类型的入参都是指向同一个Model对象!
    • @SessionAttributes:通过给Controller类添加@SessionAttributes注解,该注解的name和value属性值都是Model的key值,意思是指Model中这些key对应的数据也会存到HttpSession,不仅仅存到HttpServletRequest对象中!这样页面可以共享HttpSession中存的数据了!
    • @ModelAttribute:使用@ModelAttribute注解的方法会在此Controller每个方法执行前被执行,指定@ModelAttribute的name或value都是一样的功能,都是作为key,将注解的方法返回的对象作为value存放到Model中,不指定name和value的话,则以注解的方法返回的类型名称首字母小写作为key。

    当然,除了上述的途径,也可以使用传统的方式,那就是直接使用HttpServletRequest或HttpSession对象来存数据,页面上再去取。

    注意:Model中存的数据,最终都会存放到HttpServletRequest对象中,页面上可以通过HttpServletRequest对象获取数据。

    接下来,我们就看看demo,通过demo来理解如何通过这几种方式实现将数据返回给页面。

    demo场景:通过ResetFul风格的URL路径传递用户ID给Controller,Controller查询出对应的用户信息返回给页面。

    Spring MVC配置的视图解析器:

    [html] view plain copy
     
    1. <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
    2.     <property name="prefix" value="/jsp/" />  
    3.     <property name="suffix" value=".jsp" />  
    4. </bean>  

    ReturnModelDataController1.java:

    [java] view plain copy
     
    1. package edu.mvcdemo.controller;  
    2.   
    3. import java.util.Map;  
    4.   
    5. import org.springframework.beans.factory.annotation.Autowired;  
    6. import org.springframework.beans.factory.annotation.Qualifier;  
    7. import org.springframework.context.annotation.Scope;  
    8. import org.springframework.stereotype.Controller;  
    9. import org.springframework.ui.Model;  
    10. import org.springframework.ui.ModelMap;  
    11. import org.springframework.web.bind.annotation.PathVariable;  
    12. import org.springframework.web.bind.annotation.RequestMapping;  
    13. import org.springframework.web.bind.annotation.RequestMethod;  
    14. import org.springframework.web.servlet.ModelAndView;  
    15. import edu.mvcdemo.model.User;  
    16. import edu.mvcdemo.service.IUserService;  
    17.   
    18. /** 
    19.  * @编写人: yh.zeng 
    20.  * @编写时间:2017-7-10 下午9:16:54 
    21.  * @文件描述: Controller中如何将model数据返回给页面的demo1 
    22.  */  
    23. @Controller  
    24. @Scope(value="singleton"//只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton  
    25. @RequestMapping("users")  
    26. public class ReturnModelDataController1 {  
    27.       
    28.     @Autowired  
    29.     @Qualifier("userService")  
    30.     private IUserService userService;  
    31.   
    32.       
    33.     /** 
    34.      * 方式一,通过ModelAndView返回用户信息数据到页面 
    35.      * @return 
    36.      */  
    37.     @RequestMapping(value="/view/{userId}/use/ModelAndView", method=RequestMethod.GET)  
    38.     private ModelAndView getUserInfo(@PathVariable("userId") Integer userId){  
    39.         User user = userService.getUserById(userId);  
    40.         return new ModelAndView("userinfo""user", user);  
    41.     }  
    42.       
    43.     /** 
    44.      * 方式二,通过Model返回用户信息数据到页面 
    45.      * @return 
    46.      */  
    47.     @RequestMapping(value="/view/{userId}/use/Model", method=RequestMethod.GET)  
    48.     private String getUserInfo(@PathVariable("userId") Integer userId, Model model){  
    49.         User user = userService.getUserById(userId);  
    50.         model.addAttribute("user", user);  
    51.         return "userinfo";  
    52.     }  
    53.       
    54.       
    55.     /** 
    56.      * 方式三,通过ModelMap返回用户信息数据到页面 
    57.      * @return 
    58.      */  
    59.     @RequestMapping(value="/view/{userId}/use/ModelMap", method=RequestMethod.GET)  
    60.     private String getUserInfo(@PathVariable("userId") Integer userId, ModelMap model){  
    61.         User user = userService.getUserById(userId);  
    62.         model.addAttribute("user", user);  
    63.         return "userinfo";  
    64.     }  
    65.       
    66.     /** 
    67.      * 方式四,通过Map返回用户信息数据到页面 
    68.      * @return 
    69.      */  
    70.     @RequestMapping(value="/view/{userId}/use/Map", method=RequestMethod.GET)  
    71.     private String getUserInfo(@PathVariable("userId") Integer userId, Map<String,Object> model){  
    72.         User user = userService.getUserById(userId);  
    73.         model.put("user", user);  
    74.         return "userinfo";  
    75.     }  
    76.   
    77. }  

    RetunnModelDataController2.java:

    [java] view plain copy
     
    1. package edu.mvcdemo.controller;  
    2.   
    3. import org.springframework.beans.factory.annotation.Autowired;  
    4. import org.springframework.beans.factory.annotation.Qualifier;  
    5. import org.springframework.context.annotation.Scope;  
    6. import org.springframework.stereotype.Controller;  
    7. import org.springframework.web.bind.annotation.PathVariable;  
    8. import org.springframework.web.bind.annotation.RequestMapping;  
    9. import org.springframework.web.bind.annotation.RequestMethod;  
    10. import org.springframework.web.bind.annotation.SessionAttributes;  
    11. import org.springframework.web.servlet.ModelAndView;  
    12. import edu.mvcdemo.model.User;  
    13. import edu.mvcdemo.service.IUserService;  
    14.   
    15. /** 
    16.  * @编写人: yh.zeng 
    17.  * @编写时间:2017-7-11 下午9:09:03 
    18.  * @文件描述: Controller中如何将model数据返回给页面的demo2 
    19.  */  
    20. @Controller  
    21. @Scope(value="singleton"//只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton  
    22. @RequestMapping("users")  
    23. @SessionAttributes({"user"}) //Model中key=user的数据也会存到HttpSession  
    24. public class RetunnModelDataController2 {  
    25.       
    26.     @Autowired  
    27.     @Qualifier("userService")  
    28.     private IUserService userService;  
    29.       
    30.     /** 
    31.      * 方式五,通过@SessionAttributes将指定key的模型数据存到HttpSession,让页面可以获取 
    32.      * @return 
    33.      */  
    34.     @RequestMapping(value="/view/{userId}/use/SessionAttributes", method=RequestMethod.GET)  
    35.     private ModelAndView getUserInfo(@PathVariable("userId") Integer userId){  
    36.         User user = userService.getUserById(userId);  
    37.         return new ModelAndView("userinfo""user", user);  
    38.     }  
    39.   
    40. }  

    RetunnModelDataController3.java:

    [java] view plain copy
     
    1. package edu.mvcdemo.controller;  
    2.   
    3. import org.springframework.beans.factory.annotation.Autowired;  
    4. import org.springframework.beans.factory.annotation.Qualifier;  
    5. import org.springframework.context.annotation.Scope;  
    6. import org.springframework.stereotype.Controller;  
    7. import org.springframework.ui.Model;  
    8. import org.springframework.web.bind.annotation.ModelAttribute;  
    9. import org.springframework.web.bind.annotation.PathVariable;  
    10. import org.springframework.web.bind.annotation.RequestMapping;  
    11. import org.springframework.web.bind.annotation.RequestMethod;  
    12. import edu.mvcdemo.model.User;  
    13. import edu.mvcdemo.service.IUserService;  
    14.   
    15. /** 
    16.  * @编写人: yh.zeng 
    17.  * @编写时间:2017-7-11 下午9:09:03 
    18.  * @文件描述: Controller中如何将model数据返回给页面的demo3 
    19.  */  
    20. @Controller  
    21. @Scope(value="singleton"//只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton  
    22. @RequestMapping("users")  
    23. public class RetunnModelDataController3 {  
    24.       
    25.     @Autowired  
    26.     @Qualifier("userService")  
    27.     private IUserService userService;  
    28.       
    29.     /** 
    30.      * 注解@ModelAttribute用法一: 
    31.      * 使用@ModelAttribute注解的方法会在此Controller每个方法执行前被执行, 
    32.      * 指定@ModelAttribute的name或value都是一样的功能,都是作为key,将注解的方法返回的对象作为value存放到Model中, 
    33.      * 不指定name和value的话,则以注解的方法返回的类型名称首字母小写作为key。 
    34.      * @param userId  ResetFul路径的请求参数 
    35.      * @return 
    36.      */  
    37.     @ModelAttribute(name="user")   
    38.     public User addAccount(@PathVariable("userId") Integer userId) {    
    39.        return userService.getUserById(userId);    
    40.     }    
    41.   
    42.     /** 
    43.      * 注解@ModelAttribute用法二: 
    44.      * 使用@ModelAttribute注解的方法会在此Controller每个方法执行前被执行 
    45.      * @param userId    ResetFul路径的请求参数 
    46.      * @param model     模型对象,可以使用org.springframework.ui.Model、org.springframework.ui.ModelMap  
    47.      *                       或 java.uti.Map 作为入参类型,以引用模型对象 
    48.      */  
    49.   /*@ModelAttribute 
    50.     public void addAccount(@PathVariable("userId") Integer userId, Model model) {   
    51.        User user =  userService.getUserById(userId);  
    52.        model.addAttribute("user", user); 
    53.     }*/  
    54.       
    55.     /** 
    56.      * 方式六,通过@SessionAttributes将指定key的模型数据存到HttpSession,让页面可以获取 
    57.      * @return 
    58.      */  
    59.     @RequestMapping(value="/view/{userId}/use/ModelAttribute", method=RequestMethod.GET)  
    60.     private String getUserInfo(@PathVariable("userId") Integer userId){  
    61.         return "userinfo";  
    62.     }  
    63.   
    64. }  

    RetunnModelDataController4.java:

    [java] view plain copy
     
    1. package edu.mvcdemo.controller;  
    2.   
    3. import javax.servlet.http.HttpServletRequest;  
    4. import javax.servlet.http.HttpSession;  
    5. import org.springframework.beans.factory.annotation.Autowired;  
    6. import org.springframework.beans.factory.annotation.Qualifier;  
    7. import org.springframework.context.annotation.Scope;  
    8. import org.springframework.stereotype.Controller;  
    9. import org.springframework.web.bind.annotation.PathVariable;  
    10. import org.springframework.web.bind.annotation.RequestMapping;  
    11. import org.springframework.web.bind.annotation.RequestMethod;  
    12. import edu.mvcdemo.model.User;  
    13. import edu.mvcdemo.service.IUserService;  
    14.   
    15. /** 
    16.  * @编写人: yh.zeng 
    17.  * @编写时间:2017-7-11 下午9:09:03 
    18.  * @文件描述: Controller中如何将model数据返回给页面的demo2 
    19.  */  
    20. @Controller  
    21. @Scope(value="singleton"//只实例化一个bean对象(即每次请求都使用同一个bean对象),默认是singleton  
    22. @RequestMapping("users")  
    23. public class RetunnModelDataController4 {  
    24.       
    25.     @Autowired  
    26.     @Qualifier("userService")  
    27.     private IUserService userService;  
    28.       
    29.     /** 
    30.      * 方式七,直接将数据存到HttpSession,让页面可以获取 
    31.      * @param userId 
    32.      * @param session 
    33.      * @return 
    34.      */  
    35.     @RequestMapping(value="/view/{userId}/use/HttpSession", method=RequestMethod.GET)  
    36.     private String getUserInfo(@PathVariable("userId") Integer userId, HttpSession session){  
    37.         User user = userService.getUserById(userId);  
    38.         session.setAttribute("user", user);  
    39.         return "userinfo";  
    40.     }  
    41.       
    42.     /** 
    43.      * 方式八,直接将数据存到HttpServletRequest,让页面可以获取 
    44.      * @param userId 
    45.      * @param session 
    46.      * @return 
    47.      */  
    48.     @RequestMapping(value="/view/{userId}/use/HttpServletRequest", method=RequestMethod.GET)  
    49.     private String getUserInfo(@PathVariable("userId") Integer userId, HttpServletRequest request){  
    50.         User user = userService.getUserById(userId);  
    51.         request.setAttribute("user", user);  
    52.         return "userinfo";  
    53.     }  
    54.   
    55. }  

    用户信息页面userinfo.jsp:

    [html] view plain copy
     
    1. <%@ page language="java" contentType="text/html; charset=UTF-8"  
    2.     pageEncoding="UTF-8"%>  
    3. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
    4. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    5. <html>  
    6. <head>  
    7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    8. <title>userinfo.jsp</title>  
    9. </head>  
    10. <body>  
    11.         <c:if test="${sessionScope.user != null}">  
    12.             <h3>HttpSession对象中也存了用户信息!用户信息如下:</h3>   
    13.                         用户编号:${sessionScope.user.no}  
    14.             <br>  
    15.                         用户名:${sessionScope.user.userName}  
    16.             <br>  
    17.                         年龄:${sessionScope.user.age}  
    18.         </c:if>  
    19.         <c:if test="${requestScope.user != null}">  
    20.             <h3>HttpServletRequest对象中存的用户信息如下:</h3>   
    21.                         用户编号:${requestScope.user.no}  
    22.             <br>  
    23.                         用户名:${requestScope.user.userName}  
    24.             <br>  
    25.                         年龄:${requestScope.user.age}  
    26.         </c:if>  
    27. </body>  
    28. </html>  

    效果:

    方式一:通过org.springframework.web.servlet.ModelAndView实现

    方式二:通过org.springframework.ui.Model实现

    方式三:通过org.springframework.ui.ModelMap实现

    方式四:通过java.util.Map实现

    方式五:通过org.springframework.web.bind.annotation.SessionAttributes标注指定Model中的某些数据也存储到HttpSession中

    方式六:通过org.springframework.web.bind.annotation.ModelAttribute实现

    方式七:直接将数据存到HttpSession,让页面可以获取

    方式八:直接将数据存到HttpServletRequest,让页面可以获取

    项目demo见https://github.com/zengyh/MavenSpringMvcDemo.git

  • 相关阅读:
    JSONP跨域的原理解析( 一种脚本注入行为)
    用Navicat_SSH 连接数据库服务器
    ng-repeat && ng-options的故事
    The different between ng-grid & ui-grid
    Web工作原理
    js操作cookies方法
    人生苦短,我用Python(目录)
    哈希算法
    数据结构
    算法入门
  • 原文地址:https://www.cnblogs.com/a8457013/p/8657453.html
Copyright © 2011-2022 走看看