在Spring Mvc中使用不同的ViewResolver

时间:2016-01-09 20:36:37

标签: spring spring-mvc view

我是spring-mvc的初学者。在浏览解析器时,我能够理解如何使用以下视图解析器:

  

BeanNameViewResolver,InternalResourceViewResolver和   作为UrlBasedViewResolver

我已经通过谷歌了解,但我仍然不清楚彼此的利弊。

如何决定何时使用哪个视图解析器。

如果有人可以帮助我理解这一点,那将是一个很大的帮助。

谢谢,

2 个答案:

答案 0 :(得分:7)

InternalResourceViewResolverUrlBasedViewResolver的子类。

UrlBasedViewResolverInternalResourceViewResolver通常用于MVC应用程序,其中控制器返回应呈现的视图的名称。控制器返回视图的逻辑名称,解析器通过添加一些前缀和后缀使其成为(jsp的)文件名。例如:控制器返回的逻辑视图名称:main/example,前缀:/WEB-INF/pages/,后缀:.jsp - > /WEB-INF/pages/main/example.jsp使用控制器提供的模型数据进行渲染

  • UrlBasedViewResolver需要一个View类(与其他大多数ViewResolvers一样)。 (非常简洁:视图类负责渲染,而解析器负责选择正确的模板/...) UrlBasedViewResolver中使用的视图必须是{的子类{3}}。

  • InternalResourceViewResolverUrlBasedViewResolver的方便子类,默认已经是已配置的视图: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喜欢 -

  1. 的InternalResourceViewResolver
  2. VelocityViewReolver
  3. FreeMarkerViewReolver
  4. ThymeleafViewResolver
  5. XsltViewReolver
  6. 是的,你读得对。 InternalResourceViewResolverUrlBasedViewResolver的便捷子类。

    如果您想了解有关这些视图解析器的更多信息,请参阅 - http://www.studytrails.com/frameworks/spring/spring-mvc-view-resolver.jsp

    注意:在链接视图解析器的情况下需要注意的重要事项。在链中,只有当前View解析器返回null时,Spring才会移动到下一个View解析器。一些URLBasedViewResolvers(Tiles,Velocity,Freemarker)检查资源是否存在并返回null。因此,它们可以位于视图解析器链中的任何位置。其他人必须是最后的(JSTL / JSP,XSLT,JSON)