1

我有几个罐子,其中包含 /META-INF/resources/ 下的图像

我安装了一个 Apache 来平衡所有 Tomcat 服务器。

现在我得到了一个 servlet3.0 应用程序,可以将这些资源提供给网络。

我不喜欢 tomcat 提供图像,我喜欢 apache 带来图像(因为性能)。

可以将它们提取到 tomcat/work 内部的文件夹中,而无需强制 tomcat 分解 .war 文件吗?


例子

我在下面有一张图片

/opt/tomcat/webapps/MyApp.war!/WEB-INF/lib/LikeButton.jar!/META-INF/resources/like.png

好的,tomcat 将 like.png 提供给

http://localhost:8080/MyApp/like.png

但是他并没有将like.png 解压到一个真实的目录中!

4

3 回答 3

2

Using Apache (or any other httpd server) over Tomcat just because of performance reasons will not give you any significant performance benefits. But it will add administrative overhead.

Anyway, if you insist you can extract these files yourself:

1) Find the real path of LikeButton.jar:

String relativeWebPath = "/WEB-INF/lib/LikeButton.jar";
String absoluteDiskPath = getServletContext().getRealPath(relativeWebPath);
File likeButtonJar = new File(absoluteDiskPath);

2) Unzip the files. You can use this tutorial, just add some conditionals against ZipEntry to only extract what you really need.

于 2012-12-27T15:16:42.557 回答
2

真正的问题是您为什么首先使用 Apache httpd。

我不喜欢 tomcat 提供图像,我喜欢 apache 带来图像(因为性能)。

如果 Apache httpd 提供了一些有用的功能,那么它与这个问题有关,你应该说明它。否则,完全转储 httpd 并使用正确配置的 Tomcat(例如,使用 APR 或 NIO 连接器)。

可以将它们提取到 tomcat/work 内部的文件夹中,而无需强制 tomcat 分解 .war 文件吗?

$ unzip MyApp.war -j WEB-INF/lib/LikeButton.jar \
  && \
  unzip -d /var/www/htdocs/ LikeButton.jar '/META-INF/resources/*'

如果您的 WAR 中有许多 JAR 文件,则必须对每个文件重复上述操作。

更好的是,将构建静态内容目录或 ZIP 文件作为构建过程的一部分,然后将这些文件发布到 Web 服务器。从 WAR post-hoc 中提取它们似乎是错误的方法。

于 2012-12-27T21:28:50.060 回答
1

我看到了几个选项:

  1. 将您的 servlet 应用程序更改为可配置以从何处引用图像(当您谈论性能时,这也将使您能够使用任何 CDN(内容交付网络) - 从完全不同的主机交付图像会更好性能)。除此之外,您还需要将图像提取到 httpd 可用的某个位置,并配置您的应用程序以引用相应的 URL。

  2. 在 Apache 上使用缓存从 tomcat 请求图像一次,然后从缓存中请求图像。这将使您能够在部署具有不同图像/资源的更新版本时刷新缓存,并且通常提供最简单的部署 - 一旦缓存设置正确 - 您只需要更新您的 servlet 应用程序而不接触任何静态- 文件分开存储。缺点是您的应用需要提供正确的与缓存相关的 http-headers,但这也可能被视为一个积极方面:无论如何它都应该这样做。

关于性能要求的免责声明/评论:在 95% 的情况下,我看到要在任何测量之前提出性能参数。该应用程序很可能在性能方面表现良好。如果不是这样,通过 Apache 提供图像可能不是提高性能的最有效方法。您可以对这些更改执行的操作是将应用服务器的性能提高 2%,但由于配置/部署复杂性的提高,将系统管理和开发性能降低 10%。

如果您在另外 5% 的范围内并且该免责声明不适用于您的情况,我们深表歉意,但许多其他人会阅读这个问题,我觉得这是一个非常重要的方面。

于 2013-01-02T08:34:17.470 回答