`
y806839048
  • 浏览: 1077354 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

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:

 

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,让页面可以获取

--------------------- 

 

分享到:
评论

相关推荐

    Spring Mvc AOP通过注解方式拦截controller等实现日志管理

    Spring Mvc AOP通过注解方式拦截controller等实现日志管理

    Spring MVC之Controller层的常用注解

    Spring MVC之Controller层的常用注解

    spring mvc controller间跳转 重定向 传参

    spring mvc controller间跳转 重定向 传参

    [免费]Spring MVC学习指南(高清)

    Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。 ...

    spring MVC 实例代码

    基于注解的spring mvc,dao 层注解:@Repository("userDao"), entity层注解:@Entity,service层注解:@Service("userService"), action层注解:@Controller("userController") @RequestMapping("/user.do")

    大优惠 Spring MVC学习指南(第2版)2017.pdf

    Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。 ...

    Spring MVC 入门实例

    9 import org.springframework.web.servlet.mvc.Controller; 10 import org.springframework.web.servlet.ModelAndView; 11 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet....

    Spring MVC依赖包

    Spring mvc依赖包 Spring mvc都做了些什么 Controller为中心完成对系统流程的控制管理 从请求中搜集数据 ...将结果返回给视图 针对不同的视图提供不同的解决方案 针对jsp视图技术提供标签库 拦截器 上传文件

    Spring MVC, A Tutorial, second edition 【2016】

    The MVC in Spring MVC stands for Model-View-Controller, a design pattern widely used in Graphical User Interface (GUI) development. This pattern is not only common in web development, but is also ...

    Spring MVC学习指南

    Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。, ...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南

    Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界主流的Web开发框架,Spring MVC已经成为当前热门的开发技能,同时也广泛用于桌面开发领域。  ...

    学习Spring MVC,关于注解的Spring MVC,简单例子,关于控制器的Spring MVC,学习Spring,简单Spring MVC实例

    学习Spring MVC,关于注解的Spring MVC,简单例子,关于控制器的Spring MVC,学习Spring,简单Spring MVC实例

    spring MVC完成controller控制极度精简项目源代码

    此java web 项目demo是一个极度精简的controller控制的小荔枝,下载即可运行。Demo讲解的博客链接是http://blog.csdn.net/qq5132834/article/details/49082103

    21道Java Spring MVC综合面试题详解含答案(值得珍藏)

    Spring MVC是Spring框架中的一部分,全称是Spring Web MVC,主要用于实现MVC设计模式的Web框架。它分离了控制器、模型对象、过滤器以及处理程序对象的角色,使得它们更容易进行定制。 Spring MVC的优点包括: 基于...

    全面掌握Spring MVC:从基础到高级的实践指南

    在Spring MVC中,DispatcherServlet作为前端控制器,负责请求的接收和响应结果的处理。处理器映射器(HandlerMapping)和处理器适配器(HandlerAdapter)是核心组件,负责找到和调用适当的处理器(Controller)。 ...

    Pro Spring MVC With Web Flow

    Spring MVC is a modern web application framework built upon the Spring Framework, and Spring Web Flow is a project that complements Spring MVC for building reusable web controller modules that ...

    Spring.MVC.A.Tutorial.2nd.Edition.1771970316

    The MVC in Spring MVC stands for Model-View-Controller, a design pattern widely used in Graphical User Interface (GUI) development. This pattern is not only common in web development, but is also ...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南.rar

    Spring MVC是Spring框架中用于Web应用快速开发的一个模块,其中的MVC是Model-View-Controller的缩写。作为当今业界最主流的Web开发框架,Spring MVC已经成为当前最热门的开发技能,同时也广泛用于桌面开发领域。 ...

Global site tag (gtag.js) - Google Analytics