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 --& ...
随机推荐
- 默认的Settings.xml文件(无修改过)-Maven
Tip: 当什么都不作修改时,默认是从Maven中央仓库进行下载,https://repo.maven.apache.org/maven2. 打开maven源码下的lib文件夹,找到maven-mod ...
- Linux上SVN安装
SVN,Subversion,是一个开源的版本控制系统. svn有两种运行方式:独立的服务器和借助apache运行,各有利弊.
- python 堡垒机讲解及实例
paramiko模块,该模块基于SSH用于连接远程服务器并执行相关操作. SSHClient:用于连接远程服务器并执行基本命令 #coding:utf-8 import paramiko ssh=pa ...
- springboot oauth 鉴权之——password鉴权相当于jwt鉴权模式
近期一直在研究鉴权方面的各种案例,这几天有空,写一波总结及经验. 第一步:什么是 OAuth鉴权 OAuth2是工业标准的授权协议.OAuth2取代了在2006创建的原始OAuthTM协议所做的工作. ...
- 在python中使用json
在服务器和客户端的数据交互的时候,要找到一种数据格式,服务端好处理,客户端也好处理,这种数据格式应该是一种统一的标准,不管在哪里端处理起来都是统一的,现在这种数据格式非常的多,比如最早的xml,再后来 ...
- 算法设计与分析-Week12
题目描述 You are given coins of different denominations and a total amount of money amount. Write a func ...
- O2O疯狂烧钱路:止血还是放血好
在国内,无论是互联网巨头还是创业者,很多都将O2O领域当做下一个金矿.而对于很多O2O项目来说,市场规模.用户基数.发展潜力等传统指数依然被当做硬性指标.而为了抢夺用户,很多O2O项目都只能疯狂烧钱, ...
- 两个不错的IT类优质号
虽然标题已经被用烂了,但是我觉得还是用这样的方式介绍这两个不错的公众号,可能你们刚好需要,我刚好知道,仅此而已. 刚认识的一个小哥哥和一个小姐姐,他们都非常优秀,有喜欢Java和Linux的同学千万不 ...
- C++扬帆远航——10(求π)
/* * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:π.cpp * 作者:常轩 * 微信公众号:Worldhello ...
- python复制多层目录下的文件至其他盘符对应的目录中
一.需求 app打包需要打入一些H5进去,以便更快的加载页面.这些H5文件是散落在各个文件夹中的[如下列所示],偶尔各个文件夹还需新增文件,每次新增一个文件,需要改动jenkins上job脚本,比较麻 ...