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

Mag*_*ian 3 java rest web-services jax-ws glassfish-4

这似乎很容易,但似乎我无法在 Google 上找到答案。我需要在我的 webroot 文件夹中发送文件列表,类似于目录浏览。

我正在使用 Glassfish、JAX-RS.WS 和 genson 作为 POJO 编写器。

应用程序结构如下:

download
|- build
|- dist
|- src
|- web
|  |- files
Run Code Online (Sandbox Code Playgroud)

下面是我的代码

@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?
    }
}
Run Code Online (Sandbox Code Playgroud)

结果如下:

/usr/lib/glassfish/glassfish/domains/domain1/config
Run Code Online (Sandbox Code Playgroud)

我需要它指向

/sites/download/web/
Run Code Online (Sandbox Code Playgroud)

或者至少

/sites/download/
Run Code Online (Sandbox Code Playgroud)

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

/files/item.zip
/files/document.pdf
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗??

谢谢

Sco*_*lin 5

您可以从servlet 上下文中获取真实路径

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

/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/
Run Code Online (Sandbox Code Playgroud)

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

Hello, world! 
Requested path: /
Actual path: /Users/scotth/Workspaces/eclipse45-default/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/JaxRsRealPath/
Run Code Online (Sandbox Code Playgroud)

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