簡體   English   中英

如何使用JAX-RS提供靜態內容?

[英]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進行操作?

謝謝。

編輯

在編譯時已知:

  • 靜態內容根文件夾的文件系統路徑
  • 用於引用靜態內容根文件夾的HTTP URL

編譯時未知:

  • 根文件夾的實際內容 - 有多少文件,文件類型,目錄結構。

剛發現它。

根據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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM