GlassFish 4.1替代docroot,访问静态内容

3
我需要访问此URL中的一些图片:http://localhost:8080/static/img1.jpg 这些图片位于“/home/andrea/Documents”中,应用程序上下文为“/”。我正在使用GlassFish 4.1.1。
在项目的/WEB-INF目录中,我有以下内容:(glassfish-web.xml)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
    <parameter-encoding default-charset="UTF-8" />
    <property name="alternatedocroot_1" value="from=/static/* dir=/home/andrea/Documents" />
</glassfish-web-app>

问题在于找不到文件。
我错过了什么吗?
是否有其他方法定义alternatedocroot或将虚拟目录映射到项目外部?

看起来是一个重复的问题,参考 https://dev59.com/Nn_aa4cB1Zd3GeqP5Z7p。如果答案适用于您,请查看那里。 - OndroMih
尝试进入您的Glassfish域的server.log并搜索错误消息,您将看到Glassfish尝试查找资源的路径。我猜问题可能也在于Documents后缺少/ - OndroMih
@OndrejM 我已经尝试了多次...不起作用...而且日志没有记录任何东西...我该怎么办? - Andrea Catania
2个回答

6

我已经通过阅读这篇文章解决了问题:http://glassfish.10926.n7.nabble.com/unable-to-get-working-alternate-docroots-td40978.html

不幸的是,文档并不是很清晰,我尝试解释一下我是如何解决我的问题的。

dir 值是你的 alternatedocroot 的基本目录,所以你必须将值 from 指定的完整路径放入 alternatedocroot 的基本目录中。因此,在我的情况下,真正的结构是 /home/andrea/Documents/static(记得在 dir 值的末尾插入“/”)。

glassfish-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
    <parameter-encoding default-charset="UTF-8" />
    <property name="alternatedocroot_1" value="from=/static/* dir=/home/andrea/Documents/" />
</glassfish-web-app>

我的要求

我的要求是需要一个单独的目录来上传图片,与".war"归档文件分开。我找到的解决方案是将图片插入到glassfish domain1目录下的docroot目录中。

glassfish-web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
    <parameter-encoding default-charset="UTF-8" />
    <property name="alternatedocroot_1" value="from=/static/* dir=./docroot/" />
</glassfish-web-app>

请注意,真实路径必须包含static目录:[...]/glassfish/domains/domain1/docroot/static/


0

谢谢你,我的朋友。它对我有用,在我的Glassfish 4.1.1中。

我在WEB-INF下的glassfish-web.xml中有这段代码:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
    <context-root>/GestionProcesos</context-root>
    <class-loader delegate="true"/>
    <jsp-config>
        <property name="keepgenerated" value="true">
              <description>Keep a copy of the generated servlet class' java code.   </description>
        </property>
    </jsp-config>
</glassfish-web-app>

但是现在我的 glassfish-web.xml 文件,我把它写成这样:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app error-url="">
    <context-root>/GestionProcesos</context-root>
    <class-loader delegate="true"/>
    <property name="alternatedocroot_1" value="from=/Downloads/* dir=/Users/Cristian/" />
</glassfish-web-app>

所以,在我的JSP中要“下载”文件:
<a href="${pageContext.request.contextPath}/Downloads/FileName.pdf" download="FileName.pdf">Download file</a>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接