InternalResourceViewResolver与UrlBasedViewResolver有何不同

我刚开始使用Spring。 我遇到了很多教程。 我看到使用InternalResourceViewResolver不是UrlBasedViewResolver更多示例。 我查看了Spring文档,但我无法弄清楚使用其中一个的好处。 有人可以提供一些解释吗?

InternalResourceViewResolverUrlBasedViewResolver一个方便的子类。

JavaDoc描述了InternalResourceViewResolver中的一些添加属性,这些属性在某些情况下可能很有用:

UrlBasedViewResolver的便捷子类,支持InternalResourceView (即Servlet和JSP)和子类,如JstlView。

AlwaysInclude :控制是否完成转发或包含。

ExposeContextBeansAsAttributes :允许上下文中的所有bean作为请求属性使用,这意味着可以从JSP中的EL引用它们。

ExposedContextBeanNames :如果为非null,则指定将公开的bean列表,而不是所有bean。

来自春季论坛的来源: 春季问答论坛

Spring支持各种视图技术。 ViewResolvers可以将任何已知的受支持视图技术插入到您的应用程序中。

UrlBasedViewResolver是一个简单的视图解析器,它通过将URL模式与相应的文件名匹配来简单地解析不同技术的视图。

UrlBasedViewResolver支持所有类型为“ AbstractUrlBasedView ”的视图技术。

AbstractJasperReportsViewAbstractPdfStamperViewAbstractTemplateViewInternalResourceViewRedirectViewTilesViewXsltViewAbstractUrlBasedView的已知子类。

因此,当您使用UrlBasedViewResolver您可以使用AbstractUrlBasedView任何一个子类作为视图技术的类型(仅通过设置相应的viewClass)。

InternalResourceViewResolver是UrlBasedViewResolver的子类。

但是当您使用InternalResourceViewResolver (它是UrlBasedViewResolver一个方便的子类)时,您只能使用InternalResourceView类型的技术作为您的视图技术。

我想这回答了你的问题。

InternalResourceViewResolverUrlBasedViewResolver子类。

UrlBasedViewResolver – 视图名称直接解析为URL。 没有提供显式映射。 视图名称将是URL本身,或者您可以根据您的设计添加prefixsuffix 。 您还可以使用前缀“redirect:”和“forward:”来重定向和转发您的请求。

InternalResourceViewResolver – 支持InternalResourceView的UrlBasedViewResolver的子类。 InternalResourceView包装JSP或同一Web应用程序的某些其他资源。 您可以使用EL访问JSP中的模型。

注意 :一些URLBasedViewResolvers(Tiles,Velocity,Freemarker)检查资源是否存在并返回null。 因此,它们可以位于视图解析器链中的任何位置。 其他人必须是最后的(JSTL / JSP,XSLT,JSON)

因此, InternalResourceViewResolver需要在视图解析器链中排在最后,因为无论实际资源是否存在,它都会解析视图名称。

其他一些URLBasedViewReolver是

  1. 使用InternalResourceViewResolver
  2. VelocityViewReolver
  3. FreeMarkerViewReolver
  4. ThymeleafViewResolver
  5. XsltViewReolver