广告
返回顶部
首页 > 资讯 > 精选 >SpringMVC ViewResolver视图解析器组件怎么用
  • 172
分享到

SpringMVC ViewResolver视图解析器组件怎么用

2023-07-05 23:07:25 172人浏览 独家记忆
摘要

本篇内容主要讲解“springMVC ViewResolver视图解析器组件怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springmvc ViewResolver视

本篇内容主要讲解“springMVC ViewResolver视图解析器组件怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习springmvc ViewResolver视图解析器组件怎么用”吧!

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

    作用

    在 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 方法实现如下:

    @Overridepublic 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 属性将逻辑视图名称转换为物理视图名称。

    到此,相信大家对“SpringMVC ViewResolver视图解析器组件怎么用”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    --结束END--

    本文标题: SpringMVC ViewResolver视图解析器组件怎么用

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

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

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

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

    下载Word文档
    猜你喜欢
    • SpringMVC ViewResolver视图解析器组件怎么用
      本篇内容主要讲解“SpringMVC ViewResolver视图解析器组件怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringMVC ViewResolver视...
      99+
      2023-07-05
    • 浅谈SpringMVC之视图解析器(ViewResolver)
      SpringMVC中的视图解析器的主要作用就是将逻辑视图转换成用户可以看到的物理视图。当用户对SpringMVC应用程序发起请求时,这些请求都会被SpringMVC的DispatcherServlet处理,通过处理器找到最为合适的Handl...
      99+
      2023-05-31
      spring mvc 视图解析器
    • SpringMVCViewResolver视图解析器组件
      目录作用类型InternalResourceViewResolverFreeMarkerViewResolverTilesViewResolverContentNegotiating...
      99+
      2023-05-15
      SpringMVC ViewResolver SpringMVC视图解析器
    • SpringMVC中的跳转方式和视图解析器问题怎么解决
      这篇文章主要介绍“SpringMVC中的跳转方式和视图解析器问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringMVC中的跳转方式和视图解析器问题怎么解决”文章能帮助大家解决问题。...
      99+
      2023-07-04
    • 使用springmvc配置视图解析器和重定向方式
      目录springmvc配置视图解析器和重定向为什么需要配置视图解析器配置步骤解决配置视图解析器带来的问题重定向配置多个视图解析器springmvccontrollerspringmv...
      99+
      2022-11-12
    • 使用springmvc临时不使用视图解析器的自动添加前后缀
      目录springmvc临时不使用视图解析器的自动添加前后缀解决方法springmvc视图解析器的前缀和后缀使用方法springmvc临时不使用视图解析器的自动添加前后缀 <...
      99+
      2022-11-12
    • 微信小程序常用视图容器组件使用详解
      目录1、组件概述2、常用的试图容器组件2.1 view2.2 scroll-view2.3 swiper1、组件概述 组件是视图层基本的组成单元,具备UI风格样式以及特定的功能效果。...
      99+
      2022-11-13
    • 怎么用Vue组件封装上传图片和视频
      这篇文章主要介绍“怎么用Vue组件封装上传图片和视频”,在日常操作中,相信很多人在怎么用Vue组件封装上传图片和视频问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Vue组件封装上传图片和视频”的疑惑有所...
      99+
      2023-06-20
    • Angular开发组件数据不能实时更新到视图上怎么解决
      这篇文章主要介绍“Angular开发组件数据不能实时更新到视图上怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Angular开发组件数据不能实时更新到视图上怎么解决”文章能帮助大家解决问题。...
      99+
      2023-07-04
    • 如何解析Vue中动态组件怎么使用
      如何解析Vue中动态组件怎么使用,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。动态组件在开发的过程中大多数情况下都会用到,当我们需要在不同的组件之间进行状态切换时,动态组件...
      99+
      2023-06-25
    • 怎么用C++实现简易的.ini配置文件解析器
      本篇内容介绍了“怎么用C++实现简易的.ini配置文件解析器”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在最开始实例化一个IniHelpe...
      99+
      2023-07-05
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作