使用Glassfish非常容易:
考虑我在unix /apps/static_content/
上的绝对路径。
使用Glassfish,我只需将备用doc root 定义为:
<property name="alternatedocroot_1"
value="from=/static/* dir=/apps/static_content/"/>
当我上传我的图片和其他数据文件时,我可以将它们保存到/apps/static_content
目录,在我的JSF页面中,我可以正常显示我的静态内容:
<p:graphicsimage value="/static/external_web_app.png"/>
我真的需要在JBoss AS7中实现相同的功能
我该怎么做?
答案 0 :(得分:1)
这个问题有点老了,但是如果有人需要用更新版本的JBoss / Wildfly来解决这个问题。
JBoss AS从版本8重命名为Wildfly(即Wildfly 8是JBoss AS 8),Red Hat支持的JBoss版本更名为JBoss EAP。所以这适用于:
首先要注意的是&#34; Alternate doc root&#34;玻璃鱼中的特征并不像那样。请查看此问题,以获取有关此功能行为的说明:Alternate docroot not working on glassfish 4
现在,为了回答这个问题,JBoss / Wildfly是基于Undertow构建的,它可以让你完全按照你的需要做。请参阅此问题,了解如何将underow配置为静态内容的Web服务器:How to configure Wildfly to serve static content (like images)?
答案 1 :(得分:0)
在您的情况下:.../jboss-7/standalone/deployments/
必须有static.war/
。
因此上传进入此目录,并以正常方式回馈内容。
有关详细信息,请参阅Is it possible to deploy an exploded war file (unzipped war) in JBoss AS 7
正如BalusC所指出的:只要上传数据,就不得重新部署/删除此目录。您应该定期备份此目录。
据我所知,这是仅通过配置/设置的唯一可能性。
static.war
的单独网络应用程序。添加 servlet以流式传输静态内容 这样就不需要将文件上传/存储到../deployments/
下面的文件系统中,它可以是任何目录,但是你需要一个额外的servlet,所以它以编程方式解决。
一个简单的流式servlet看起来像这样(只是流式传输 - 没有身份验证等):
public class DownloadServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
final File dir = new File("/var/cms/storage/");
final String start = "/static/";
final String relativePath = request.getRequestURI().substring(
request.getRequestURI().indexOf(start) + start.length());
final File file = new File(dir, relativePath);
final String ct = URLConnection.guessContentTypeFromName(file.getName());
response.setContentType(ct);
final InputStream is =
new BufferedInputStream(new FileInputStream(file));
try {
final boolean closeOs = true;
org.apache.commons.fileupload.util.Streams.copy
(is, response.getOutputStream(), closeOs);
} finally {
is.close();
}
}
将所有URL映射到此servlet:
<servlet-mapping>
<servlet-name>DownloadServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
名称static.war
提供/static/
网络上下文,因此应与代码中的网址兼容。
答案 2 :(得分:0)
如果您浏览jboss目录,您会发现有很多可用于存储不同类型数据的内容,例如jboss.serer.data.dir。
您可以尝试通过系统属性询问此目录路径,并在您的服务所使用的数据文件夹中存储此目录。
String path = System.getProperty("jboss.server.data.dir");
然后你可以根据需要使用 path ,如果只是静态,如你的例子中所示直接设置目录的名称。
这应该有用,我希望:p
ps:如前一个答案所示,保存的数据将保留在目录中,您不能重新部署/删除此目录..它会将您的数据保存在那里..