为什么Java应用程序只需要一个应用服务器和.Net IIS Web服务器?

为什么Java应用程序只需要一个应用服务器和.Net IIS Web服务器?,java,.net,Java,.net,为什么java世界中的各种服务器(如apache、tomcat、jboss、jetty等)如此混乱,而在.Net世界中,只有IIS完成了这项工作。我想了解它的需要和使用,我不会启动java vs.net。首先,您可以使用mod_mono在Apache上运行.net代码,因此它不限于IIS。还有其他几个web服务器(Cassini和XPS)也将运行ASP.NET 为了运行动态web应用程序,您需要web服务器和应用程序服务器。有时,它们整合得如此之好,似乎是一个整体,有时不是 关于Java,它总是

为什么java世界中的各种服务器(如apache、tomcat、jboss、jetty等)如此混乱,而在.Net世界中,只有IIS完成了这项工作。我想了解它的需要和使用,我不会启动java vs.net。

首先,您可以使用mod_mono在Apache上运行.net代码,因此它不限于IIS。还有其他几个web服务器(Cassini和XPS)也将运行ASP.NET

为了运行动态web应用程序,您需要web服务器和应用程序服务器。有时,它们整合得如此之好,似乎是一个整体,有时不是

关于Java,它总是支持比.NET更多的平台,并且更加开放,因此集成到更多的web服务器(在Linux堆栈上)


由于.NET和IIS都是来自Microsoft的技术,ASP.NET及其应用程序服务器方面(aspnet_isapi.dll)与IIS捆绑在一起,不同的.NET安装程序与IIS集成。当然,微软只在他们的操作系统和web服务器上实现了它。

因为JavaEE是一种规范,而不是产品本身。请记住,Java比.NET开放得多(在规范意义上)


每个应用服务器都有不同的功能、不同的性能、不同的目标用户/企业、不同的价格标签、运行在不同的平台上、需要不同的硬件。差异化是所有应用服务器都存在的原因,一个大小不能适应所有应用服务器。

有几个原因

JavaEE应用服务器是分布式组件的事务监视器。它提供了许多抽象(例如,命名、池、组件生命周期、持久性、消息传递等)来帮助实现这一点

许多这些服务都是Windows操作系统的一部分。JavaEE需要抽象,因为它独立于操作系统

还应该说,开发web应用程序不需要完整的JavaEE规范。JDBC是Java中处理关系数据库的部分,也是JavaSE本身的一部分。JavaEE添加了servlet(HTTP侦听器)和JavaServer页面(用于生成servlet的标记语言)。您可以使用这些技术和JavaSE开发功能齐全的web应用程序。Tomcat和Jetty是两个servlet/JSP引擎,可以替代完整的JavaEE应用服务器

如果您注意到.NET在系统.NET模块中内置了HTTP侦听器,您就会意识到,这就像.NET从Java获取了一个页面,并将javax.servlet功能折叠到框架中一样

如果添加Spring和ActiveMQ或RabbitMQ等消息传递功能,则可以编写完整的应用程序,而不必求助于WebLogic、WebSphere、JBoss或Glassfish。您不需要EJB或完整的JavaEE规范

更新:


SpringBoot提供了作为可执行JAR文件开发和运行全功能Java应用程序的可能性。不需要任何Java EE应用服务器,只需要JDK 8或更高版本。

Apache与IIS非常相似,与Java没有太多关系

Java中的应用程序服务器提供了.NET通过不同的产品或Windows操作系统以各种方式提供的附加服务

Apache通常在Java部署中用作其背后应用程序服务器的代理,并可能提供静态内容,或处理SSL和类似问题。它是完全可选的,尽管有充分的理由使用它

Tomcat和Jetty基本上都是JavaWeb服务器,它们提供了一个定义的框架(servlet等),用于使用java代码创建动态web站点。它们通常是大型应用服务器的组件,或者可以单独部署


JBoss是应用服务器的一个例子(Glassfish和Weblogic是另外两个非常常见的应用服务器),它提供了完整的J2EE规范。J2EE规范背后的思想是允许以定义的方式构建应用程序服务器,以便应用程序可以在符合该规范的不同供应商的不同应用程序服务器之间切换。该规范是关于如何与对服务器端程序有用的定义服务交互。

选项离线工具是Java的优点和缺点之一,看看可用的Java Web开发框架,您可以无休止地对它们进行评估,以便做出决定。在.Net中,它几乎是MVC。对于服务器,它相对简单。如果他们需要一个web服务器,大多数人会选择Tomcat,如果他们需要一个免费的应用服务器,则选择JBoss。原因已经说过,J2EE是一种规范。

一个原因是编写servlet与在具体类中实现javax.servlet.servlet接口一样简单。因此,Servlet容器只需要支持一个相当简单的API就可以称自己为web服务器。这使得开发servlet容器变得非常简单,因为功能契约有限。

这是因为Sun和Microsoft在软件方面有着非常不同的目标,以及实现这一目标的方法

Sun对Java的口头禅从一开始就是“写一次,到处运行”,这导致了在创建API方面投入了大量的精力,这些API指定了环境应该是什么样子,以允许一段极简的代码完成它的工作

“处理一个web请求并返回一个web响应”的API被命名为Servlets,由于它填补了一个空白并得到了很好的指定,所以非常成功。据我所知,所有主流的基于Java的web服务器都允许运行servlet。一个完整的支持servlet的web服务器的早期实现,后来扩展到包括JSP,以提供带有服务器端代码(如PHP)的HTML