使用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中文網其他相關文章!