21

2.0 リリースで Jersey の URL パターンを /* にマップすると、すべての静的リソース (/index.html など) で 404 が発生します。私のweb.xmlには次のものがあります:

<servlet>
  <servlet-name>JerseyApp</servlet-name>
  <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>org.frog.jump.JerseyApp</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>JerseyApp</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

同じ URL パターンで静的コンテンツを提供するにはどうすればよいですか?

4

2 に答える 2

28

Jersey 1.x では、Jersey サーブレットからフィルターに切り替えると、同じパスから静的コンテンツを提供できるはずです。指定したサーブレット 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>

編集: Jersey 2.x でも同じことができるはずですが、プロパティの名前が変更されています。次のようなものを試してください:

<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>

また、POM には以下が含まれている必要があります。

<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>

<!-- see. https://eclipse-ee4j.github.io/jersey/ for latest version -->

css、jsp などを提供する場合は、init-param の正規表現をカスタマイズする必要があります。

もう 1 つの適切なオプションは、サービスのバージョン管理されたパス ("/v1/*") を使用することです。これにより、静的コンテンツはフィルターなしで機能します。

于 2012-09-14T16:54:07.817 に答える