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 --& ...
随机推荐
- 20181026_队测_Brick Game
题目描述 给出一个\(n\)行\(m\)列的矩阵,矩阵中每个格子有一个非负整数,现在要求你去除其中的个格子,使得剩下的格子中的数的总和最大.另外,去除\(k\)个格子后,剩下的格子必须满足以下几个性质 ...
- Zabbix-3.0.3实现微信(WeChat)报警
转自:http://blog.sina.com.cn/s/blog_87113ac20102w7hp.html Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来 ...
- 中国的规模优势,有望帮助AI芯片后来者居上?
芯片一直是个神奇的东西,表面上看是电脑.笔记本.智能手机改变了世界,其实,真正改变世界的硬件内核是芯片,芯片相关的技术才是科技界最实用.最浪漫的基础技术,也正因如此,谁掌握了芯片基础技术,谁就能立于 ...
- C++求解N阶幻方
由一道数学题的联想然后根据网上的做法瞎jb乱打了一下,居然对了代码精心附上了注释,有兴趣的童鞋可以看一看..不说了,上代码!(自认为结构很清晰易懂) 1234567891011121314151617 ...
- 使用 Hexo 在 GitHub 上建立博客 · Utopia's Daily Note
使用 Hexo 在 GitHub 上建立博客 # 写在前面 其实我在一月份的就开始写了三篇博客文章,你没有看错,只是写了三篇,然后,就没有然后了.我还在其中一篇文章中写着,不知道自己能够坚持多久.事实 ...
- 教你win7关闭开机动画,大幅度加快开机时间
Win7系统如何关闭开机动画 Win7系统开机动画关闭教程,以前我们说过很多种帮助Win7开机加速的方法,比如减少Win7开机启动的程序.服务或计划任务等.不过这些都优化都是针对已经进入Win7系统后 ...
- PHP RabbitMQ 教程(三)
发布/订阅 我们在上一节创建了一个工作队列,并假定队列对应的任务传送给了某个客户端.在这一章节我们会做一些完全不一样的东西–我们会发送一条消息到多个消费者,也称之为"发布/订阅"模 ...
- MySQL增、删、改、查基础操作(C++)
系统平台:Centos7 MySQL版本:5.7.19 连接MySQL数据库 MySQL::MySQL(string host, string user, string passwd, string ...
- 深度学习论文笔记:Fast R-CNN
知识点 mAP:detection quality. Abstract 本文提出一种基于快速区域的卷积网络方法(快速R-CNN)用于对象检测. 快速R-CNN采用多项创新技术来提高训练和测试速度,同时 ...
- textarea 实现高度自动增长
有时候希望textarea 能够自动调整高度来适应输入的内容 网上看到了很多解决方案,比如动态创建一个隐藏的div,当用户输入的时候将textarea的内容绑定到div,由于div的高度会自动撑开,因 ...