渲染Web视图

  1. 将模型数据渲染为HTML
  2. 使用JSP视图
  3. 通过tiles定义视图布局
  4. 使用Thymealeaf视图

理解视图渲染

控制器只负责处理请求并返回模型数据和视图名
将控制器中请求处理逻辑与视图中的渲染实现解耦是Spring MVC一个重要特性。
视图解析器通过视图名确定渲染模型的物理位置。

// Spring MVC通过该接口的方法传入视图名和Locale对象,可得到一个view
public interface ViewResolver {View resolveViewName(String viewName, Locale locale) throw Exception;
}// View接口任务就是接受模型以及请求、响应对象,并将输出结果渲染到response中。
public interface View {String getContentType();void render(Map<String, ?> model,HttpServletRequest request,HttpServletResponse response) throws Exception;
}

在一般情况下,我们不需要编写 ViewResolver 和 View 的实现,Spring MVC提供了多个内置的实现。

视图解析器 描述
BeanNameViewResolver 将视图解析为Spring Bean,Bean ID与视图名相同
ContentNegotiatingViewResolver 根据客户端需要的内容类型来解析视图,委托给另外一个能够产生对应内容类型的视图解析器
FreeMarkerViewResolver 将视图解析为FreeMarker模板
InternalResourceViewResolver 将视图解析为Web应用的内部资源(一般为JSP)
JasperReportsViewResolver 将视图解析为JasperReports定义
ResourceBundleViewResolver 将视图解析为资源bundle(一般为属性文件)
TilesViewResolver 将视图解析为Apache Tile定义,其中tile ID与视图名称相同。注意有两个不同的TilesViewResolver实现,分别对应于Tiles 2.0/3.0
UrlBasedViewResolver 直接根据视图的名称解析视图,视图的名称会匹配一个屋里视图的定义
VelocituLayoutViewResolver 将视图解析为Velocity布局,从不同的Velocity模板中组合页面
VelocityViewResolver 将视图解析为Velocity模板
XmlViewResolver 将视图解析为特定XML文件中的bean定义。类似于beanNameViewResolver
XsltViewResolver 将视图解析为XSLT转换后的结果

Spring 4 和Spring 3.2支持以上所有视图解析器。
Spring3.1 除Tiles 3外都支持

配置JSP

  1. 配置InternalResourceViewResolver作为视图解析器
  2. 配置标签库

1) 解析JSTL视图,设置视图解析器的ViewClass为org.springframework.web.servlet.view.JstlView.class
2) 使用Spring的JSP库
声明前缀
表单绑定库:<%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf" %>
Spring通用库:<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>

配置Thymealeaf

Thymeleaf可实现前后端分离。

在Spring MVC中使用Thymeleaf,需配置三个启用 Thymeleaf 与 Spring 集成的bean:

  1. ThymeleafViewResolver:将逻辑视图名解析为Thymeleaf模板视图;
  2. SpringTemplateEngine:处理模板并渲染结果;
  3. TemplateResolver:加载Thymeleaf模板。
@Bean    //Thymeleaf视图解析器
public ThymeleafViewResolver viewResolver(SpringTemplateEngine templateEngine) {ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();viewResolver.setTemplateEngine(templateEngine);return viewResolver;
}@Bean    //模板引擎
public TemplateEngine templateEngine(TemplateResolver templateResolver) {SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(templateResolver);return templateEngine ;
}@Bean    //模板解析器
public TemplateResolver templateResolver() {TemplateResolver templateResolver = new SerlvetContextTemplateResolver();templateResolver.setPrefix("/WEB-INF/templates");templateResolver.setSufix(".html");templateResolver.setTemplateMode("HTML5");return templateResolver;
}

