4

別の質問と同様に (cf. Filtering static content Jersey )、Jetty から静的コンテンツを提供したいと考えています。広大なインターネットのいたるところにいくつかの同様の質問が散らばっていますが、それらのほとんどは Guice に関係しておらず、それらは完全に時代遅れです。

Jersey (1.12) と Guice (3) を次のように使用する既存のサービスがありますweb.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
    <display-name>My Service</display-name>

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

    <listener>
        <listener-class>com.example.MyGuiceConfig</listener-class>
    </listener>

    <filter>
        <filter-name>Guice Filter</filter-name>
        <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>Guice Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

MyGuiceConfig次のようになります。

public class MyGuiceConfig extends GuiceServletContextListener
{
    @Override
    protected Injector getInjector()
    {
        return Guice.createInjector(new JerseyServletModule()
        {
            @Override
            protected void configureServlets()
            {
                bind(SomeResource.class);
                bind(SomeDao.class).to(ConcreteSomeDao.class);
                serve("/*").with(GuiceContainer.class);
            }
        });
    }
}

を使用して jetty-maven-plugin を呼び出すmvn jetty:runと、サービスが期待どおりに動作します。ただし、静的コンテンツへのリクエストはすべて 404 を生成します。

サービスに影響を与えずに任意の静的コンテンツを提供するにはどうすればよいですか? (つまり、技術スタックを変更する必要がない最小限の変更でしょうか?)

4

1 に答える 1

4

JerseyServletModule で Jersey が処理する URL フラグメントをどのように構成しましたか? 静的コンテンツと競合しないプレフィックスを指定すると、機能するはずです。

public class Config extends GuiceServletContextListener {

  protected Injector getInjector() {
    return Guice.createInjector(
        new JerseyServletModule() {
          protected void configureServlets() {
            bind(Service.class);
            serve("/services/*").with(GuiceContainer.class);
          }
        });
  }

}

@Singleton
@Path("/service")
@Produces({MediaType.TEXT_PLAIN})
public class Service {

  @GET
  public String run() {
    return "Service running";
  }

}

host:8080/services/service から Servlet.class と webapp に含まれる静的リソースを提供する必要があります...

EDIT Jersey /* サーブレット マッピングにより静的リソースに 404 エラーが発生する を参照して、REST エンドポイントのパスを変更せずにこれを達成する別の方法を確認してください。

于 2012-05-30T01:30:13.313 に答える