Java 如何使用JAX-RS服务静态内容?

Java 如何使用JAX-RS服务静态内容?,java,rest,jax-rs,restlet,Java,Rest,Jax Rs,Restlet,我有一个使用JAX-RSRESTlet扩展实现的自托管JAX-RSREST服务 现在我必须提供静态内容,我想知道如何使用JAX-RS来实现它。注意,我不知道编译时的物理目录结构。因此,给定如下URL http://bla-bla:8182/static/yaba/daba/doo.png 必须返回文件$(ROOT)/yaba/daba/doo.png,其中$(ROOT)是静态内容根目录 有可能用纯JAX-RS实现吗 谢谢 编辑 在编译时已知: 静态内容根文件夹的文件系统路径 用于引用静态内容

我有一个使用JAX-RSRESTlet扩展实现的自托管JAX-RSREST服务

现在我必须提供静态内容,我想知道如何使用JAX-RS来实现它。注意,我不知道编译时的物理目录结构。因此,给定如下URL

http://bla-bla:8182/static/yaba/daba/doo.png
必须返回文件
$(ROOT)/yaba/daba/doo.png
,其中
$(ROOT)
是静态内容根目录

有可能用纯JAX-RS实现吗

谢谢

编辑

在编译时已知:

  • 静态内容根文件夹的文件系统路径
  • 用于引用静态内容根文件夹的HTTP URL
编译时未知:

  • 根文件夹的实际内容-文件数量、文件类型、目录结构

通过实现相应的资源,您可以使用纯JAX-RS实现这一点:基本上,您只需要发送一个字节数组,JAX-RS已经包含了任何媒体类型的字节数组提供程序

问题在于,您的实现的效率可能低于web服务器的标准实现。通常最好是将静态内容放在Web服务器上,比如ApacheHTTPD或IIS,甚至Tomcat。

刚刚找到它

根据
javax.ws.rs.Path
注释javadocs,可以指定一个正则表达式来指示模板参数匹配的内容

因此,以下代码起作用:

@Path("static")
public class StaticContentHandler {
  ...
  @GET
  @Path("{path:.*}")
  public FileRepresentation Get(@PathParam("path") String path) {
    ...;
  }
}
GEThttp://localhost:8182/static/yaba/daba/doo.png
到达
Get
方法,其
path
等于“yaba/daba/doo.png”-这正是我想要的

希望它能帮助任何人


顺便说一句,
FileRepresentation
属于Restlet,因此真正纯粹的JAX-RS实现将在此处返回其他内容。

假设静态文件夹位于此处:
/src/main/resources/WEB-INF/static
在您的项目中:

@Path(“”)
公共类StaticResourcesResource{
@注入ServletContext上下文;
@得到
@路径(“{Path:^static\\/.*}”)
公共响应静态资源(@PathParam(“path”)最终字符串路径){
InputStream resource=context.getResourceAsStream(String.format(“/WEB-INF/%s”,path));
返回Objects.isNull(资源)
?响应。状态(未找到)。生成()
:Response.ok().entity(resource.build();
}
}

下面是操作示例和存储库的完整描述:

我有一个限制,即可能既没有apache也没有IIS可用。我的问题不是发送数据,而是使用JAX-RS规范匹配静态资源。您能否详细说明编译时已知的确切信息,以后可以配置什么以及什么是动态的。静态内容通常意味着一些静态的,而不是动态的…我已经做了很好的工作,在目标链接的答案。你查过了吗?你的-1是什么意思?我的答案是人们能在这条线索中找到的最好的答案!明白了,我道歉