iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringMVCViewResolver视图解析器组件
  • 514
分享到

SpringMVCViewResolver视图解析器组件

SpringMVCViewResolverSpringMVC视图解析器 2023-05-15 08:05:21 514人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录作用类型InternalResourceViewResolverFreeMarkerViewResolverTilesViewResolverContentNeGotiating

spring mvc的视图解析器 ViewResolver 是框架中一个重要的组件,用于将控制器返回的逻辑视图名称解析为具体的视图实现对象,最终呈现给用户的是具体的视图实现,例如 jsP、FreeMarker 模板、Thymeleaf 模板、JSON 等等。本文将介绍 Spring MVC 的视图解析器的作用、类型、以及源码实现。

作用

在 Spring MVC 中,控制器处理完请求之后需要将生成的模型数据和视图名称返回给 DispatcherServlet,DispatcherServlet 会将模型数据和视图名称交给 ViewResolver 进行解析,ViewResolver 将对应的视图解析出来,并返回给 DispatcherServlet,由 DispatcherServlet 进行渲染,最终将渲染后的结果返回给客户端。因此,ViewResolver 的作用是将控制器返回的逻辑视图名称解析为具体的视图实现对象。

类型

Spring MVC 中提供了多种 ViewResolver 类型,不同类型的 ViewResolver 会使用不同的解析策略和算法,下面介绍几种常见的 ViewResolver 类型。

InternalResourceViewResolver

InternalResourceViewResolver 是 Spring MVC 中最常用的视图解析器,它用于解析 JS P或 html 等资源文件。该解析器会将逻辑视图名称加上前缀和后缀,例如将逻辑视图名称 “hello” 解析为 “/WEB-INF/views/hello.jsp”。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class AppConfig {
    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

FreeMarkerViewResolver

FreeMarkerViewResolver 用于解析FreeMarker 模板,它会将逻辑视图名称加上前缀和后缀,例如将逻辑视图名称 “hello” 解析为 “/WEB-INF/views/hello.ftl”。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class AppConfig {
    @Bean
    public FreeMarkerViewResolver viewResolver() {
        FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".ftl");
        return viewResolver;
    }
}

TilesViewResolver

TilesViewResolver 用于解析 Tiles 布局,它会将逻辑视图名称解析为 Tiles 布局,并返回给 DispatcherServlet 进行渲染。Tiles 是一个基于模板的布局框架,可以将页面分成多个部分,每个部分都是一个独立的模板,最终组合成一个完整的页面。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class AppConfig {
    @Bean
    public TilesConfigurer tilesConfigurer() {
        TilesConfigurer tilesConfigurer = new TilesConfigurer();
        tilesConfigurer.setDefinitions(new String[] { "/WEB-INF/tiles.xml" });
        return tilesConfigurer;
    }
    @Bean
    public TilesViewResolver viewResolver() {
        TilesViewResolver viewResolver = new TilesViewResolver();
        return viewResolver;
    }
}

ContentNegotiatingViewResolver

ContentNegotiatingViewResolver 是一个复合视图解析器,它可以根据请求的 Accept 头信息来判断客户端需要的数据类型,并选择对应的视图解析器进行解析。例如客户端请求的 Accept 头信息为 “application/json”,则选择使用 MappingJackson2JsonView 解析器将模型数据渲染成 JSON 格式返回给客户端。

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class AppConfig {
    @Bean
    public ContentNegotiatingViewResolver viewResolver() {
        ContentNegotiatingViewResolver viewResolver = new ContentNegotiatingViewResolver();
        List<ViewResolver> viewResolvers = new ArrayList<>();
        viewResolvers.add(jsonViewResolver());
        viewResolver.setViewResolvers(viewResolvers);
        return viewResolver;
    }
    @Bean
    public MappingJackson2JsonViewResolver jsonViewResolver() {
        MappingJackson2JsonViewResolver jsonViewResolver = new MappingJackson2JsonViewResolver();
        return jsonViewResolver;
    }
}

源码实现

Spring MVC 中的视图解析器是通过 ViewResolver 接口来实现的,该接口定义了两个方法:

