Spring Web MVC框架(四) 视图和视图解析

简介: 视图解析器在Spring中视图相关的两个接口是ViewResolver和View两个接口,ViewResolver用于视图名称和实际视图之间的映射,View接口用于准备和传递数据到实际的视图。

视图解析器

在Spring中视图相关的两个接口是ViewResolverView两个接口,ViewResolver用于视图名称和实际视图之间的映射,View接口用于准备和传递数据到实际的视图。

下面是一些Spring支持的一些ViewResolver。对于其他视图技术(例如Thymeleaf)可能自己实现视图解析器以便和Spring集成。

视图解析器 功能
AbstractCachingViewResolver 一个抽象视图,继承该类可以让视图解析器具有缓存功能
XmlViewResolver 接受XML文件的视图解析器,默认配置文件在/WEB-INF/views.xml
ResourceBundleViewResolver 使用properties配置文件的视图解析器,默认配置文件是类路径下的views.properties
UrlBasedViewResolver 一个简单的视图解析器,不做任何匹配,需要视图名和实际视图文件名相同
InternalResourceViewResolver UrlBasedViewResolver的一个子类,支持Servlet容器的内部类型(JSP、Servlet、以及JSTL等),可以使用setViewClass(..)指定具体的视图类型
FreeMarkerViewResolver 也是UrlBasedViewResolver的子类,用于FreeMarker视图技术
ContentNegotiatingViewResolver 用于解析基于请求文件名或Accept header的视图

下面是一个InternalResourceViewResolver,当我们传递一个index时,它会添加前缀和后缀,最终解析出实际的视图文件WEB-INF/jsp/index.jsp

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
    <property name="prefix" value="/WEB-INF/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>

另外Spring支持的几种视图还可以使用mvc命名空间简化。

<mvc:view-resolvers>
    <mvc:freemarker/>
    <mvc:groovy/>
    <mvc:tiles/>
    <mvc:jsp suffix=".jsp"
             prefix="/WEB-INF/jsp/"
             view-class="org.springframework.web.servlet.view.JstlView"/>

</mvc:view-resolvers>

可以定义多个视图解析器,这时候可以使用order属性指定视图解析的顺序,InternalResourceViewResolver总是最后一个视图解析器。

转发和重定向

在控制器中还可以设置转发和重定向,概念和Servlet中转发和重定向类似。在视图名前添加redirect:前缀会重定向到该视图,这样页面和URL都会改变。前缀forward:表示转发,内容会改变但是URL不会变。

视图

JSP和JSTL

JSP和JSTL的视图解析器配置已经在前面说了。这里就不重复了。

Thymeleaf

Thymeleaf是一个新的模板引擎,和传统的JSP相比有很多优点:一是基于HTML模板,因此比JSP更加直接,易于阅读;二是模板引擎独立于Servlet容器,因此可以在非Web环境下运行,也可以用来渲染电子邮件等。Thymeleaf和Spring的支持是由Thymeleaf团队进行的。

要添加Thymeleaf的支持,首先需要添加Thymeleaf的依赖项。在Gradle中很简单,由于thymeleaf-spring4依赖于thymeleaf-core,因此添加thymeleaf-spring4就会自动添加thymeleaf-core,非常方便。

dependencies {
    compile group: 'org.thymeleaf', name: 'thymeleaf-spring4', version: '3.0.0.RELEASE'
}

之后需要配置Thymeleaf的视图解析器。对于Thymeleaf来说,还需要配置它的视图引擎和视图解析器。

<bean id="templateResolver"
      class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
    <property name="prefix" value="/WEB-INF/templates/"/>
    <property name="suffix" value=".html"/>
    <property name="templateMode" value="HTML5"/>
</bean>

<bean id="templateEngine"
      class="org.thymeleaf.spring4.SpringTemplateEngine">
    <property name="templateResolver" ref="templateResolver"/>
</bean>
<bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
    <property name="templateEngine" ref="templateEngine"/>
    <property name="order" value="1"/>
    <property name="characterEncoding" value="UTF-8"/>
</bean>

然后编写一个Themeleaf视图。由于Spring Web MVC的良好的分层,因此我们的代码完全不用更改就可以使用Thymeleaf视图。关于Thymeleaf的详细使用方法参见其文档

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>主页</title>
</head>
<body>
<h1>呵呵<span th:text="${name}"></span></h1>
</body>
</html>

除了这两种之外,还有很多常用的视图技术,例如FreeMarkder、Groovy标记模板等。它们的使用方法请查看相应文档。

相关文章
|
10天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
4天前
|
前端开发 数据挖掘 API
使用Python中的Flask框架进行Web应用开发
【4月更文挑战第15天】在Python的Web开发领域,Flask是一个备受欢迎的轻量级Web框架。它简洁、灵活且易于扩展,使得开发者能够快速地构建出高质量的Web应用。本文将深入探讨Flask框架的核心特性、使用方法以及在实际开发中的应用。
|
6天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
16天前
|
前端开发 安全 Java
使用Java Web框架:Spring MVC的全面指南
【4月更文挑战第3天】Spring MVC是Spring框架的一部分,用于构建高效、模块化的Web应用。它基于MVC模式,支持多种视图技术。核心概念包括DispatcherServlet(前端控制器)、HandlerMapping(请求映射)、Controller(处理请求)、ViewResolver(视图解析)和ModelAndView(模型和视图容器)。开发流程涉及配置DispatcherServlet、定义Controller、创建View、处理数据、绑定模型和异常处理。
使用Java Web框架:Spring MVC的全面指南
|
20天前
|
前端开发 JavaScript 数据管理
描述一个使用Python开发Web应用程序的实际项目经验,包括所使用的框架和技术栈。
使用Flask开发Web应用,结合SQLite、Flask-SQLAlchemy进行数据管理,HTML/CSS/JS(Bootstrap和jQuery)构建前端。通过Flask路由处理用户请求,模块化代码提高可维护性。unittest进行测试,开发阶段用内置服务器,生产环境可选WSGI服务器或容器化部署。实现了用户注册登录和数据管理功能,展示Python Web开发的灵活性和效率。
14 4
|
30天前
|
数据库
最全三大框架整合(使用映射)——struts.xml和web.xml配置
最全三大框架整合(使用映射)——数据库资源文件jdbc.properties
9 0
|
1月前
|
前端开发 开发者 UED
构建响应式Web界面:Flexbox与Grid布局的深度解析
【2月更文挑战第28天】 在现代前端开发中,打造灵活且适应不同屏幕尺寸的用户界面是至关重要的。随着移动设备的普及,响应式设计已经成为网页制作不可或缺的一部分。本文将深入探讨两种强大的CSS布局模块——Flexbox和Grid,它们如何简化布局创建过程,并赋予设计师更大的灵活性去构建动态和流畅的响应式界面。通过对这两种技术的比较、使用场景分析以及代码示例,读者将能够更好地理解何时以及如何使用这些工具来提升前端项目的质量和效率。
16 0
|
5月前
|
Java Spring
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
spring框架之AOP模块(面向切面),附带通知类型---超详细介绍
51 0
|
5月前
|
缓存 监控 Java
Spring框架之AOP(面向切面编程)
Spring框架之AOP(面向切面编程)
34 0
|
3月前
|
Java Spring
spring框架 aop:aspectj-autoproxy proxy-target-class=“true“用法理解
spring框架 aop:aspectj-autoproxy proxy-target-class=“true“用法理解

推荐镜像

更多