首頁 >Java >java教程 >如何使用 Jersey 的通用 URL 映射提供靜態內容,同時避免 404 錯誤?

如何使用 Jersey 的通用 URL 映射提供靜態內容,同時避免 404 錯誤?

Patricia Arquette
Patricia Arquette原創
2024-10-29 01:45:30616瀏覽

How to Serve Static Content with Jersey's Universal URL Mapping While Avoiding 404 Errors?

使用Jersey 的通用URL 映射提供靜態內容

Jersey 在其映射中廣泛使用/* URL 模式有時會導致404 錯誤訪問HTML 檔案等靜態資源。此問題源自於映射與 Web 容器中靜態內容的預設處理衝突。

解決Jersey 1.x 中的衝突

服務如果要在Jersey 1.x 中使用/* 映射來處理靜態內容,建議從Jersey servlet 切換到過濾器。這可以透過更新web.xml 配置來實現,如下所示:

<code class="xml"><filter>
  <filter-name>Jersey Filter</filter-name>
  <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>org.frog.jump.JerseyApp</param-value>
  </init-param>
  <init-param>
    <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
    <param-value>/.*html</param-value>
  </init-param>
</filter> 
<filter-mapping>
  <filter-name>Jersey Filter</filter-name>
  <url-pattern>/*</url-pattern> 
</filter-mapping></code>

此配置將允許Jersey 根據WebPageContentRegex 模式(在本例中為/.*html)過濾請求,從而使靜態資源能夠

解決Jersey 2.x 中的衝突

Jersey 2.x 的解決方案與1.x 類似,略有修改由於屬性名稱的更改。以下web.xml 配置應該可以解決該問題:

<code class="xml"><filter>
  <filter-name>Jersey Filter</filter-name>
  <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
  <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>org.example</param-value>
  </init-param>
  <init-param>
    <param-name>jersey.config.servlet.filter.staticContentRegex</param-name>
    <param-value>/.*html</param-value>
  </init-param>
</filter> 
<filter-mapping>
  <filter-name>Jersey Filter</filter-name>
  <url-pattern>/*</url-pattern> 
</filter-mapping></code>

此外,POM 檔案必須包含以下依賴項:

<code class="xml"><dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-server</artifactId>
  <version>${jersey2.version}</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet-core</artifactId>
  <version>${jersey2.version}</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency></code>

可以自訂staticContentRegex 參數以符合不同的檔案根據需要擴展。

作為使用過濾器的替代方法,另一種方法是為服務定義版本化路徑,例如“/v1/*”,允許在不需要過濾器的情況下提供靜態內容。

以上是如何使用 Jersey 的通用 URL 映射提供靜態內容,同時避免 404 錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn