1

我似乎无法弄清楚alternatedocroot。我查看了有关 stackoverflow 的其他问题,以及 glassfish 的 Oracle 文档(但它们对我来说就像泥巴一样清晰)。

我有一个带有 web、ejb、ear 和聚合器/父模块的 maven 项目。在 web 模块/项目中,我添加了一个 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="">
  <class-loader delegate="true"/>
  <property name="alternatedocroot_1" value="from=/images/* dir=/images " />
  <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>

我在 Linux 机器的根目录上创建了一个图像目录(一旦我解决了这个问题,我会把它放在其他地方)并在其中放入一个“picture.png”文件。我做了一个 chmod -R 777 /image 所以权限应该不是问题。

Welcome.xhtml 是这样的:

<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html">
  <h:head>
  </h:head>
  <h:body>
    Hello World
    <h:graphicImage url="/MyProject-web/images/picture.png" 
             height="200"
             width="960" />
  </h:body>
</html>

我在运行项目时看到的只是
“Hello World”

这是运行时浏览器中的 URL:

http://localhost:8080/MyProject-web/

有人可以帮我解决 xhtml 文件中的属性/目录设置/和图像 url 吗?

4

1 回答 1

4

所以这就是它的工作原理(最后)。我花了一段时间才找到我能理解的东西。所以我会尝试像其他任何事情一样进行布局。

让我们从磁盘上有一些资源或静态内容文件的地方开始。

/opt/project/resources/images/
/opt/project/resources/css/

并且您有要包含或引用的静态文件,如下所示:

/opt/project/resources/images/picture.png
/opt/project/resources/css/screen.css

在 glassfish-web.xml 你会放(两个文档根)

<property name="alternatedocroot_1" value="from=/images/* dir=/opt/project/resources" />
<property name="alternatedocroot_2" value="from=/css/* dir=/opt/project/resources" />

在您的 xhtml 文件中显示图像并链接到外部 css 文件,您可以执行以下操作:

<h:graphicImage url="images/picture.png" />
<link href="css/screen.css" rel="stylesheet" type="text/css" media="screen, projection" />

你可以在图像目录下添加其他目录,这样你就有了类似的东西:

/opt/project/resources/images/otherimages/anotherpicture.png

正如您所期望的那样,您会像这样使用它:

<h:graphicImage url="images/otherimages/anotherpicture.png" />

但是,如果您尝试将符号链接添加到其他图像所在的位置,它将不起作用。即以下将不起作用(您将无法访问“otherimages”符号链接目录中的图像)

.../resources/images$ ln -s /somedirectorytree/otherimages/ otherimages

这太糟糕了。如果有人知道这是否真的可能(即如果我弄错了),我很想知道。或者,如果有其他技巧,而不是诉诸硬(编码......因为想要一个更好的词)配置。能够添加到其他文件系统的链接会很好。


编辑

作为旁注,我想我会添加另一个与此相关的有用的花絮。如果您想确保在 url 中获得文件的完整(上下文)路径,可以在前面添加:

<link href="${facesContext.externalContext.requestContextPath}/

使用上面的示例:

<link href="${facesContext.externalContext.requestContextPath}/css/screen.css" rel="stylesheet" type="text/css" media="screen, projection" />

这将确保您始终在服务器上查找正确的路径。

于 2012-06-16T05:14:20.883 回答