springmvc基础知识(2):处理器向页面返回数据的几种方法

之前的博客介绍了搭建一个基本的springmvc运行环境:
搭建springmvc项目之HelloWorld
下面介绍处理器向页面返回数据的几种方法


使用ModelAndView

  • 处理器
package com.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/helloWorld")
public class HelloWorldController {

    @RequestMapping("/sayHello.do")
    public ModelAndView sayHello(){
        ModelAndView mav = new ModelAndView("success");
        mav.addObject("name", "小明");
        return mav;
    }
}
  • 首先new一个ModelAndView实例并指定返回的页面名称
  • 然后使用addObject()设置需要像页面传输的数据
  • 前台可以通过EL表达式${name}获取数据
  • success.jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
    <h1>访问成功!</h1>
    <h2>helloWorld!我的名字叫:${name}</h2>
</body>
</html>
  • 测试页面 index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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>Insert title here</title>
</head>
<body>
    <a href="helloWorld/sayHello.do">HelloWorld!</a>
</body>
</html>

这里写图片描述


使用Model

相同代码省略…

@RequestMapping("/sayHello.do")
public String sayHello(Model model){
    model.addAttribute("name", "小明");
    return "success";
}
  • 设置一个Model方法参数,使用addAttribute设置要传输的数据。
  • 返回值就是页面名称。
  • 这种方式比较常用

使用ModelMap

相同代码省略…

@RequestMapping("/sayHello.do")
public String sayHello(ModelMap model){
    model.addAttribute("name", "小明");
    model.put("name2","小花");
    return "success";
}
  • ModelMap 是个Map集合可以使用Map的基本功能
  • ModelMap 也定义了addAttribute()方法

使用Map

相同代码省略…

@RequestMapping("/sayHello.do")
public String sayHello(Map map){
    map.put("name", "小明");
    return "success";
}
  • 设置一个Map方法参数,使用put设置要传输的数据。
  • 返回值就是页面名称。

向request中直接设置值

相同代码省略…

@RequestMapping("/sayHello.do")
public String sayHello(HttpServletRequest request){
    request.setAttribute("name", "小明");
    return "success";
}

上面提供了四种方法: ①ModelAndView ② Model ③Map ④通常用的request方法
前三种是spring封装的,其本质还是request方法


原理:
当处理器处理完请求后,将视图名放入ModelAndView的view属性中,将数据放入ModelAndView的model属性中。然后将这个ModelAndView交给前端控制器DispartcherServlet,前端控制器根据配置的ViewResolver解析这个ModelAndView:

  • 取出页面名称,根据配置定位页面资源。
  • 然后将model中的数据放入request中,然后使用request.getRequestDispatcher(“xxx.jsp”).forward(request,
    response); 跳转到相应的页面。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值