2012-09-14 11 views
19

Jerseyのurl-patternを2.0リリースでマップすると、すべての静的リソース(例:/index.html)に対して404が発生します。私のweb.xmlは次のものを持っています:Jersey/*サーブレットマッピングによって静的リソースの404エラーが発生する

<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パターンで静的コンテンツを提供しますか?

答えて

24

Jersey 1.xでは、Jerseyサーブレットからフィルタに切り替えると、同じパスから静的コンテンツを配信できます。あなたが同じことを行うことができるはずですが、プロパティの名前が変更されたジャージー2.xでは:EDITを

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

:あなたが指定したとに切り替えましたサーブレットXMLをドロップします。

など、JSP、あなたはCSSにサービスを提供する場合のinit-のparamで正規表現をカスタマイズする必要があります

<dependency> 
    <groupId>org.glassfish.jersey.core</groupId> 
    <artifactId>jersey-server</artifactId> 
    <version>2.0-m07-1</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 

<dependency> 
    <groupId>org.glassfish.jersey.containers</groupId> 
    <artifactId>jersey-container-servlet-core</artifactId> 
    <version>2.0-m07-1</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 

を:ような何か試してみてください:

<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を含める必要があります

サービスのバージョン管理されたパス( "/ v1/*")を使用することもできます。静的コンテンツはフィルタなしで機能します。

+2

をforwardOn404フィルタを追加してはなりません。 com.sun.jersey.spi.container.servlet.ServletContainerはジャージ2.Xの一部ではありません。 – FUD

+0

2.xオプションを含めるように答えを更新しました。パッケージが変更されました。 – condit

+1

実際には関係ないかもしれませんが、これらのパラメータを「プログラムで」/注釈/プロパティを設定することが可能かどうかは不思議です。 JEE6のように思えますが、これは不可能です。 JEE7の場合、Application.getProperites()。put(key、value)? – icyerasor

9

この例で行われたよう私が間違っていないよ場合は、もはや2.xのバージョンでこれを行うことができ、この問題に

<filter> 
     <filter-name>org.glassfish.jersey.examples.bookstore.webapp.MyApplication</filter-name> 
     <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>org.glassfish.jersey.examples.bookstore.webapp.MyApplication</param-value> 
     </init-param> 
     <!-- pass to next filter if Jersey/App returns 404 --> 
     <init-param> 
      <param-name>jersey.config.servlet.filter.forwardOn404</param-name> 
      <param-value>true</param-value> 
     </init-param> 
    </filter> 

に対処するためにhttps://github.com/jersey/jersey/blob/2.17/examples/bookstore-webapp/src/main/webapp/WEB-INF/web.xml

+3

Jersey 1.xの場合、そのcom.sun.jersey.config.feature.FilterForwardOn404' –

関連する問題