public interface ViewResolver {
    View resolveViewName(String viewName, Locale locale) throws Exception;
    String REDIRECT_URL_PREFIX = "redirect:";
    String FORWARD_URL_PREFIX = "forward:";
}

其中,resolveViewName 方法接收一个逻辑视图名称和一个 Locale 对象作为参数,返回一个 View 对象。如果找不到对应的 View 对象,则返回 null。

对于 InternalResourceViewResolver 而言,它的 resolveViewName 方法实现如下:

@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
    String prefix = getPrefix();
    String suffix = getSuffix();
    if (viewName.startsWith(REDIRECT_URL_PREFIX)) {
        String redirectUrl = viewName.substring(REDIRECT_URL_PREFIX.length());
        RedirectView redirectView = new RedirectView(redirectUrl, isRedirectContextRelative(), isRedirectHttp10Compatible());
        String[] hosts = StringUtils.toStringArray(getRedirectHosts());
        if (hosts.length > 0) {
            redirectView.setHosts(hosts);
        }
        return redirectView;
    }
    if (viewName.startsWith(FORWARD_URL_PREFIX)) {
        String forwardUrl = viewName.substring(FORWARD_URL_PREFIX.length());
        InternalResourceView forwardView = new InternalResourceView(forwardUrl);
        forwardView.setApplicationContext(getApplicationContext());
        forwardView.setServletContext(getServletContext());
        forwardView.setAttributesMap(getAttributesMap());
        return forwardView;
    }
    if (!viewName.startsWith(prefix) && !viewName.endsWith(suffix)) {
        viewName = prefix + viewName + suffix;
    }
    return buildView(viewName);
}

在上面的代码中

首先判断逻辑视图名称是否以 redirect: 或 forward: 开头,如果是就返回 RedirectView 或 InternalResourceView 对象。

如果不是,则根据 prefix 和 suffix 属性将逻辑视图名称转换为物理视图名称。

总结

Spring MVC 的视图解析器 ViewResolver 是一个重要的组件,它将控制器返回的逻辑视图名称解析为具体的视图实现对象,最终呈现给用户的是具体的视图实现。

Spring MVC提供了多种 ViewResolver 类型,不同类型的ViewResolver会使用不同的解析策略和算法,例如 InternalResourceViewResolver 用于解析JSP或HTML等资源文件,FreeMarkerViewResolver 用于解析 FreeMarker 模板,TilesViewResolver 用于解析 Tiles 布局,ContentNegotiatingViewResolver 则是一个复合视图解析器,可以根据请求的 Accept 头信息来选择对应的视图解析器进行解析。

ViewResolver 的源码实现遵循了 ViewResolver 接口的规范,即将逻辑视图名称解析为具体的视图实现对象。

到此这篇关于springMVC ViewResolver视图解析器组件的文章就介绍到这了,更多相关SpringMVC ViewResolver内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: SpringMVCViewResolver视图解析器组件

