使用 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 获取文件的目录列表。
这看起来很简单,但我似乎无法在 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 获取文件的目录列表。