jakarta ee Java ee应用程序与Web服务器+应用程序服务器
Java EE应用程序是否需要像SUN Java web Server这样的web服务器来处理servlet/jsp请求,并转发到IBM WebSphere或BEA WebLogic等应用程序服务器
既然应用服务器也能处理这样的servlet/jsp
这种服务器架构的优点/缺点是什么
你可以在下面搜索框中键入要查询的问题!
Java EE应用程序是否需要像SUN Java web Server这样的web服务器来处理servlet/jsp请求,并转发到IBM WebSphere或BEA WebLogic等应用程序服务器
既然应用服务器也能处理这样的servlet/jsp
这种服务器架构的优点/缺点是什么
# 1 楼答案
Sun Java Web服务器、IBM WebSphere应用服务器、WebLogic、JBoss应用服务器、Tomcat、Jetty。。。它们都是Java Web应用服务器并且做同样的事情——运行WAR或EAR打包的应用程序(EAR代表“企业”,包含1+个WAR)
如果您的设置中有两台服务器来运行一个应用程序,那么您的部署策略/设计可能有问题
也有多服务器设置的情况,但这些通常是负载平衡和代理设置,在Java应用程序服务器前面有Apache HTTP服务器
例如,您有一个Tomcat在端口8080上为您的应用程序提供服务,您希望使用
http://myserver.com/myapp/
而不是http://myserver.com:8080/myapp/
。单独使用Tomcat无法做到这一点,因为Java不能低于端口1024(*)。为此,您需要在端口80上设置Apache HTTP服务器,并将其mod_proxy
配置为将所有流量从/myapp
重定向到http://myserver.com:8080/myapp
*:我不记得确切的数字,但大约是1024。这对Linux来说是正确的,但对Windows来说可能不是,我已经有一段时间没有使用Windows设置了
更新: 糟糕的是,我忘了强调“作为系统服务运行”部分为described here
# 2 楼答案
Apache Tomcat、Jetty和Sun Java System Web Server只是Java Web(Servlet)容器,这意味着它们只能执行Servlet/JSP——它们不提供完整的Java EE API堆栈
因此,他们只能部署} files may contain EJBs More info on differences about ^{} and ^{}
.war
文件,而不能部署.ear
(也包括带有EJB的.jar
模块),并且不支持现成的一些Java EE API,如JSF或CDI。或其他功能/API需要注意的是,由于JavaEE6,^{每个JavaEE服务器都有一个Web容器+EJB容器。 (您可以看到here和hereTomcat和Jetty并不声称是JavaEE服务器,只是servlet(web)容器。)
JBoss应用服务器使用JbossWeb(Apache Tomcat fork)作为其web容器。它的EJB容器是JBoss(除了“JBoss EJB容器”,它们没有单独的名称)
其他公司(IBM WebSphere、Oracle/BEA WebLogic、TomEE、Glassfish)也有自己的web容器+EJB容器
TomEE显然使用ApacheTomcat作为其web容器Glassfish也使用Apache Tomcat叉子。(是的,Apache Tomcat似乎非常受欢迎:)
在下面的讨论中,无论何时出现,都可以将Tomcat更改为“Web容器”,将JBoss更改为“完全支持Java EE服务器”。(为了清晰起见,我使用了产品名称。)
图片:JavaEE服务器和容器-来源:JavaEE教程
从功能角度来看,没有有效的增益
如果将Tomcat放在JBoss的之前,那么实际操作是将Tomcat放在JBossWeb(web容器,因此是每个web应用程序的入口)之前,而JBoss的EJB容器将始终位于JBoss的EJB容器之前。如果我们谈论的是功能,那只是多余的,因为我们有两次提供相同的服务
交换实现者或集群功能
如果JBoss只将JBoss用于EJB容器,那么将Tomcat放在JBoss之前是有意义的:那么,这里的选择将是web容器实现器中的一个简单切换
此外,如果Tomcat位于不同的网络节点(或多个Tomcat/节点),则可以应用集群功能(否则就无法应用集群功能,因为JBossWeb和JBoss通常被视为一个节点,因此在同一台机器中)
服务于静态内容和安全问题
非常常见的是在Java web容器之前放置一个web服务器(如Apache HTTPD或IIS)。这主要有两个动机:
如果想要增加安全性,那么在DMZ中使用web容器是没有意义的:如果它正在为应用程序提供服务(即部署了
.war
文件),那么应用程序仍然是“易受攻击的”;如果它只是转发请求/响应,那么Apache HTTPD是一个更好的选择# 3 楼答案
由于应用服务器已经在板上包含Servlet容器,所以再增加一个Web服务器来处理传入的http请求是多余的
然而,当我在项目中工作时,这些层是分开的。我们有JBoss服务器集群和Tomcat服务器集群。Tomcat通过RMI和负载平衡调用JBoss。这样做是为了安全(Jboss服务器位于VPN内)和可扩展性