我刚开始使用Spring。我遇到了很多教程。
我看到了使用InternalResourceViewResolver
而不是UrlBasedViewResolver
的更多示例。我查看了Spring文档,但我无法弄清楚使用其中一个的好处。有人可以提供一些解释吗?
答案 0 :(得分:16)
InternalResourceViewResolver
是UrlBasedViewResolver
的便捷子类。
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”类型的所有视图技术。
AbstractJasperReportsView
,AbstractPdfStamperView
,AbstractTemplateView
,InternalResourceView
,RedirectView
,TilesView
,XsltView
是{的已知子类{1}}。
因此,当您使用AbstractUrlBasedView
时,可以使用UrlBasedViewResolver
的任何一个子类作为视图技术的类型(仅通过设置相应的viewClass)。
InternalResourceViewResolver是AbstractUrlBasedView
的子类。
但是当您使用UrlBasedViewResolver
时(InternalResourceViewResolver
的一个方便的子类),您只能使用UrlBasedViewResolver
类型的技术作为您的视图技术。
我认为这可以回答你的问题。
答案 2 :(得分:4)
InternalResourceViewResolver
是UrlBasedViewResolver
的实际子类。
UrlBasedViewResolver
- 视图名称直接解析为URL。没有提供显式映射。视图名称将是网址本身,或者您可以根据自己的设计添加prefix
或suffix
。您还可以使用“redirect:”和“forward:”作为重定向和转发请求的前缀。
InternalResourceViewResolver
- 支持InternalResourceView的UrlBasedViewResolver的子类。 InternalResourceView
包装JSP或同一Web应用程序的其他资源。您可以使用EL访问JSP中的模型。
注意:某些URLBasedViewResolvers(Tiles,Velocity,Freemarker)检查资源是否存在并返回null。因此,它们可以位于视图解析器链中的任何位置。其他人必须是最后的(JSTL / JSP,XSLT,JSON)
所以InternalResourceViewResolver
需要在视图解析器链中排在最后,因为它解析了视图名称是否存在实际资源。
其他一些URLBasedViewReolver是