InternalResourceViewResolver 与 UrlBasedViewResolver 有何不同

spring

1个回答

写回答

沫沫不幽默

2025-07-09 19:45

+ 关注

Spring
Spring

InternalResourceViewResolver与UrlBasedViewResolver是Spring MVC框架中常用的两种视图解析器。它们在视图解析过程中有一些不同之处。本文将详细介绍这两种视图解析器的特点,并给出相应的案例代码。

首先,我们来看一下InternalResourceViewResolver。这是一个基于内部资源的视图解析器,它可以解析JSP、HTML等类型的视图。在配置文件中,我们需要指定视图的前缀和后缀,以便框架能够正确地找到视图文件。例如:

Java

@Bean

public InternalResourceViewResolver viewResolver() {

InternalResourceViewResolver resolver = new InternalResourceViewResolver();

resolver.setPrefix("/WEB-INF/views/");

resolver.setSuffix(".JSp");

return resolver;

}

在上面的配置中,我们将JSP文件放在了WEB-INF/views目录下,并且以.JSp为后缀。当我们使用视图名称返回视图时,框架会自动将前缀和后缀与视图名称拼接然后找到对应的JSP文件。

接下来,我们来看一下UrlBasedViewResolver。这是一个基于URL的视图解析器,它可以解析任意类型的视图,包括JSP、HTML、Thymeleaf等。在配置文件中,我们需要指定视图的URL路径和视图类的类型。例如:

Java

@Bean

public UrlBasedViewResolver viewResolver() {

UrlBasedViewResolver resolver = new UrlBasedViewResolver();

resolver.setViewClass(JStlView.class);

resolver.setPrefix("/WEB-INF/views/");

resolver.setSuffix(".JSp");

return resolver;

}

在上面的配置中,我们将视图类设置为JStlView,这是一个JSP视图的实现类。然后我们再设置视图的前缀和后缀,同样是为了能够正确地找到视图文件。

InternalResourceViewResolver与UrlBasedViewResolver的区别

1. 内部资源 vs. URL路径:InternalResourceViewResolver是基于内部资源的视图解析器,视图名称会被解析为内部资源的路径。而UrlBasedViewResolver是基于URL路径的视图解析器,视图名称会被解析为URL路径。

2. 视图类的类型:InternalResourceViewResolver使用的视图类是InternalResourceView,而UrlBasedViewResolver可以根据需要设置不同的视图类,如JStlView、ThymeleafView等。

3. 可解析的视图类型:InternalResourceViewResolver只能解析JSP、HTML等类型的视图。而UrlBasedViewResolver可以解析任意类型的视图,只要设置相应的视图类即可。

案例代码

假设我们有一个控制器类,其中的一个处理方法返回了一个视图名称:

Java

@Controller

public class MyController {

@RequestMapping("/hello")

public String hello() {

return "hello";

}

}

在上面的代码中,我们返回了一个名为"hello"的视图名称。接下来,我们需要配置视图解析器,以便框架能够正确地找到对应的视图文件。

使用InternalResourceViewResolver的配置如下:

Java

@Bean

public InternalResourceViewResolver viewResolver() {

InternalResourceViewResolver resolver = new InternalResourceViewResolver();

resolver.setPrefix("/WEB-INF/views/");

resolver.setSuffix(".JSp");

return resolver;

}

使用UrlBasedViewResolver的配置如下:

Java

@Bean

public UrlBasedViewResolver viewResolver() {

UrlBasedViewResolver resolver = new UrlBasedViewResolver();

resolver.setViewClass(JStlView.class);

resolver.setPrefix("/WEB-INF/views/");

resolver.setSuffix(".JSp");

return resolver;

}

上述代码中,我们都将JSP文件放在了WEB-INF/views目录下,并且以.JSp为后缀。当我们访问"/hello"时,框架会自动将视图名称与前缀、后缀拼接然后找到对应的JSP文件。

InternalResourceViewResolver与UrlBasedViewResolver是Spring MVC框架中常用的两种视图解析器。它们的主要区别在于解析方式、视图类类型和可解析的视图类型上。根据具体的需求,我们可以选择适合的视图解析器,并进行相应的配置,以便框架能够正确地找到对应的视图文件。

举报有用(4)分享收藏

Copyright © 2025 IZhiDa.com All Rights Reserved.

知答 版权所有 粤ICP备2023042255号