本文链接: https://www.lsjlt.com/news/208539.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringMVCViewResolver视图解析器组件
    目录作用类型InternalResourceViewResolverFreeMarkerViewResolverTilesViewResolverContentNegotiating...
    99+
    2023-05-15
    SpringMVC ViewResolver SpringMVC视图解析器
  • SpringMVC ViewResolver视图解析器组件怎么用
    本篇内容主要讲解“SpringMVC ViewResolver视图解析器组件怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringMVC ViewResolver视...
    99+
    2023-07-05
  • SpringMVC视图和视图解析器实例分析
    这篇“SpringMVC视图和视图解析器实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“SpringMVC视图和视图解...
    99+
    2023-07-02
  • SpringMVC超详细讲解视图和视图解析器
    目录SpringMVC-视图和视图解析器1.基本介绍2.自定义视图1.为什么要自定义视图2.自定义视图实例-代码实现3.自定义视图工作流程小结自定义视图-小结自定义视图-工作流程4....
    99+
    2024-04-02
  • 浅谈SpringMVC之视图解析器(ViewResolver)
    SpringMVC中的视图解析器的主要作用就是将逻辑视图转换成用户可以看到的物理视图。当用户对SpringMVC应用程序发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,通过处理器找到最为合适的Handl...
    99+
    2023-05-31
    spring mvc 视图解析器
  • 微信小程序视图容器和基本内容组件图文详解
    目录前言一,视图容器类组件1.1 view1.2 srcoll-view1.3 swiper和swiper-item二,基本内容组件2.1 text2.2 rich-text总结前言...
    99+
    2024-04-02
  • 微信小程序常用视图容器组件使用详解
    目录1、组件概述2、常用的试图容器组件2.1 view2.2 scroll-view2.3 swiper1、组件概述 组件是视图层基本的组成单元,具备UI风格样式以及特定的功能效果。...
    99+
    2024-04-02
  • flutter图片组件核心类源码解析
    目录导语问题Image的核心类图及其关系网络图片的加载过程网络图片数据的回调和展示过程补上图片内存缓存的源码分析如何支持图片的磁盘缓存总结导语 在使用flutter 自带图片组件的过...
    99+
    2023-05-16
    flutter图片组件核心类 flutter图片组件源码解析
  • ASP.NETCore中的Razor页面使用视图组件
    视图组件简介 在新的ASP.NET Core MVC中,视图组件类似于局部视图,但它们更强大。视图组件不使用模型绑定,仅依赖于您在调用时提供的数据。 视图组件特性: 呈现页面响应的某...
    99+
    2024-04-02
  • springMVC中的view视图详细解析
    目录1、ThymleafView2、转发视图3、重定向视图4、视图控制器view-controllerSpring MVC中的视图是view接口,视图的作用是渲染数据,将模型mode...
    99+
    2024-04-02
  • 图邻接矩阵可视化解析
    目录使用工具准备数据转化临界矩阵测试创建图添加节点添加边绘图扩展美化图总结使用工具 #导入模块 import networkx as nx import numpy as np im...
    99+
    2022-12-16
    图邻接矩阵可视化 图邻接矩阵 可视化图邻接矩阵
  • Vue组织架构树图组件vue-org-tree的使用解析
    目录Vue组织架构树图组件vue-org-tree说明快速开始APIVue组织架构图组件vue-tree-chartVue组织架构树图组件vue-org-tree 说明 最近需要作出...
    99+
    2022-11-13
    Vue组织架构树图 Vue vue-org-tree vue 组件树
  • SpringBoot视图解析实现原理深入分析
    目录一、写在前面二、写个demo三、流程解析一、写在前面 前面我们分析了Spring boot是如何解析请求参数和如何处理相应信息的 那么它是如何进行视图解析,找到我们要跳转的视图并...
    99+
    2024-04-02
  • 怎么解析Django的视图和模板
    怎么解析Django的视图和模板,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、视图和模板1、函数视图以函数的方式定义的视图称为函数视图,函数视图便于理解。但是遇到一个视...
    99+
    2023-06-02
  • SpringMVC源码分析6:SpringMVC的视图解析原理
    转自 SpringMVC视图机制详解[附带源码分析]...
    99+
    2023-06-02
  • 微信小程序常用视图容器组件如何使用
    这篇文章主要讲解了“微信小程序常用视图容器组件如何使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“微信小程序常用视图容器组件如何使用”吧!1、组件概述组件是视图层基本的组成单元,具备UI风...
    99+
    2023-06-29
  • Bootstrap中的图片组件和轮廓组件举例分析
    这篇文章主要介绍“Bootstrap中的图片组件和轮廓组件举例分析”,在日常操作中,相信很多人在Bootstrap中的图片组件和轮廓组件举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,...
    99+
    2024-04-02
  • Vue子组件与父组件详细解析
    目录一、父组件和子组件二、模板分离写法1、template标签2、text/x-template三、父子组件通信-父传子1、Prop 类型四、父子组件通信子传父1、vm.$emit(...
    99+
    2024-04-02
  • 解析Vue全局组件和局部组件
    Vue中组件分为两种: 全局组件 局部组件接下来我们看看两种组件的区别:一、使用范围:全局组件使用范围:可以在页面中任何位置使用局部组件使用范围:只能在定义它的el中使用,不能再其他位置使用,否则就无法生效二、定义组件的方法:全局组件:可以...
    99+
    2023-06-02
  • 怎么解析python二叉树的右视图
    这篇文章给大家介绍怎么解析python二叉树的右视图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。二叉树的右视图题目描述给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例:输...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作