如何为GlassFish Web应用程序提供对外部资源(文件)的访问?

时间:2010-07-16 15:48:08

标签: java file glassfish resources web-applications

我有点GlassFish初学者,所以请原谅我对这个问题的无知。

基本上我们正在为游戏网站提供服务,并且要通过我们的网络应用程序下载客户端,我们将其复制到domain1中的目录中。这样做的问题是,当重新部署Web应用程序时,客户端可下载的内容将丢失,我们必须再次将其复制。

我希望能够将可下载的客户端存储在某个外部位置,并让GlassFish提供对它的访问。

我可以将链接硬编码到网络应用程序中,但之后我们将失去可移植性,这就是让GlassFish处理它的原因。

我也可以将客户端下载到我们的数据库中,但这似乎是对数据库的不良使用,也可能导致数据库性能不佳。

我发现的第三个选项是将自定义资源映射从某个名称添加到文件位置,然后在我的一个bean中提供一个方法来检索文件位置。这似乎只是为了拥有一个外部资源,我觉得必须有一个更简单的方法。

那我该怎么办?

2 个答案:

答案 0 :(得分:7)

使用GlassFish,您可以定义备用文档根目录,以便在战争之外提供文件。来自文档:

  

Alternate Document Roots

     

备用文档根(docroot)   允许Web应用程序提供服务   来自的某些资源的请求   在自己的docroot之外,基于   这些请求是否匹配一个(或   更多)网络的URI模式   应用程序的备用docroots。

     

为a指定备用docroot   Web应用程序或虚拟服务器,   使用 alternatedocroot_n 属性,   其中 n 是一个正整数   允许指定多个。   此属性可以是a的子元素   sun-web-app元素   sun-web.xml文件或虚拟服务器   属性。有关的更多信息   这些元素,请参阅sun-web-app in Oracle GlassFish Server 3.0.1 Application Deployment Guide

所以你可以配置这样的东西:

<property name="alternatedocroot_1" value="from=/ext/* dir=/path/to/ext"/>

有关详细信息,请参阅文档。

答案 1 :(得分:1)

您的可下载链接不需要与游戏servlet在同一个应用程序中,对吗?

一种解决方案是创建一个仅包含web.xml和静态文件内容的新“伪”应用程序。您当然不会以war形式部署它(好吧,只有在您真正想要的时候),而只是在您想要更改内容时将文件复制到解压缩的目录中。我使用这样的设置从我运行的Web应用服务器提供一堆文件。

在工作中,在“企业”的环境中,我们以不同的方式做事。我们有一个Apache HTTPD服务器作为前端。它转发到应用服务器以获取需要在Java中完成的工作,但任何静态内容,以及cookie管理,SSL,负载平衡和其他“web服务器-Y”内容都由HTTPD完成。对于负载很重的站点和许多大而静态的文件,这会带来一点性能优势。它还允许我们在不同的物理盒之间拆分工作,这也有助于提高性能。

相关问题