24

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

4

3 回答 3

17

InternalResourceViewResolver是 的一个方便的子类UrlBasedViewResolver

JavaDoc 描述了一些InternalResourceViewResolver在某些情况下可能有用的附加属性:

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

AlwaysInclude:控制是否执行转发或包含。

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

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

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

于 2013-07-03T16:20:29.123 回答
8

Spring 支持广泛的视图技术。ViewResolver 可以将任何已知的受支持视图技术插入您的应用程序。

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

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

AbstractJasperReportsView, AbstractPdfStamperView, AbstractTemplateView, InternalResourceView, RedirectView, TilesView,XsltView是 的已知子类AbstractUrlBasedView

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

InternalResourceViewResolverUrlBasedViewResolver.

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

我认为这回答了你的问题。

于 2013-07-03T16:18:40.177 回答
4

InternalResourceViewResolver实际上是 的子类UrlBasedViewResolver

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

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

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

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

其他一些 URLBasedViewReolver 是

  1. 内部资源视图解析器
  2. VelocityViewReolver
  3. FreeMarkerViewReolver
  4. ThymeleafViewResolver
  5. XsltViewReolver
于 2016-01-10T07:11:24.220 回答