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

Java 如何为GlassFish web应用程序提供对外部资源(文件)的访问?,java,file,glassfish,resources,web-applications,Java,File,Glassfish,Resources,Web Applications,我是个初学者,所以请原谅我在这个问题上的疏忽 基本上,我们提供的是一个游戏网站,为了让客户端可以通过我们的web应用下载,我们将其复制到domain1中的一个目录中。问题是,当重新部署web应用程序时,可下载的客户端丢失,我们必须再次复制它 我希望能够将可下载的客户端存储在一些外部位置,并让GlassFish提供对它的访问 我可以将链接硬编码到web应用程序中,但这样我们就失去了可移植性,这就是让GlassFish处理它的原因 我还可以将客户机下载到我们的数据库中,但这似乎是对数据库的不当使用,

我是个初学者,所以请原谅我在这个问题上的疏忽

基本上,我们提供的是一个游戏网站,为了让客户端可以通过我们的web应用下载,我们将其复制到domain1中的一个目录中。问题是,当重新部署web应用程序时,可下载的客户端丢失,我们必须再次复制它

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

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

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

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


那我该怎么办呢?

你的可下载内容的链接不必与游戏servlet在同一个应用程序中,对吗

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


在工作中,在一个“企业”式的环境中,我们做事方式不同。我们有一个apachehttpd服务器作为前端。它向应用服务器转发需要用Java完成的内容,但是任何静态内容,以及cookie管理、SSL、负载平衡和其他“web服务器-y”内容都是由HTTPD完成的。这对负载沉重的站点和大量大而静态的文件产生了一点性能优势。它还允许我们在不同的物理框中分割工作,这同样有助于提高性能。

使用GlassFish,您可以定义一个备用文档根目录,为来自战争之外的文件提供服务。从文件中:

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

为指定备用docroot的步骤 web应用程序或虚拟服务器, 使用AlternatedCroot\n属性, 其中n是一个正整数 允许指定多个。 此属性可以是 中的sun web app元素
sunweb.xml
文件或虚拟服务器 财产。有关 这些元素,请参见

因此,您可以配置如下内容:

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


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

Hi,为了澄清我希望可以从游戏网站访问(可单击)可下载的链接,但我不希望实际链接到我们网站部署的域内的某个区域。我不明白的是,如何从主webapp中访问伪webapp。在我看来,我将再次面临同样的问题,glassfish如何将主Web应用指向伪应用的位置?也许我不理解问题的一部分。你的Web应用程序是一堆网页,对吗?您可以将任何想要的链接编码到这些页面上的
href
s中。这些链接可以指向同一个Web应用程序、同一应用程序服务器上的另一个Web应用程序、不同的计算机或Microsoft的网站。。。这只是一个URL,问题出在哪里?啊,是的,对不起,我忘了提到一条重要信息,我们将运行一个开发和生产版本,它们将有不同的可下载内容,并在不同的服务器上运行,如果我将链接编码到页面中,我将不得不在每次为不同版本重建和部署时切换它。我不想冒让客户下载游戏开发版本的风险。因此,我想通过某种方式配置glassfish,以提供可下载到web应用程序的位置,这样就不需要有不同版本的web应用程序。专业的解决方案可以通过配置解决该问题。不同版本之间的任何信息都会进入一个配置文件并从中读取。WARs中内置了不同的配置文件,或者您将不同的配置文件放在Web应用程序之外的不同服务器上。。。你肯定希望这些信息被发现并以一种简单的方式自动使用。谢谢你,帕斯卡。这正是我要找的。嗨,帕斯卡,我有一些问题吗?我通过向我的域中添加以下内容尝试了您的解决方案。xml我知道“dir”解析正确,因为我在创建“Users/Piers/externalFiles”之前遇到异常,但现在启动glassfish.works时出错,谢谢,请确保该属性是sun-web.xml节点的子属性