Apache的META-INF /资源/提取

时间:2012-11-15 12:49:20

标签: apache tomcat servlet-3.0

我在/ META-INF / resources /

下有几个包含图像的罐子

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

现在我有一个servlet3.0应用程序,它将这些资源提供给Web。

我不喜欢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 提取到真实目录中!

3 个答案:

答案 0 :(得分:2)

仅仅因为性能原因will not give you any significant performance benefits而在Tomcat上使用Apache(或任何其他httpd服务器)。但会增加管理开销。

无论如何,如果你坚持要自己提取这些文件:

1)找到LikeButton.jar的真实路径:

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

2)解压缩文件。您可以使用this tutorial,只需针对ZipEntry添加一些条件,以便只提取您真正需要的内容。

答案 1 :(得分: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中提取它们似乎是错误的方法。

答案 2 :(得分:1)

我看到了几个选项:

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

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

  3. 关于性能要求的免责声明/评论:在95%的情况下,我会在任何测量之前看到性能参数。最有可能的应用程序是性能良好的。如果不是,通过Apache提供图像可能不是提高性能的最有效方法。您可以对这些更改做些什么,将appserver的性能提高2%,但由于配置/部署复杂性的提高,系统管理和开发性能降低了10%。

    道歉,如果你在其他5%以内并且该免责声明不适用于你的情况,但许多其他人会阅读这个问题,我觉得这是一个非常重要的方面。