我似乎无法弄清楚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文件中的属性/目录设置/和图片网址吗?
答案 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" />
这将确保您始终在服务器上查找正确的路径。