没有Servlet的Spring MVC

ash*_*999 1 spring-mvc

我是Spring MVC的新手(之前使用的是Rails和ASP.NET MVC).我注意到我仍然需要使用servlet.从我所看到的,Spring要求你使用servlet - 你不能将它交换为不同的视图引擎(如Apache Velocity).

是否可以将Spring MVC与不同的视图引擎一起使用?我找不到任何关于此的材料.

acd*_*ior 12

有一些混乱.

  1. 没有servlet就不能拥有Spring MVC,因为Spring MVC是建立在Servlet技术之上的.(但这不是问题,因为您可以使用其他视图技术.)
     
  2. 您正在将视图技术与servlet混淆.
    • 有几种可能的视图技术.
    • 如果有什么,servlet是控制器,而不是视图(实际上,Spring MVC遵循Model 2 MVC,因此servlet不是与标准MVC模式中使用的相同意义上的控制器).

Spring Framework有一章致力于查看技术:http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/view.html

在那里,您可以找到信息以及如何配置多种视图技术,例如:

但不要局限于该指南.还没有列出其他视图技术(因为视图机制非常灵活和可扩展).Thymeleaf是一个很好的例子,没有列在那里.


我将尝试澄清Servlet与Controller的问题:

MVC模式

"标准"MVC模式的工作原理如下图所示:

MVC模式

混淆的第一个原因是试图将Spring MVC(因为名称)"装入"这个MVC.这通常会导致错误,因为Spring MVC更好地与这种模式的变体相关,如下所述.

关于这个问题,我的意思是:如果真的只想考虑这个MVC模式,Servlet更像是控制器,而不是视图.

Model 2 MVC Pattern

准确地说,如上所述,Spring MVC并不遵循"标准"MVC,事实上它更符合Model 2 MVC,除了现有的MVC之外还包括一个前端控制器组件(模型,视图和控制器),像图像:

Model 2 MVC Pattern

现在,在Model 2 MVC中,Servlet 不是控制器组件.它们是前端控制器(事实上​​,org.springframework.web.servlet.DispatcherServlet它是前端控制器).

在这幅图片中:

  • 前控制器org.springframework.web.servlet.DispatcherServlet.
  • 控制器是你的类(通常用注释@Controller).
  • 视图模板是一个JSP/VM/HTML文件,将根据模型,由您选择的视图技术(如JSP,Tiles,Velocity,Thymeleaf ......之前列出的 - 而不是Servlet)进行呈现.
  • 模型是来自域的数据(对象),从控制器传递到视图.

什么视图引擎最常用?

这是一个非常相对的问题.Spring参考文献中列出的所有内容都非常受欢迎.除了他们之外,我知道Thymeleaf是另一个非常好的人.

说一个比另一个好,这是不公平的,最终的决定将取决于你的项目的需求.不过,这是我用过的两分钱:

  • JSP是最古老的(同时又好又坏),也是最快的,但可能非常冗长,并且允许在页面中使用Java代码段.
  • JSTL以性能为代价使JSP页面的语法更好.
  • FreemarkerVelocity看起来非常相似,它们非常快,它们的语法与JSP不同(它更清晰可能是个人观点)并且它们具有非常好的模板系统.
  • 我没有使用Tiles,但我听说他们有非常好的模板和组件化.
  • Thymeleaf打算使用非常易维护的HTML,并且是一个非常健康的项目,其社区越来越多.请参阅 Thymeleaf与JSP.