1

使用 Glassfish 非常容易:

考虑我在 unix 上的绝对路径/apps/static_content/。使用 Glassfish,我将简单地将备用文档根定义为:

<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 中实现相同的功能

我怎样才能做到这一点?

4

3 回答 3

1

这个问题有点老了,但如果有人需要用较新版本的 JBoss/Wildfly 来回答这个问题。

JBoss AS 从版本 8 重命名为 Wildfly(即 Wildfly 8 是 JBoss AS 8),Red Hat 支持的 JBoss 版本重命名为 JBoss EAP。所以这适用于:

  • Wildfly(任何版本)
  • JBoss EAP(从版本 7 开始)

首先要注意的是 glassfish 中的“备用文档根”功能不能这样工作。请查看此问题以了解此功能的行为:Alternate docroot not working on glassfish 4

现在,要回答这个问题,JBoss/Wildfly 是建立在 Undertow 之上的,它可以让您完全按照您的需要去做。请参阅此问题,了解如何将 undertow 配置为静态内容的 Web 服务器:如何配置 Wildfly 以提供静态内容(如图像)?

于 2017-06-15T17:08:10.037 回答
0
  • 选项 1:您可以尝试部署一个单独的已分解 .war 文件,并将其用于您的静态内容

在您的情况下:.../jboss-7/standalone/deployments/必须有一个static.war/.

所以上传到这个目录,内容以正常方式返回。

详情见Is it possible to deploy an exploded war file (unzipped war) in JBoss AS 7

正如 BalusC 所指出的:一旦上传数据,您就不能重新部署/删除此目录。您应该定期备份此目录。

据我所知,这是仅通过配置/设置来实现的唯一可能性。


  • 选项 2:使用 name 创建单独的 webapp 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/Web 上下文,因此应使其与代码中的 URL 兼容。

于 2013-08-07T07:16:19.420 回答
0

如果你探索 jboss 目录,你会发现有很多可以用来存储不同类型的数据,比如 jboss.serer.data.dir 。

您可以尝试通过系统属性询问此目录路径,并将您的服务正在使用的数据存储在该目录下的文件夹中。

String path = System.getProperty("jboss.server.data.dir");  

然后您可以根据需要使用路径,如果只是静态的,如您的示例中所示,您可以直接设置目录的名称。

这应该可行,我希望:p

ps:正如上一个答案所暗示的,保存的数据将保留在目录中,您不得重新部署/删除此目录..它将保留您的数据..

于 2013-08-07T07:47:32.020 回答