我是spring-mvc的初学者。在浏览解析器时,我能够理解如何使用以下视图解析器:
BeanNameViewResolver,InternalResourceViewResolver和 作为UrlBasedViewResolver
我已经通过谷歌了解,但我仍然不清楚彼此的利弊。
如何决定何时使用哪个视图解析器。
如果有人可以帮助我理解这一点,那将是一个很大的帮助。
谢谢,
答案 0 :(得分:7)
InternalResourceViewResolver
是UrlBasedViewResolver
的子类。
UrlBasedViewResolver
和InternalResourceViewResolver
通常用于MVC应用程序,其中控制器返回应呈现的视图的名称。控制器返回视图的逻辑名称,解析器通过添加一些前缀和后缀使其成为(jsp的)文件名。例如:控制器返回的逻辑视图名称:main/example
,前缀:/WEB-INF/pages/
,后缀:.jsp
- > /WEB-INF/pages/main/example.jsp
使用控制器提供的模型数据进行渲染
UrlBasedViewResolver
需要一个View
类(与其他大多数ViewResolvers一样)。 (非常简洁:视图类负责渲染,而解析器负责选择正确的模板/...) UrlBasedViewResolver
中使用的视图必须是{的子类{3}}。
InternalResourceViewResolver
是UrlBasedViewResolver
的方便子类,默认已经是已配置的视图:AbstractUrlBasedView
(或当存在Jstl时为InternalResourceView
)。因此,当JSP用作模板引擎时,它是正确的解析器。
还有其他AbstractUrlBasedView
实现,例如JasperReports,Freemaker,Velocity,Tiles,......其中大多数都有UrlBasedViewResolver
的方便子类。
BeanNameViewResolver
非常古老的解析器,从旧版的2.0春季开始。此时每个控制器都用于处理一个URL。此时没有@RequestMapping
注释,并且必须告诉Spring哪个控制器是哪个url。人们可以列出所有这些,或者有这个解析器,它能够通过控制器名称映射url->控制器。从Spring 3.0(更精确的自2.5)和Springs注释支持开始,这个解析器很少使用。答案 1 :(得分:2)
当您的Spring应用程序加载时,会加载默认的ViewResolver - InternalResourceViewResolver
。您可以参考在DisplacherServlet.properties
jar中的spring-webmvc
中初始化的默认bean。如果是View Resolvers,它是 -
org.springframework.web.servlet.ViewResolver = org.springframework.web.servlet.view.InternalResourceViewResolver
基本上返回JSTL
视图。
有许多URLBasedViewResolvers喜欢 -
InternalResourceViewResolver
是UrlBasedViewResolver
的便捷子类。
如果您想了解有关这些视图解析器的更多信息,请参阅 - http://www.studytrails.com/frameworks/spring/spring-mvc-view-resolver.jsp
注意:在链接视图解析器的情况下需要注意的重要事项。在链中,只有当前View解析器返回null时,Spring才会移动到下一个View解析器。一些URLBasedViewResolvers(Tiles,Velocity,Freemarker)检查资源是否存在并返回null。因此,它们可以位于视图解析器链中的任何位置。其他人必须是最后的(JSTL / JSP,XSLT,JSON)