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

Sri*_*ddi 27 .net java

为什么java世界中存在如此多的混乱,包括apache,tomcat,jboss,jetty等各种服务器,而在.Net世界中,只有IIS才能完成这项工作.我想了解它的需要和使用,并没有启动java vs. .net.

duf*_*ymo 32

有几个原因.

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

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

还应该说,开发Web应用程序不需要完整的Java EE规范.JDBC是处理关系数据库的Java的一部分,是Java SE的一部分.Java EE添加了作为HTTP侦听器的servlet和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或更高版本.


Tho*_*sen 29

这是因为Sun和微软的软件目标非常不同,以及实现这一目标的方法.

Java的Sun咒语从一开始就是"一次编写,随处运行",这导致创建_API_s已经付出了很多努力,指定了环境应该如何允许简约的代码执行工作.

用于"处理Web请求并返回Web响应"的API被命名为Servlets,并且由于填充了空白并且被明确指定,因此非常成功. 我所知道的所有基于Java的主流Web服务器都允许运行servlet.一个完整的支持servlet的Web服务器的早期实现只有1500行. 后来扩展到包括JSP以提供带有服务器端代码的HTML(如PHP).

对于任何真正可扩展的解决方案,包括Web解决方案,这意味着最终负载非常高,以至于一台计算机的功能不足以自行运行它.一个可扩展的解决方案必须能够分散在多台计算机之间,这个单一的需求带来了很多其他的东西:

  • 代码必须能够调用在不同计算机(EJB)上运行的代码.
  • 数据必须以一致的方式(数据库)提供给所有计算机.
  • 访问所述数据库必须高效(数据库连接池).......还有更多

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,任何人都可以实现,而且它们具有.

  • 开始使用JEE的最简单方法是使用GlassFish进行Netbeans.http://netbeans.org/downloads/ (2认同)

Ode*_*ded 7

首先,您可以使用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集成.当然,Microsoft只在其操作系统和Web服务器上实现了它.


Yis*_*hai 6

Apache非常类似于IIS,与Java没有太大关系.

Java中的应用程序服务器提供.NET以各种方式提供的其他服务,使用不同的产品或Windows操作系统.

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

Tomcat和Jetty基本上是java Web服务器,它提供了一个定义的框架(Servlets等),用于创建带有Java代码的动态Web站点.它们通常是较大的应用程序服务器的组件,或者可以单独部署.

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


Mat*_*gro 5

因为Java EE是规范,而不是产品本身.请记住,Java比.NET更开放(在规范意义上).

每个应用服务器具有不同的功能,不同的性能,不同的目标用户/企业,不同的价格标签,在不同平台上运行,需要不同的硬件.差异化是所有应用程序服务器存在的原因,一种规模并不适合所有应用程序服