【问题标题】:How to use both http server and application server in a java web application如何在 Java Web 应用程序中同时使用 http 服务器和应用程序服务器
【发布时间】:2012-09-18 09:26:36
【问题描述】:

我有一些关于 Java EE Web 应用程序的部署模型问题。目前我们在Tomcat 6中将我们的Web应用程序部署为WAR文件。所有内容都与WAR文件打包在一起,包括静态内容,如图像、静态html页面等。但我想将这些静态内容部署在 HTTP 服务器中,并仅使用应用程序服务器来检索动态内容。我如何拆分这些东西?有没有人做过这种事情,并且对我的场景有一个很好的部署模型。我们将不胜感激。

将 2 个 WAR 文件制作成一个只有静态内容的文件并将该 WAR 部署在 HTTP 服务器中,其余作为不同的 WAR 文件并将其部署在应用程序服务器中是个好主意吗?但是这种方法会对当前引用静态内容的所有页面产生影响,并且需要更改代码,这非常麻烦,因为我们的项目很大,并且基于代码的代码非常大。

欢迎任何策略和想法。

【问题讨论】:

  • 为什么要拆分静态和动态内容?这是组织考虑还是您想提高绩效?
  • 感谢 cmets,感谢每一位 cmets。对我来说很好的学习曲线。我想同时使用 HTTP 服务器和应用程序服务器来提高我的 Web 应用程序的性能。一段时间以来,我一直在阅读一本名为“Java™ 网站性能分析”的书。它建议我将静态内容放在 HTTP 服务器中,将动态内容放在应用程序服务器中。但我不知道如何实际做到这一点。我所知道的是如何构建 WAR 文件并在 Tomcat 中部署,这是我们用于部署的应用服务器。
  • 所以我的问题可以修改如下。如何在 HTTP 服务器中部署我的静态内容?如果我在这方面得到一些帮助,那么我可以继续从 WAR 文件中删除我所有的静态内容,并将其部署到 HTTP 服务器和应用程序服务器中 WAR 内的其余文件中。
  • 您只需要设置一个 Apache 服务器或类似服务器,然后将所有图像/css/js/其他静态内容(不是 JSP/JSF)放在其配置的文件夹中。我不建议这样做,我非常怀疑任何性能提升都会显着,特别是如果它只是几个 css/js/image 文件。无论如何,这些都缓存在客户端 Web 浏览器上,所以这不是一个大问题,虽然您需要做更多的工作来设置和维护它。如果您提供大量大文件,我可以想象这可能是一个好主意。

标签: java jakarta-ee deployment web


【解决方案1】:

出于性能原因,这可能是一件有趣的事情。

您应该有单独的部署脚本/部署文件来执行此操作。 为一个项目部署多个文件/WAR/文件夹/脚本不是问题。当您必须部署 WAR 和更新数据库时,我们也有同样的情况。

我将有一个 WAR 文件和一个包含您的静态内容的文件夹来部署。


编辑

在 HTTP 服务器中部署静态内容取决于服务器。 如果你想在 Linux 服务器上使用Apache,你必须设置一个Virtual Host

<VirtualHost *:80>
  # This first-listed virtual host is also the default for *:80
  ServerName www.example.com
  DocumentRoot /www/domain
</VirtualHost>

在此示例中,您有一个虚拟主机,它在 80 端口上侦听任何 IP 地址和服务器名称 www.example.com。然后将其重定向到/www/domain 路径。

您将在文档中找到更多示例和配置选项。

【讨论】:

  • 如何在 HTTP 服务器中部署我的静态内容?如果我在这方面得到一些帮助,那么我可以继续从 WAR 文件中删除我所有的静态内容,并将其部署到 HTTP 服务器和应用程序服务器中 WAR 内的其余文件中。
【解决方案2】:

您不能将WAR 文件部署到HTTP 服务器。 WAR 用于 Java Web 应用程序,它必须部署到应用程序服务器或 servlet 容器中(如 Tomcat)。我认为在单独的 Web 应用程序中分离静态内容不是一个好主意。如果这是一个项目,它应该是一个 Web 应用程序,此外:

WAR 文件具有特殊的文件夹结构并包含特殊文件 除了 JSP 页面、Java servlet、Java 类、HTML 页面等。 组合形成一个 Web 应用程序。

您可以将静态内容保存在一个应用程序中,这确实没什么不好。

如果你的项目非常大并且有很多文件也没问题,你只需要使用这样的项目结构,它应该易于理解和阅读,应用程序服务器或 servlet 容器将负责部署尽可能多的内容。

【讨论】:

  • 感谢您的意见...但我的要求是将我的静态内容部署到 HTTP 服务器中以提高我的 Web 应用程序的性能。我不确定如何在 HTTP 服务器中捆绑和部署静态内容,并从部署在 Tomcat 容器上的 WAR 文件中的 JSP 访问它。对此的任何帮助都会很棒...
【解决方案3】:

在版本 4 之前,Tomcat 提供静态内容的速度相当慢。这就是为什么经常建议将动态内容与静态内容分开并使用常规 Web 服务器为后者提供服务的原因(您提到的这本书是 2002 年发行的……)。最近的 Tomcat 版本没有遇到这个问题,因此恕我直言,您可以避免拆分,这对于组织和安全来说都是一场噩梦。

对于静态资源,您可能更愿意专注于配置适当的缓存,这样它们就不会被过于频繁地传输。

【讨论】:

  • 是的,缓存是我也想研究的另一个领域。事实上,我们已经开始寻找经常使用的与主表相关的查询以及它们的一些缓存方法。一种方法是在 Web 应用程序启动期间将这些查询的结果加载到内存中并使用它。一个问题是在主表数据更改时刷新内存中的内容......但将单独研究这个缓存问题......只是想分享一下我们也在研究这方面......
  • 从 db 缓存数据是一个不同的问题 - 我的意思是在 Web 服务器中为静态资源设置缓存标头,因此浏览器只会获取它们一次。
猜你喜欢
  • 2013-04-06
  • 1970-01-01
  • 2012-10-03
  • 1970-01-01
  • 2016-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多