《Spring In Action(第4版)》阅读总结(四)渲染Web视图相关推荐

  1. SPRING IN ACTION 第4版笔记-第四章ASPECT-ORIENTED SPRING-008-带参数的ADVICE

    一. 假设有情形如:cd里有很多轨,当播放音乐时,要统计每个音轨的播放次数,这些统计操作不应放在播放方法里,因为统计不是播放音乐的主要职责,这种情况适合应用AOP. 二. 1. package sou ...

  2. SPRING IN ACTION 第4版笔记-第四章Aspect-oriented Spring-001-什么是AOP

    一. Aspect就是把会在应用中的不同地方重复出现的非业务功能的模块化,比如日志.事务.安全.缓存 In software development, functions that span mult ...

  3. spring(6) 渲染web视图

    [0]README 1)本文部分文字描述转自:"Spring In Action(中/英文版)",旨在review  "spring(6) 渲染web视图" 的 ...

  4. spring mvc 渲染html,在Spring MVC中使用Thymeleaf模板渲染Web视图

    Thymeleaf模板是原生的,不依赖于标签库.它能在接受原始HTML的地方进行编辑和渲染.由于没有与Servlet规范耦合,因此Thymeleaf模板能够进入JSP所无法涉及的领域 如果想要在Spr ...

  5. 《Spring实战》读书笔记-第6章 渲染Web视图,java基础入门第二版pdf百度云

    Spring提供了两种支持JSP视图的方式: InternalResourceViewResolver会将视图名解析为JSP文件.另外,如果在你的JSP页面中使用了JSP标准标签库(JavaServe ...

  6. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-008-SpEL介绍

    一. 1.SpEL expressions are framed with  #{ ... } 2.SpEl的作用 Sp EL has a lot of tricks up its sleeves, ...

  7. SPRING IN ACTION 第4版笔记-第二章-004-Bean是否单例

    spring的bean默认是单例,加载容器是会被化,spring会拦截其他再次请求bean的操作,返回spring已经创建好的bean. It appears that the CompactDisc ...

  8. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-003-@Conditional根据条件生成bean及处理profile...

    一.用@Conditional根据条件决定是否要注入bean 1. package com.habuma.restfun;public class MagicBean {} 2. package co ...

  9. SPRING IN ACTION 第4版笔记-第二章-002-@ComponentScan、@Autowired的用法

    一.@ComponentScan 1. @Configuration //说明此类是配置文件 @ComponentScan //开启扫描,会扫描当前类的包及其子包 public class CDPla ...

最新文章

  1. 【转】使用Xcode中的iOS SDK给iphone开发出第一个App程序
  2. LightOJ 1422:Halloween Costumes(区间DP入门)
  3. CUDA遇到在VS创建的项目运行报C1041错误
  4. 预处理指令的开始和结束
  5. python实现条件匹配_python3 re如何匹配满足条件的选项?
  6. 已知圆心,半径,角度,求圆上的点坐标
  7. ARIMA模型之疏系数模型
  8. 【华为云技术分享】如何让敏捷回顾会议更有效果,这样做就对了
  9. 创业,白手起家需要些什么?
  10. 机器学习基础(五十二)—— 朴素贝叶斯细节
  11. 关于HTML(十)-------怎么提升网站页面打开加载速度优化
  12. 密码学加解密实训(墨者学院摩斯密码第2题)
  13. Android模仿新浪微博(写微博界面)
  14. SolidWorks.2020.SP5.0软件下载
  15. Laravel快速入门
  16. Excel进行描述性统计分析
  17. 计算机专业英语四六级,英语四级历年真题,历年四六级真题电子版?
  18. 计算机多显器设置方法,一个电脑多个显示器怎么设置
  19. MySQL版本号后面包含“-log”代表什么意思?
  20. 《计算机视觉之目标检测》IOU详解及代码

热门文章

  1. oracle导出dmp的时候使用owner
  2. 你好,欢迎来到我的空间,
  3. 读取FTP上的excel文件,并写入数据库
  4. JVM学习手册(X):查看堆内存使用情况以及排错
  5. js 判断 是否在当前页面 当前页面是否在前端
  6. 利用SCCM 2007 软件分发
  7. JavaScript日期有效性检查
  8. 《从Excel到R 数据分析进阶指南》一第1章 生成数据表1.1 导入数据表
  9. gevent开始学习-第一步
  10. #翻译#将像素绘制到屏幕上