在Java EE应用程序中分离静态和动态内容

时间:2009-09-03 13:50:05

标签: web-applications java-ee distribution static-content

我们使用IBM产品,我们通常使用IBM Http Servers(读取Apache)作为我们的应用程序服务器的反向代理。出于性能原因,我们从http服务器提供静态内容(.gif,.jpg,.css,.html等),以减轻应用程序服务器的负担。

到目前为止,我们必须将文件分发到http服务器并手动配置(最好编写自定义脚本。)问题在于保持所有内容同步所需的工作量,尤其是当您需要更新应用程序时。

任何Java EE产品是否都支持“开箱即用”?是否有办法让应用程序服务器自动执行此操作,例如在群集配置中,主节点负责将应用程序分发到其他节点并保持所有内容同步。

2 个答案:

答案 0 :(得分:2)

  

到目前为止,我们必须将文件分发到http服务器并手动配置(最多编写自定义脚本。)

不确定我是否获得配置部分。通常很容易将静态内容与JSP和Servlet区分开来(一旦完成,它就不会改变那么多)。

  

问题在于保持所有内容同步所需的工作量,尤其是当您需要更新应用时。

自动化!使用Maven(或Ant,但这需要更多工作),很容易从Web项目创建单独的程序集来处理这个问题:Java EE节点的WAR,一个zip HTTP服务器的静态内容。

  

是否有任何Java EE产品支持“开箱即用”?

AFAIK,没有。令人惊讶的是,部署是Java EE的薄弱环节。但是,您可以使用Maven和/或ControlTier等工具达到相当高的自动化水平。

答案 1 :(得分:0)

我不熟悉IBM产品,但通常的做法是将应用程序(主要是WAR)部署为目录而不是war文件,这样您就可以自己访问这些文件了。然后,将部署目录映射到apache中的别名,以便它可以从那里提供静态内容。请注意,您需要阻止对WEB-INF目录的所有访问,并将所有请求路由到jsp文件(.jsp,.jsf,.do,.action等)到应用程序服务器。

使用以下指令阻止WEB-INF:

<DirectoryMatch "(WEB-INF|META-INF)">  
  Order allow,deny 
  Deny from all 
  AllowOverride None 
</DirectoryMatch>