SpringMVC框架——视图解析
SpringMVC视图解析,就是将业务数据绑定给JSP域对象,并在客户端进行显示。
域对象:
pageContext、request、session、application
业务数据绑定是有ViewResolver 完成的;
SpringMVC提供了一下几种方式绑定业务数据:
1、Map
2、Model
3、ModelAndView
4、@sessionAttribute
5、@ModelAttribute
- 业务数据绑定到request域对象
Map
SpringMVC在内部使用Model接口存储业务数据,在调用业务方法之前会创建一个隐含对象作为业务数据的存储容器。设置业务方法的入参为Map类型,SpringMVC会将隐含对象的引用传递给入参。
开发者可以对模型中所有数据进行管理,包括访问和添加、修改、删除。
开发者只需要在业务方法处添加Map类型的入参,方法体中便可以通过对入参的操作来完成业务数据的添加。
@RequestMapping("/map") public String mapTest(Map<String, User> map){ User user = new User(); user.setId(7); user.setName("cronaldo"); user.setAge(35); map.put("user", user); return "show"; }
访问http://localhost:7777/view/map
Model
与Map类似,业务方法通过入参来完成业务数据的绑定。
@RequestMapping("/model") public String modelTest(Model model){ User user = new User(); user.setId(10); user.setName("meisi"); user.setAge(33); model.addAttribute("user", user); return "show"; }
访问http://localhost:7777/view/model
HTTPServletRequest
@RequestMapping("/request") public String request(HttpServletRequest request){ User user = new User(); user.setId(8); user.setName("kaka"); user.setAge(39); request.setAttribute("user", user); return "show"; }
访问http://localhost:7777/view/request
ModelAndView
与 Map、 Model 不同的是, ModelAndView 不但包含了业务数据,同时也包含了视图信息,将视图和业务数据进行了整合,封装成一个对象,如果使用 ModelAndView 来处理业务数据,业务方法的返回值必须是 ModelAndView 对象。
业务方法中对 ModelAndView 进行两个操作:
1、填充业务数据
2、绑定视图信息
@RequestMapping("/modelAndView") public ModelAndView modelAndView(){ User user = new User(); user.setId(77); user.setName("buFeng"); user.setAge(41); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("user", user); modelAndView.setViewName("show"); return modelAndView; }
访问http://localhost:7777/view/modelAndView
@RequestMapping("/modelAndView2") public ModelAndView modelAndView2(){ User user = new User(); user.setId(77); user.setName("buFeng"); user.setAge(41); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("user", user); View view = new InternalResourceView("/show.jsp"); modelAndView.setView(view); return modelAndView; }
访问http://localhost:7777/view/modelAndView2
@ModelAttribute
1、定义一个方法,该方法用来返回要填充到业务数据中的对象;
2、给该方法添加@ModelAttribute注解,该方法不是业务方法;
@RequestMapping("/modelAttribute") public String modelAttribute(){ return "show"; } @ModelAttribute public User getUser(){ User user = new User(); user.setId(123); user.setName("sunjian"); user.setAge(32); return user; } @ModelAttribute public void getUser2(Model model){ User user = new User(); user.setId(124); user.setName("sunjian3"); user.setAge(33); model.addAttribute("user", user); } @ModelAttribute public void getUser3(Map<String, User> map){ User user = new User(); user.setId(125); user.setName("sunjia4"); user.setAge(34); map.put("user", user); }
访问http://localhost:7777/view/modelAttribute
- 业务数据绑定到session域对象
session
@RequestMapping("/session") public String session(HttpServletRequest request){ User user = new User(); user.setId(9); user.setName("sunjian9"); user.setAge(29); request.getSession().setAttribute("user", user); return "show2"; } @RequestMapping("/session2") public String session2(HttpSession session){ User user = new User(); user.setId(8); user.setName("sunjian10"); user.setAge(28); session.setAttribute("user", user); return "show2"; }
访问http://localhost:7777/view/session
访问http://localhost:7777/view/session2
@SessionAttributes
在类定义处添加@SessionAttributes注解,只要业务方法中向域对象中存入了模型数据,则SpringMVC会自动把它同步到session中。有名称、类型两种方式。
@SessionAttributes(value = "user")
@SessionAttributes(types = User.class)
@RequestMapping("/session3") public ModelAndView session2(){ User user = new User(); user.setId(007); user.setName("sunjian007"); user.setAge(27); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("show2"); modelAndView.addObject("user", user); return modelAndView; }
访问http://localhost:7777/view/session3
完整代码如下:
entity
package com.sunjian.entity; /** * @author sunjian * @date 2020/3/17 14:25 */ public class User { private Integer id; private String name; private Integer age; @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", age=" + age + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
controller
package com.sunjian.controller; import com.sunjian.entity.Address; import com.sunjian.entity.User; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.View; import org.springframework.web.servlet.view.InternalResourceView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Map; /** * @author sunjian * @date 2020/3/17 19:17 */ @Controller @RequestMapping("/view") //@SessionAttributes(value = "user") @SessionAttributes(types = User.class) public class ViewController { @RequestMapping("/map") public String mapTest(Map<String, User> map){ User user = new User(); user.setId(7); user.setName("cronaldo"); user.setAge(35); map.put("user", user); return "show"; } @RequestMapping("/model") public String modelTest(Model model){ User user = new User(); user.setId(10); user.setName("meisi"); user.setAge(33); model.addAttribute("user", user); return "show"; } @RequestMapping("/request") public String request(HttpServletRequest request){ User user = new User(); user.setId(8); user.setName("kaka"); user.setAge(39); request.setAttribute("user", user); return "show"; } @RequestMapping("/modelAndView") public ModelAndView modelAndView(){ User user = new User(); user.setId(77); user.setName("buFeng"); user.setAge(41); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("user", user); modelAndView.setViewName("show"); return modelAndView; } @RequestMapping("/modelAndView2") public ModelAndView modelAndView2(){ User user = new User(); user.setId(77); user.setName("buFeng"); user.setAge(41); ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("user", user); View view = new InternalResourceView("/show.jsp"); modelAndView.setView(view); return modelAndView; } @RequestMapping("/modelAttribute") public String modelAttribute(){ return "show"; } @ModelAttribute public User getUser(){ User user = new User(); user.setId(123); user.setName("sunjian"); user.setAge(32); return user; } @ModelAttribute public void getUser2(Model model){ User user = new User(); user.setId(124); user.setName("sunjian3"); user.setAge(33); model.addAttribute("user", user); } @ModelAttribute public void getUser3(Map<String, User> map){ User user = new User(); user.setId(125); user.setName("sunjia4"); user.setAge(34); map.put("user", user); } @RequestMapping("/session") public String session(HttpServletRequest request){ User user = new User(); user.setId(9); user.setName("sunjian9"); user.setAge(29); request.getSession().setAttribute("user", user); return "show2"; } @RequestMapping("/session2") public String session2(HttpSession session){ User user = new User(); user.setId(8); user.setName("sunjian10"); user.setAge(28); session.setAttribute("user", user); return "show2"; } @RequestMapping("/session3") public ModelAndView session2(){ User user = new User(); user.setId(007); user.setName("sunjian007"); user.setAge(27); ModelAndView modelAndView = new ModelAndView(); modelAndView.setViewName("show2"); modelAndView.addObject("user", user); return modelAndView; } }
show.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> ${user} </body> </html>
show2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ page isELIgnored="false" %> <html> <head> <title>Title</title> </head> <body> ${sessionScope.user} </body> </html>
OK.
SpringMVC框架——视图解析的更多相关文章
- SpringMVC源码分析6:SpringMVC的视图解析原理
title: SpringMVC源码分析6:SpringMVC的视图解析原理 date: 2018-06-07 11:03:19 tags: - SpringMVC categories: - 后端 ...
- SpringMVC 多视图解析器配置以及问题
在SpringMVC模式当中可以通过如下配置来支持多视图解析 <!-- jsp jstl --> <bean id="JSPViewResolver" class ...
- SpringMVC——说说视图解析器
学习SpringMVC——说说视图解析器 各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请 ...
- SpringMVC框架图解析
Spring框架提供了构造Web应用程序的全能MVC模块.Spring MVC分离了控制器.模型对象.分派器以及处理程序对象的角色,这种分离让它们更容易进行制定.是一个标准的MVC框架. 那你猜一猜哪 ...
- springmvc返回视图(解析)
1.什么是视图? 视图就是展示给用户看的结果.可以是很多形式,例如:html.JSP.excel表单.Word文档.PDF文档.JSON数据.freemarker模板视图等等. 2.传统JSP和JST ...
- 学习SpringMVC——说说视图解析器
各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...
- SpringMVC的视图解析器
ViewResolver和View介绍 SpringMVC用于处理视图最重要的两个接口是ViewResolver和View.ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真正的视 ...
- springMVC初探视图解析器——InternalResourceViewResolver
springmvc在处理器方法中通常返回的是逻辑视图,如何定位到真正的页面,就需要通过视图解析器. springmvc里提供了多个视图解析器,InternalResourceViewResolver就 ...
- SpringMVC中视图解析器
视图解析器:固定写法直接coppy就行 1.dispatcherServlet-servlet.xml中添加 <!-- 视图解析器InternalResourceViewResolver --& ...
随机推荐
- 使用 Commitizen 撰写 Angular 规范的 commit message
本文为原创文章,转载请标明出处 目录 安装及配置 使用 1. 安装及配置 npm install -g commitizen npm install -g cz-conventional-change ...
- H5本地离线存储
前言上一篇文件结尾,有同学问我本地存储图片方法,其实本地存储方式有很多,我们打开谷歌浏览器,查看源代码,在resources页签中,有web SQl ,indexedDB等等,我前面文章讲过Local ...
- python编程基础——集合
集合是是基本数据类型的一种集合类型. 作用:去重 属性:intersection.union.difference.issubset 实例: list_1=[1,2,3,4,3,5,2,6,1]lis ...
- 使用Google App Engine开始新的网站开发学习
继长时间的迷茫后,我发现还是回归php网站开发更适合我,或者没有那么深刻,但至少要做点事情.不知道以后将从事什么样的工作,但现在找点事情做还是很好的.所以,为了激发我学习的热情,我在网上搜了一下免费云 ...
- 这是100年后火星的未来,到处都是CBD!
火星是个荒漠之地,尽管如此,最近几十年人类一直准备登录火星,然后殖民火星.随着科技的迅猛发展,感觉火星离我们越来越近了.不过,人类如何在火星上生存下去,这一直是科学家们最热衷的话题. 意大利建筑师 ...
- marquee横向无缝滚动无js
<!DOCTYPE html><html><head><meta charset="utf-8"> <title>< ...
- Golang/Python/PHP带你彻底学会gRPC
目录 一.gRPC是什么? 二.Protocol Buffers是什么? 三.需求:开发健身房服务 四.最佳实践 Golang 1. 安装protoc工具 2. 安装protoc-gen-go 3. ...
- 这些Zepto中实用的方法集
前言 时间过得可真快,转眼间2017年已去大半有余,你就说吓不吓人,这一年你成长了多少,是否荒度了很多时光,亦或者天天向上,收获满满.今天主要写一些看Zepto基础模块时,比较实用的部分内部方法,在我 ...
- 微信小程序开发,如何优雅地兼容
小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容. 关于单个 API 如何兼容,微信官方提供了兼容文档,因此我们这里不再赘述.下面主要讨论在整个项目如 ...
- Ubuntu16.04下安装python3.6.4详细步骤
记录一下: Ubuntu16.04自带的python版本为python2.7和python3.5,现在想要安装python3.6.4,注意:系统自带的python版本别删除 步骤: # 官网下载安装包 ...