使用 Jersey JAX RS.WS 获取 Java 中的当前 Web 文件夹

Get current web folder in Java with Jersey JAX RS.WS

这看起来很简单,但我似乎无法在 Google 找到答案。 我需要在我的 webroot 文件夹中发送文件列表,有点像目录浏览。

我正在使用 Glassfish 和 JAX-RS.WS,以及用于 POJO 编写器的 genson。

应用结构如下:

download
|- build
|- dist
|- src
|- web
|  |- files

下面是我的代码

@Path("home")
public class HomeResource {

    @Context
    private UriInfo context;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public String get() {
        return System.getProperty("user.dir"); // ??? Any idea what should be in here?
    }
}

结果为:

/usr/lib/glassfish/glassfish/domains/domain1/config

我需要它指向

/sites/download/web/

或至少

/sites/download/

因为我需要我的服务来提供一个列表,例如:

/files/item.zip
/files/document.pdf

有人可以帮忙吗??

谢谢

您可以获得 real path from the servlet context.

package com.scotth.jaxrsrealpath;

import javax.servlet.ServletContext;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;

/**
 * @author scotth
 * jax-rs application deployed to /JaxRsRealPath/
 */
@Path("sample")
public class SampleResource {

    @Context ServletContext servletContext;

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getHello(@QueryParam("path") String requestedPath) {
        String path = requestedPath == null ? "/" : requestedPath;
        String actualPath = servletContext.getRealPath(path);
        return String.format("Hello, world! \nRequested path: %s\nActual path: %s", path, actualPath);
    }
}

请求 /JaxRsRealPath/sample?path=/WEB-INF 在我的 eclipse 管理的 Tomcat 实例中产生请求文件或文件夹的实际文件系统路径 - 可用于 java.io.File

Hello, world! 
Requested path: /WEB-INF
Actual path: /Users/scotth/Workspaces/eclipse45-default/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/JaxRsRealPath/WEB-INF/

另一个仅请求 /JaxRsRealPath/sample 的示例(代码随后检查上下文根 / 的路径):

Hello, world! 
Requested path: /
Actual path: /Users/scotth/Workspaces/eclipse45-default/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/JaxRsRealPath/

如果需要,您可以从那里使用 File APIs 获取文件的目录列表。