为什么只有一个控制器用于为Java中的所有传入请求提供服务?

时间:2017-03-27 10:56:43

标签: java c# asp.net-mvc spring spring-mvc

我来自 .NET 世界。在Web应用程序(MVC)中知道,非常肯定,

  

.NET:为每个&创建一个新的控制器实例。每个传入的请求   到网络服务器并呈现结果。

有关详细信息,请参阅SO Question & Answer

但是,我即将开发一个 Java Web应用程序,并听到这个很震惊:

  

Java:一个控制器实例用于为每个&每一个进来   请求到Web服务器。 (单身)

我还用Google搜索了解上述说法是否属实。 Here

据我所知,MVC是一个框架,与实施语言无关。

为什么会出现这种差异? 或者我错过了这里的东西?

1 个答案:

答案 0 :(得分:1)

我不知道为什么会出现这种情况的具体原因,但我可以想到一些优点和缺点。

Java的方式专业

  • 避免在您收到大量请求时可能会影响事物的对象创建
  • 允许您在控制器内保持状态

Java的方式缺点

  • 允许您在控制器内保持状态。由于对象是多线程的,因此必须确保保持在控制器内的任何状态(强烈建议不要使用)以线程安全的方式使用。这并不总是很明显,可能会导致错误。

.NET的方式专业

  • 简单
  • 状态可以在请求持续时间内保留在对象中(一种“半全局变量”),而不需要任何特定的线程安全代码。没有机会让下一个请求看到前一个请求状态(Java阻止控制器中保持状态的一个原因)。

.NET的方式缺点

  • 如果一次处理大量请求,可能会成为(次要)问题

也可能是其他人,但这些我可以想到我的头脑。差异很可能是由于设计决策造成的,这可能无法追查。但是,正如评论中所解释的那样,两种方式都不是“正确的”。 MVC不要求其中一个。