`
y806839048
  • 浏览: 1121190 次
  • 性别: 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...通过这种方式,我们可以轻松地在Spring MVC Controller层实现日志管理,无需在每个方法中手动插入日志代码。这种解耦使得代码更易于维护,同时提供了全面的日志信息,有助于调试和性能分析。

    Spring MVC jar包

    - **DAO层**:Spring MVC中的Service层通常调用DAO层完成数据访问,DAO层使用Hibernate进行具体操作。 在`hibernate3.6.8.chm`文件中,可能包含了Hibernate 3.6.8的官方文档,对于深入理解Hibernate的工作原理和...

    最全最经典spring-mvc教程

    模型数据通过ModelMap或者模型对象(@ModelAttribute)传递,这允许我们在Controller中处理数据,然后将结果传递给视图。视图解析器(ViewResolver)根据指定的逻辑视图名查找物理视图,常见的视图技术有JSP、...

    Spring MVC Controller配置方式

    Spring MVC 支持模型数据自动绑定,可以将请求参数自动绑定到 Controller 方法的参数中,也可以将 Controller 返回的数据自动填充到 Model 中。 六、异常处理 通过 @ExceptionHandler 或自定义 ExceptionResolver,...

    Spring.MVC-A.Tutorial-Spring.MVC学习指南 高清可复制版PDF

    Spring MVC中的Model是业务对象,通常由Service层处理,然后传递给Controller。视图则通常是JSP、Thymeleaf、FreeMarker等模板引擎,用于渲染数据并返回给客户端。视图解析器(ViewResolver)在其中起到了关键作用,...

    Mastering Spring MVC 4(2015.09)源码

    在2015年的版本中,Spring MVC 4已经相当成熟,提供了许多特性来简化开发流程并提高开发效率。在这个"Mastering Spring MVC 4(2015.09)源码"中,我们可以深入理解这个框架的核心概念和实际应用。 首先,Spring MVC ...

    spring mvc mybatis velocity 示范

    Controller将数据传递给Velocity模板,Velocity根据模板内容和传入的数据生成HTML,最后返回给客户端。 总结起来,Spring MVC提供了MVC模式的实现,MyBatis简化了数据库操作,Velocity则负责页面渲染。这三者结合,...

    spring-mvc-官方中文文档

    1. **Spring MVC 概述**:Spring MVC 是基于 Spring 框架构建的,它遵循 MVC 设计模式,将业务逻辑、数据和用户界面分离,提高代码的可重用性和可测试性。Spring MVC 通过 DispatcherServlet 进行请求分发,并使用 ...

    Spring MVC使用Demo

    此外,Spring MVC提供了ModelAndView类,它可以将处理结果(模型数据)和视图名组合在一起,方便返回给视图层进行渲染。`@ResponseBody`注解可以让方法的返回值直接写入HTTP响应体,常用于返回JSON或XML等格式的数据...

    Spring mvc5.0.3 所有jar包

    在Controller方法中,可以返回一个ModelAndView对象,指定返回的视图和传递给视图的数据。 5. **视图解析**: Spring MVC支持多种视图技术,如JSP、FreeMarker、Thymeleaf等。通过`viewResolver`配置,可以指定视图...

    Spring MVC 基础实例源码01

    4. **Model**:模型对象,封装了业务数据,Controller处理完请求后,会将Model对象传给View,以便在页面上展示。 5. **ViewResolver**:视图解析器,负责根据Controller返回的视图名称查找实际的视图资源,如JSP、...

    spring mvc controller间跳转 重定向 传参

    在 Spring MVC 框架中,controller 间跳转重定向传参是一个非常常见的需求。这里,我们将讨论三种常见的情况:不带参数跳转、带参数拼接 URL 形式跳转、带参数不拼接参数跳转。 一、不带参数跳转 在某些情况下,...

    Spring MVC 教程快速入门 深入分析

    三、Spring MVC核心流程图:描述了Spring MVC处理请求的流程,包括前端控制器接收请求,经过分发器分发给具体的控制器,然后由控制器处理业务逻辑,最后将结果返回给用户。 四、Spring MVC DispatcherServlet说明:...

    spring MVC .docx

    在处理请求时,控制器会将数据填充到模型中,然后传递给视图层。 4. **ViewResolver**: 视图解析器的作用是根据模型中的视图名找到对应的视图模板。Spring MVC支持多种视图技术,如JSP、Thymeleaf、FreeMarker等。 ...

    精通Spring MVC4

    在Spring MVC中,DispatcherServlet作为核心组件负责请求分发,Controller处理请求并返回ModelAndView对象,ViewResolver解析模型数据并渲染视图。 2. **配置与启动** 配置Spring MVC通常涉及web.xml文件中的...

    spring-MVC.zip_Java spring mvc_spring mvc_spring mvc

    在Controller中处理完业务逻辑后,会将数据封装到Model对象中,供视图层使用。 4. **View**:视图是用户界面,Spring MVC支持多种视图技术,如JSP、FreeMarker、Thymeleaf等。视图解析器会根据ModelAndView中的信息...

    Spring MVC之Controller层的常用注解

    可以用于方法参数和返回值,用于从请求中获取数据或将数据注入到模型中。 9. `@ExceptionHandler`:用于处理全局异常。当Controller方法抛出异常时,标注了`@ExceptionHandler`的方法会被调用,可以统一处理错误并...

    Spring MVC框架的各种依赖包下载

    4. **Controller**:Controller组件负责处理用户请求,它会调用业务逻辑(Service层),处理完数据后,将结果返回给Model,最终由View进行展示。 5. **Model和View**:Model通常包含了业务对象和它们的状态,而View...

Global site tag (gtag.js) - Google Analytics