为什么Java应用程序只需要一个应用程序服务器,而.Net只需要IIS Web Server?
为什么在Java世界中有这么多的混乱,各种服务器,如apache,tomcat,jboss,jetty等,而在.Net世界中,只有IIS可以完成这项工作。我想了解它的需求和用法,而不是开始Java与.net。
为什么在Java世界中有这么多的混乱,各种服务器,如apache,tomcat,jboss,jetty等,而在.Net世界中,只有IIS可以完成这项工作。我想了解它的需求和用法,而不是开始Java与.net。
有几个原因。
Java EE 应用程序服务器是分布式组件的事务监视器。它提供了许多抽象(例如,命名、池化、组件生命周期、持久性、消息传递等)来帮助实现这一目标。
其中许多服务都是Windows操作系统的一部分。Java EE需要抽象,因为它独立于操作系统。
还应该说,完整的Java EE规范对于开发Web应用程序不是必需的。JDBC是Java中处理关系数据库的部分,是Java SE本身的一部分。Java EE 添加了 servlet(即 HTTP 侦听器)和 Java Server Pages(一种用于生成 servlet 的标记语言)。您可以使用这些技术和Java SE开发功能齐全的Web应用程序,Tomcat和Jetty是两个servlet / JSP引擎,可以代替完整的Java EE应用程序服务器。
如果你注意到.NET在 System.Net 模块中内置了HTTP侦听器,你就会意识到这就好像.NET从Java中取出了一个页面,并将javax.servlet功能折叠到框架中。
如果你添加了Spring和像ActiveMQ或RabbitMQ这样的消息传递功能,你可以编写完整的应用程序,而不必求助于WebLogic,WebSphere,JBoss或Glassfish。您不需要 EJB 或完整的 Java EE 规范。
更新:
Spring Boot提供了开发和运行功能齐全的Java应用程序作为可执行JAR文件的可能性。不需要任何Java EE应用程序服务器,只需要JDK 8或更高版本。
这是因为Sun和微软在他们的软件上有着非常不同的目标,以及实现这一目标的方法。
Java的Sun口号从一开始就是正确的“一次编写,随处运行”,这导致人们投入了大量精力来创建_API_s,这些_API_s指定环境应该是什么样子,以允许一段简约的代码完成它的工作。
用于“处理Web请求并返回Web响应”的API被命名为Servlets,并且由于它填补了空白并且被很好地指定,因此非常成功。我所知道的所有主流的基于Java的Web服务器都允许运行servlet。一个完整的 servlet 功能 Web 服务器的早期实现只有 1500 行,后来它被扩展为包括 JSP,以提供带有服务器端代码(如 PHP)的 HTML。
对于任何真正可扩展的解决方案,包括Web解决方案,这意味着最终负载如此之高,以至于一台计算机的功能不足以再自行运行它。可扩展的解决方案必须能够分布在多台计算机上,并且该单一要求带来了许多其他事情:
然后,Sun为他们发现运行所需的所有功能创建了API,并将其命名为“Java Enterprise Edition”(当时“Enterprise”这个词被用于很多事情),并创建了一个系统来实现所有这些人们可以购买和使用的API。
微软和Sun之间的差异现在开始发挥作用。在这里,微软只会公开IIS,并在客户端中说“使用这些API”,但实际上不希望任何人创建另一个提供这些API的服务器。因为他们想卖Windows来运行它!
Sun希望人们使用这种语言,所以他们让任何人都可以实现Java EE规范,但他们必须通过Sun严格的测试套件(并付费)才能被允许使用Java EE品牌。这导致大量的 Java EE 服务器可用,您通常可以在其中重用核心业务逻辑,但必须配置 Java EE 服务器以提供应用程序所需的资源。
有关当前服务器的状态,请参阅 http://en.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition#Certified_application_servers。商业和开源都可以根据您的需求提供 - 选择最适合您的一个。
所以,原因是Java EE是一组定义良好的API,任何人都可以实现,而且他们有。