【发布时间】:2013-12-01 16:00:24
【问题描述】:
我是 Spring MVC 的新手(以前使用过 Rails 和 ASP.NET MVC)。我注意到我仍然必须使用 servlet。据我所知,Spring 要求您使用 servlet——您不能将它换成不同的视图引擎(如 Apache Velocity)。
是否可以将 Spring MVC 与不同的视图引擎一起使用?我似乎找不到任何关于此的材料。
【问题讨论】:
标签: spring-mvc
我是 Spring MVC 的新手(以前使用过 Rails 和 ASP.NET MVC)。我注意到我仍然必须使用 servlet。据我所知,Spring 要求您使用 servlet——您不能将它换成不同的视图引擎(如 Apache Velocity)。
是否可以将 Spring MVC 与不同的视图引擎一起使用?我似乎找不到任何关于此的材料。
【问题讨论】:
标签: spring-mvc
有些混乱。
Spring 框架有一章专门介绍查看技术:http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/view.html
您可以在此处找到信息以及如何配置多种视图技术,例如:
但不要局限于该指南。那里没有列出其他视图技术(因为视图机制非常灵活和可扩展)。 Thymeleaf 就是一个很好的例子,但没有列出。
我将尝试澄清 Servlet 与控制器的问题:
“标准”MVC 模式的工作原理如下图所示:
混淆的第一个来源是尝试将 Spring MVC(因为名称)“适配”到这个 MVC 中。这通常会导致错误,因为 Spring MVC 更适合这种模式的变体,如下所述。
关于这个问题,我的意思是:如果你真的只想考虑这种 MVC 模式,那么 Servlet 更像是控制器,而不是视图。
准确地说,如前所述,Spring MVC 并不遵循“标准”MVC,实际上它更符合Model 2 MVC,其中还包括一个前端控制器组件到已经存在的(模型、视图和控制器),如图像:
现在,在 Model 2 MVC 中,Servlet 不是控制器组件。它们是Front Controller(其实org.springframework.web.servlet.DispatcherServlet就是前端控制器)。
在这张照片中:
org.springframework.web.servlet.DispatcherServlet。@Controller注解)。这是一个非常相关的问题。 Spring 参考中列出的所有内容都非常受欢迎。除了它们,Thymeleaf 是我所知道的另一个非常好的产品。
说一个比另一个更好是不公平的,最终决定将取决于您项目的需求。不过,对于我使用过的那些,这是我的两分钱:
【讨论】:
Servlet API 不是视图引擎,它是用于处理 HTTP 请求的 API。换句话说,它是 Web 服务器(servlet 容器)用来将 HTTP 请求传递给您的应用程序并发送回响应的接口。
Spring MVC 可以与不同的视图引擎一起使用:JSP、Thymeleaf、Velocity 等。您甚至可以使用静态 HTML 页面(如果您的应用程序纯粹基于 AJAX)。
【讨论】: