视图映射掌握:解析Spring MVC视图解析器的全方位指南

简介: 视图映射掌握:解析Spring MVC视图解析器的全方位指南

问题

在原来的示例中,我们在控制器方法的返回值中直接返回了视图文件所在的路径和名称,这样就使得代码出现了耦合,如果后续视图文件移动位置,那么控制器代码还需要进行修改。

package world.xuewei.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * 第一个控制器
 *
 * @author 薛伟
 * @since 2023/10/30 16:18
 */
@Controller
public class IndexController {
    @RequestMapping("/index")
    public String index() {
        System.out.println("Hello World");
        return "/index.jsp";
    }
}

视图解析器

Spring MVC 框架中,InternalResourceViewResolver 是一种视图解析器,用于将控制器中返回的逻辑视图名称与实际的物理视图路径匹配。它会将逻辑视图名称映射到 JSP 文件或其他模板引擎支持的模板文件,并返回给客户端以呈现最终的用户界面。

该类主要通过以下两种方式实现视图的解析:

  1. 使用前缀和后缀来确定物理视图的文件路径。
  • 例如,将前缀设置为 /WEB-INF/views/ 并将后缀设置为 .jsp,则逻辑视图名称 home 将被解析为文件路径 /WEB-INF/views/home.jsp
  • 这种方式可以通过调用 setPrefix() 和 setSuffix() 方法进行配置。
  1. 将视图名称直接映射到物理视图的文件路径。
  • 例如,将逻辑视图名称 home 映射到文件路径 /WEB-INF/views/home.jsp,则直接使用此路径作为视图的物理路径。
  • 这种方式可以通过调用 setViewClass() 方法并指定具体的视图类来实现。

在视图解析过程中,InternalResourceViewResolver 还支持以下功能:

  1. 支持多个视图解析器。
  • 如果一个视图解析器无法解析视图,则会依次尝试使用其他视图解析器。
  • 要指定多个视图解析器,可以通过调用 setViewResolvers() 方法并传递一个 ViewResolver 数组来实现。
  1. 支持视图缓存。
  • 可以将解析后的视图缓存起来,以提高性能和效率。
  • 要启用视图缓存,可以通过调用 setCache() 方法并将其设置为 true 来实现。默认情况下,视图缓存是禁用的。

配置视图解析器

配置文件方式

<!-- 引入视图解析器 -->
<bean id="resolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <!-- 视图所在路径 -->
    <property name="prefix" value="/"/>
    <!-- 文件类型 -->
    <property name="suffix" value=".jsp"/>
</bean>

配置类方式

package world.xuewei.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
/**
 * Mvc 配置类
 *
 * @author 薛伟
 * @since 2023/10/31 10:32
 */
@Configuration
public class MvcConfig {
    @Bean
    public ViewResolver internalResourceViewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        // 视图所在路径
        viewResolver.setPrefix("/");
        // 文件类型
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
}

最终效果

配置完视图解析器,在控制器方法的返回值,我们只需要返回视图的名称即可,可以将上述代码修改为:

package world.xuewei.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
 * 第一个控制器
 *
 * @author 薛伟
 * @since 2023/10/30 16:18
 */
@Controller
public class IndexController {
    @RequestMapping("/index")
    public String index() {
        System.out.println("Hello World");
        return "index";
    }
}


相关文章
|
5天前
|
前端开发 Java Spring
Spring MVC 是如何对对象参数进行校验的
【6月更文挑战第4天】对象参数校验是使用 SpringMVC 时常用的功能,这篇文章尝试分析了,Spring 是如何实现这一功能的。
15 5
|
29天前
|
前端开发 Java 测试技术
Java一分钟之Spring MVC:构建Web应用
【5月更文挑战第15天】Spring MVC是Spring框架的Web应用模块,基于MVC模式实现业务、数据和UI解耦。常见问题包括:配置DispatcherServlet、Controller映射错误、视图解析未设置、Model数据传递遗漏、异常处理未配置、依赖注入缺失和忽视单元测试。解决这些问题可提升代码质量和应用性能。注意配置`web.xml`、`@RequestMapping`、`ViewResolver`、`Model`、`@ExceptionHandler`、`@Autowired`,并编写测试用例。
309 3
|
3天前
|
JSON 前端开发 Java
Spring MVC 级联对象参数校验
【6月更文挑战第6天】在 Spring MVC 的使用过程中,我们会发现很多非常符合直觉的功能特性,但往往我们会习惯这种「被照顾得很好」的开发方式,依靠直觉去判断很多功能特性的用法。
9 1
|
6天前
|
前端开发 Java Spring
自定义 Spring MVC Controller 方法参数处理
【6月更文挑战第3天】在 Spring MVC Controller 的方法参数,Spring 会自动为我们注入一些特殊的参数值,比如 HttpServletRequest、HttpServletResponse 等对象,或者 HTTP 请求参数。
47 0
|
8天前
|
JSON 前端开发 Java
Spring第四课,MVC终章,应用分层的好处,总结
Spring第四课,MVC终章,应用分层的好处,总结
|
9天前
|
XML JSON Java
图文并茂:解析Spring Boot Controller返回图片的三种方式
图文并茂:解析Spring Boot Controller返回图片的三种方式
13 0
|
9天前
|
JSON 前端开发 Java
Spring Web MVC入门(3)——响应
Spring Web MVC入门(3)——响应
12 1
|
9天前
|
存储 前端开发 Java
Spring Web MVC入门(2)——请求(下)
Spring Web MVC入门(2)——请求
16 0
|
9天前
|
JSON 前端开发 Java
Spring Web MVC入门(2)——请求(上)
Spring Web MVC入门(2)——请求
10 0
|
9天前
|
设计模式 前端开发 Java
Spring Web MVC入门(1)
Spring Web MVC入门(1)
10 0

推荐镜像

更多