4

与另一个问题(参见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-pluginmvn jetty:run时,我的服务按预期工作。但是,任何对静态内容的请求都会产生 404。

如何在不影响服务的情况下提供任意静态内容?(即不需要我更改技术堆栈的最小更改?)

4

1 回答 1

4

您如何配置 Jersey 将在您的 JerseyServletModule 中处理的 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 中包含的静态资源提供服务...

编辑Jersey /* servlet 映射会导致静态资源出现 404 错误,这是另一种在不更改 REST 端点路径的情况下完成此操作的方法。

于 2012-05-30T01:30:13.313 回答