Java 如何使用JAX-RS服务静态内容?
我有一个使用JAX-RSRESTlet扩展实现的自托管JAX-RSREST服务 现在我必须提供静态内容,我想知道如何使用JAX-RS来实现它。注意,我不知道编译时的物理目录结构。因此,给定如下URLJava 如何使用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实现吗 谢谢 编辑 在编译时已知: 静态内容根文件夹的文件系统路径 用于引用静态内容
http://bla-bla:8182/static/yaba/daba/doo.png
必须返回文件$(ROOT)/yaba/daba/doo.png
,其中$(ROOT)
是静态内容根目录
有可能用纯JAX-RS实现吗
谢谢
编辑
在编译时已知:
- 静态内容根文件夹的文件系统路径
- 用于引用静态内容根文件夹的HTTP URL
- 根文件夹的实际内容-文件数量、文件类型、目录结构
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是什么意思?我的答案是人们能在这条线索中找到的最好的答案!明白了,我道歉