InternalResourceViewResolver与UrlBasedViewResolver有何不同

时间:2013-07-03 16:12:50

标签: java spring

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

3 个答案:

答案 0 :(得分:16)

InternalResourceViewResolverUrlBasedViewResolver的便捷子类。

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

  

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

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

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

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

春季论坛的来源:Spring Q&A forum

答案 1 :(得分:8)

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

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

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

AbstractJasperReportsViewAbstractPdfStamperViewAbstractTemplateViewInternalResourceViewRedirectViewTilesViewXsltView是{的已知子类{1}}。

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

InternalResourceViewResolverAbstractUrlBasedView的子类。

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

我认为这可以回答你的问题。

答案 2 :(得分:4)

InternalResourceViewResolverUrlBasedViewResolver的实际子类。

UrlBasedViewResolver - 视图名称直接解析为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