alternatedocroot glassfish 3.1.2使用JSF的maven企业项目

时间:2012-06-15 19:47:44

标签: maven jsf configuration glassfish

我似乎无法弄清楚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>

我在项目运行时看到的全部是 “你好世界”

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

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

有人可以帮我处理xhtml文件中的属性/目录设置/和图片网址吗?

1 个答案:

答案 0 :(得分:4)

所以这是它的工作原理(最后)。我找了一些我能理解的东西之前花了一会儿。所以我会试着把它说出来,就像别的一样。

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

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

你有想要包含或引用的静态文件,如下所示:

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

在glassfish-web.xml中你会放(两个docroots)

<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" />

您可以在例如images目录下添加其他目录,以便您具有以下内容:

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

正如您所期望的那样,您将使用它:

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

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

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

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


修改

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

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

使用上面的例子:

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

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