Java EE应用程序与Web服务器+应用程序服务器

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

是否需要Java EE应用程序让Web服务器(如SUN Java Web Server)处理servlet / jsp请求并转发到诸如IBM WebSphere或BEA WebLogic等应用程序服务器?

由于应用程序服务器能够处理这样的servlet / jsp吗?

这种服务器体系结构的优点/缺点是什么?

提问于
用户回答回答于

Apache TomcatJettySun Java System Web Server仅是Java Web(Servlet)容器,这意味着它们只能执行Servlet / JSP - 它们不提供完整的Java EE API堆栈。

因此,他们只能部署.war文件,而不能.ear(这也包括.jar带有EJB的模块),并且不支持一些Java EE API,比如JSF或CDI。或其他功能/ API。值得注意的是,自Java EE6以来,.war文件可能包含EJB有关.war和的差异的更多信息.ear

每个Java EE服务器都有一个Web容器+ EJB容器。(你可以在这里这里看到Tomcat和Jetty不声称是JavaEE服务器,只是servlet(web)容器。)

JBoss Application Server使用JbossWeb(一个Apache Tomcat分支)作为它的Web容器。它的EJB容器就是JBoss(除了“JBoss EJB容器”以外,它没有单独的名称)。

其他人(IBM WebSphere,Oracle / BEA WebLogic,TomEE,Glassfish)也有他们的Web容器+ EJB容器。

TomEE显然使用Apache Tomcat作为其Web容器。Glassfish也使用Apache Tomcat分支。(是的,Apache Tomcat似乎非常受欢迎:)

在下面的讨论中,您可以在出现时使用“Web容器”和带有“功能齐全的Java EE服务器”的JBoss来更改Tomcat。(为了清晰,我使用了产品名称。)

图像:Java EE服务器和容器 - 来源:Java EE教程。

让Java Web服务器(如Tomcat)处理Servlet / JSP调用并将更复杂的请求转发给诸如JBoss(或IBM WebSphere或BEA WebLogic)之类的应用程序服务器有什么好处(缺点)?

从功能标准来看,没有有效的收益

如果你把一个Tomcat放在JBoss 之前,你实际上做的是把一个Tomcat放在一个永远在JBoss的EJB容器之前的JBossWeb(Web容器,因此是每个Web应用程序的入口)之前。如果我们正在谈论功能,那只是多余的,因为我们有两次提供相同的服务。

切换执行器或集群功能

如果 JBoss 之前使用JBoss作为它的EJB容器,那么 JBoss 之前放置一个Tomcat 是有意义的:因此,这里的选择将是Web容器实现者中的一个简单开关。

另外,如果Tomcat位于不同的网络节点(或多个Tomcat /节点),则可以应用集群功能(否则不能这样做,因为JBossWeb和JBoss通常被视为一个,因此会放在同一台机器中) 。

提供静态内容和安全问题

什么是常见的是将一个Web服务器(如Apache HTTPD或IIS)的Java Web容器之前。这有两个主要动机:

  • 使HTTPD提供静态内容(如图像)并将其余内容转发给Java Web容器。这是因为Web服务器通常在提供静态内容的任务中进行了更好的优化。
  • 安全性:仅在DMZ中公开HTTPD。可以在DMZ上设置一个Apache HTTPD,并将其转发给Web容器(Tomcats等)和JavaEE服务器(JBosses等)。

如果需要增加安全性,在DMZ中使用Web容器就没有意义了:如果它正在提供应用程序(.war即已部署文件),则应用程序仍然是“易受攻击”的。如果它只有转发请求/响应,那么Apache HTTPD是一个更好的选择!

用户回答回答于

Sun Java Web服务器,IBM WebSphere应用服务器,WebLogic,JBoss应用服务器,Tomcat,Jetty ......它们都是Java Web应用服务器,并且执行相同的操作 - 运行WAR或EAR打包的应用程序(EAR是“Enterprise”包含1个以上的WARs)。

如果您的设置中有两台服务器运行一个应用程序,那么您的部署策略/设计可能有问题。

有一些多服务器设置的情况,但通常是在您的Java应用服务器之前有Apache HTTP服务器的负载平衡和代理设置。

例如,您有一个Tomcat在端口8080上为您的应用程序提供服务,并且您希望使用http://myserver.com/myapp/而不是http://myserver.com:8080/myapp/。你无法单独使用Tomcat,因为Java不能低于端口1024(*)。为了做到这一点,你需要安装Apache HTTP服务器的80端口,并配置它的mod_proxy所有流量重定向从/myapphttp://myserver.com:8080/myapp

*:我不记得确切的数字,但它大约是1024.这对于Linux来说是正确的,但可能不适用于Windows,因为我使用Windows安装程序已经有一段时间了。

扫码关注云+社区