[英]How can I serve static content from CXF / JAX-RS with my rest API mapped to root context?
[英]How to serve static content with JAX-RS?
我有一個使用JAX-RS Restlet擴展實現的自托管JAX-RS REST服務。
現在我必須提供靜態內容,我想知道如何使用JAX-RS。 注意,我不知道編譯時的物理目錄結構。 所以,給出一個像這樣的URL
http://bla-bla:8182/static/yaba/daba/doo.png
必須返回文件$(ROOT)/yaba/daba/doo.png
,其中$(ROOT)
是靜態內容根目錄。
是否可以使用純JAX-RS進行操作?
謝謝。
編輯
在編譯時已知:
編譯時未知:
剛發現它。
根據javax.ws.rs.Path
注釋javadocs,可以指定正則表達式來指示什么被認為是模板參數匹配。
因此,以下代碼有效:
@Path("static")
public class StaticContentHandler {
...
@GET
@Path("{path:.*}")
public FileRepresentation Get(@PathParam("path") String path) {
...;
}
}
GET http://localhost:8182/static/yaba/daba/doo.png
到達path
等於“yaba / daba / doo.png”的Get
方法 - 正是我想要的。
希望它能幫助任何人。
BTW, FileRepresentation
屬於Restlet,所以真正純粹的JAX-RS實現會返回其他東西。
假設靜態文件夾位於此處:項目中的./src/main/resources/WEB-INF/static
:
@Path("")
@Stateless
public class StaticResourcesResource {
@Inject ServletContext context;
@GET
@Path("{path: ^static\\/.*}")
public Response staticResources(@PathParam("path") final String path) {
final InputStream resource = context.getResourceAsStream(String.format("/WEB-INF/%s", path));
return null == resource
? Response.status(NOT_FOUND).build()
: Response.ok().entity(resource).build();
}
}
以下是如何使用示例和存儲庫的完整描述: https : //daggerok.github.io/thymeleaf-ee/#configure-jax-rs-serve-static-files-and-webjars
您可以通過實現相應的資源來使用純JAX-RS來實現:基本上您只需要發送一個字節數組,並且JAX-RS已經包含任何媒體類型的字節數組提供程序。
您的實現可能比Web服務器的標准實現效率低的問題。 通常最好的方法是將靜態內容放在Web服務器上,如Apache HTTPD或IIS甚至Tomcat。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.