Jetty + Guice + Jersey在访问资源时提供404

时间:2013-07-23 09:21:43

标签: java rest jersey jetty guice

我已经看到了类似的问题和解决方案,但仍然无法找到我的解决方案。

我以编程方式启动Jetty服务器并使用Guice将Jersey挂钩。当我尝试访问我的Jersey资源时,我得到404。

public class TestService {

    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);

        ServletContextHandler context = new ServletContextHandler();
        context.setContextPath("/");
        server.setHandler(context);

        final Injector injector = Guice.createInjector(new MyServletModule());
        FilterHolder guiceFilter = new FilterHolder(injector.getInstance(GuiceFilter.class));
        context.addFilter(guiceFilter, "/*", EnumSet.allOf(DispatcherType.class));
        context.addEventListener(new GuiceServletContextListener() {
            @Override
            protected Injector getInjector() {
                return injector;
            }
        });

        server.start();
        server.join();
    }
}

class MyServletModule extends ServletModule {
    @Override
    protected void configureServlets() {
        bind(GuiceContainer.class);

        Map<String, String> parameters = Maps.newHashMap();
        parameters.put(PackagesResourceConfig.PROPERTY_PACKAGES, "com.test");
        parameters.put(JSONConfiguration.FEATURE_POJO_MAPPING, "true");
        serve("/*").with(GuiceContainer.class, parameters);
    }
}

我的资源:

@Singleton
@Path("/")
public class MyResource {

    @GET
    public String sayhello() {
        return "hello";
    }
}

我可以看到资源正在日志中加载:

INFO: Root resource classes found:
  class com.test.MyResource

但我在加载404时得到http://localhost:8080/。我还尝试将资源映射到其他网址fx /web,但它仍然是404

完整日志:

2013-07-23 11:06:07,993 [main] DEBUG org.eclipse.jetty.util.log  - Logging to org.slf4j.impl.Log4jLoggerAdapter(org.eclipse.jetty.util.log) via org.eclipse.jetty.util.log.Slf4jLog
2013-07-23 11:06:08,114 [main] DEBUG org.eclipse.jetty.util.component.Container  - Container org.eclipse.jetty.server.Server@18fef3d + SelectChannelConnector@0.0.0.0:8080 as connector
2013-07-23 11:06:08,131 [main] DEBUG org.eclipse.jetty.util.component.Container  - Container org.eclipse.jetty.server.Server@18fef3d + o.e.j.s.ServletContextHandler{/,null} as handler
2013-07-23 11:06:08,425 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - filterNameMap={com.google.inject.servlet.GuiceFilter-1346515=com.google.inject.servlet.GuiceFilter-1346515}
2013-07-23 11:06:08,426 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - pathFilters=[[/*]/[]==31=>com.google.inject.servlet.GuiceFilter-1346515]
2013-07-23 11:06:08,426 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - servletFilterMap={}
2013-07-23 11:06:08,426 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - servletPathMap=null
2013-07-23 11:06:08,427 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - servletNameMap={}
2013-07-23 11:06:08,429 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - starting org.eclipse.jetty.server.Server@18fef3d
2013-07-23 11:06:08,429 [main] INFO  org.eclipse.jetty.server.Server  - jetty-8.1.0.RC5
2013-07-23 11:06:08,443 [main] DEBUG org.eclipse.jetty.util.component.Container  - Container org.eclipse.jetty.server.Server@18fef3d + qtp22355327{8<=0<=0/254,-1} as threadpool
2013-07-23 11:06:08,444 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - starting o.e.j.s.ServletContextHandler{/,null}
2013-07-23 11:06:08,453 [main] DEBUG org.eclipse.jetty.util.component.Container  - Container org.eclipse.jetty.servlet.ServletHandler@128f6ee + com.google.inject.servlet.GuiceFilter-1346515 as filter
2013-07-23 11:06:08,453 [main] DEBUG org.eclipse.jetty.util.component.Container  - Container org.eclipse.jetty.servlet.ServletHandler@128f6ee + [/*]/[]==31=>com.google.inject.servlet.GuiceFilter-1346515 as filterMapping
2013-07-23 11:06:08,454 [main] DEBUG org.eclipse.jetty.util.component.Container  - Container o.e.j.s.ServletContextHandler{/,null} + org.eclipse.jetty.servlet.ServletHandler@128f6ee as handler
2013-07-23 11:06:08,454 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - starting org.eclipse.jetty.servlet.ServletHandler@128f6ee
2013-07-23 11:06:08,454 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - filterNameMap={com.google.inject.servlet.GuiceFilter-1346515=com.google.inject.servlet.GuiceFilter-1346515}
2013-07-23 11:06:08,454 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - pathFilters=[[/*]/[]==31=>com.google.inject.servlet.GuiceFilter-1346515]
2013-07-23 11:06:08,454 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - servletFilterMap={}
2013-07-23 11:06:08,454 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - servletPathMap=null
2013-07-23 11:06:08,454 [main] DEBUG org.eclipse.jetty.servlet.ServletHandler  - servletNameMap={}
2013-07-23 11:06:08,454 [main] DEBUG org.eclipse.jetty.server.handler.AbstractHandler  - starting org.eclipse.jetty.servlet.ServletHandler@128f6ee
2013-07-23 11:06:08,454 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - STARTED org.eclipse.jetty.servlet.ServletHandler@128f6ee
2013-07-23 11:06:08,455 [main] DEBUG org.eclipse.jetty.server.handler.AbstractHandler  - starting o.e.j.s.ServletContextHandler{/,null}
2013-07-23 11:06:08,455 [main] INFO  org.eclipse.jetty.server.handler.ContextHandler  - started o.e.j.s.ServletContextHandler{/,null}
2013-07-23 11:06:08,455 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - starting com.google.inject.servlet.GuiceFilter-1346515
2013-jul-23 11:06:08 com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
  com.test
2013-jul-23 11:06:08 com.sun.jersey.api.core.ScanningResourceConfig logClasses
INFO: Root resource classes found:
  class com.test.MyResource
2013-jul-23 11:06:08 com.sun.jersey.api.core.ScanningResourceConfig init
INFO: No provider classes found.
2013-jul-23 11:06:08 com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.12 02/15/2012 04:51 PM'
2013-07-23 11:06:09,219 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - STARTED com.google.inject.servlet.GuiceFilter-1346515
2013-07-23 11:06:09,219 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - STARTED o.e.j.s.ServletContextHandler{/,null}
2013-07-23 11:06:09,219 [main] DEBUG org.eclipse.jetty.server.handler.AbstractHandler  - starting org.eclipse.jetty.server.Server@18fef3d
2013-07-23 11:06:09,219 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - starting qtp22355327{8<=0<=0/254,-1}
2013-07-23 11:06:09,221 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - STARTED qtp22355327{8<=1<=8/254,0}
2013-07-23 11:06:09,222 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - starting SelectChannelConnector@0.0.0.0:8080
2013-07-23 11:06:09,258 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - starting null/null
2013-07-23 11:06:09,260 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - STARTED PooledBuffers [0/1024@6144,0/1024@16384,0/1024@-]/PooledBuffers [0/1024@6144,0/1024@32768,0/1024@-]
2013-07-23 11:06:09,260 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - starting org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager@20c906
2013-07-23 11:06:09,279 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - STARTED org.eclipse.jetty.server.nio.SelectChannelConnector$ConnectorSelectorManager@20c906
2013-07-23 11:06:09,279 [qtp22355327-10 Selector0] DEBUG org.eclipse.jetty.io.nio  - Starting Thread[qtp22355327-10 Selector0,5,main] on org.eclipse.jetty.io.nio.SelectorManager$1@10c3a08
2013-07-23 11:06:09,280 [main] INFO  org.eclipse.jetty.server.AbstractConnector  - Started SelectChannelConnector@0.0.0.0:8080
2013-07-23 11:06:09,280 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - STARTED SelectChannelConnector@0.0.0.0:8080
2013-07-23 11:06:09,280 [main] DEBUG org.eclipse.jetty.util.component.AbstractLifeCycle  - STARTED org.eclipse.jetty.server.Server@18fef3d
2013-07-23 11:06:16,602 [qtp22355327-10 Selector0] DEBUG org.eclipse.jetty.io.nio  - created SCEP@cc7439{l(/127.0.0.1:61292)<->r(/127.0.0.1:8080),d=false,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=0}-{AsyncHttpConnection@e2892b,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-14,l=0,c=0},r=0}
2013-07-23 11:06:16,604 [qtp22355327-16] DEBUG org.eclipse.jetty.http.HttpParser  - filled 0/0
2013-07-23 11:06:16,604 [qtp22355327-10 Selector0] DEBUG org.eclipse.jetty.io.nio  - created SCEP@1dd9891{l(/127.0.0.1:61293)<->r(/127.0.0.1:8080),d=false,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=0}-{AsyncHttpConnection@14b6b02,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-14,l=0,c=0},r=0}
2013-07-23 11:06:16,604 [qtp22355327-14] DEBUG org.eclipse.jetty.http.HttpParser  - filled 0/0
2013-07-23 11:06:16,634 [qtp22355327-17] DEBUG org.eclipse.jetty.http.HttpParser  - filled 328/328
2013-07-23 11:06:16,641 [qtp22355327-17 - /] DEBUG org.eclipse.jetty.server.Server  - REQUEST / on AsyncHttpConnection@e2892b,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=14,c=0},r=1
2013-07-23 11:06:16,641 [qtp22355327-17 - /] DEBUG org.eclipse.jetty.server.handler.ContextHandler  - scope null||/ @ o.e.j.s.ServletContextHandler{/,null}
2013-07-23 11:06:16,641 [qtp22355327-17 - /] DEBUG org.eclipse.jetty.server.handler.ContextHandler  - context=||/ @ o.e.j.s.ServletContextHandler{/,null}
2013-07-23 11:06:16,641 [qtp22355327-17 - /] DEBUG org.eclipse.jetty.servlet.ServletHandler  - servlet ||/ -> null
2013-07-23 11:06:16,641 [qtp22355327-17 - /] DEBUG org.eclipse.jetty.servlet.ServletHandler  - chain=null
2013-07-23 11:06:16,641 [qtp22355327-17 - /] DEBUG org.eclipse.jetty.servlet.ServletHandler  - Not Found /
2013-07-23 11:06:16,647 [qtp22355327-17 - /] DEBUG org.eclipse.jetty.server.Server  - RESPONSE /  404
2013-07-23 11:06:16,651 [qtp22355327-17] DEBUG org.eclipse.jetty.http.HttpParser  - filled 0/0
2013-07-23 11:06:16,769 [qtp22355327-11] DEBUG org.eclipse.jetty.http.HttpParser  - filled 279/279
2013-07-23 11:06:16,770 [qtp22355327-11 - /favicon.ico] DEBUG org.eclipse.jetty.server.Server  - REQUEST /favicon.ico on AsyncHttpConnection@e2892b,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=14,c=0},r=2
2013-07-23 11:06:16,770 [qtp22355327-11 - /favicon.ico] DEBUG org.eclipse.jetty.server.handler.ContextHandler  - scope null||/favicon.ico @ o.e.j.s.ServletContextHandler{/,null}
2013-07-23 11:06:16,771 [qtp22355327-11 - /favicon.ico] DEBUG org.eclipse.jetty.server.handler.ContextHandler  - context=||/favicon.ico @ o.e.j.s.ServletContextHandler{/,null}
2013-07-23 11:06:16,771 [qtp22355327-11 - /favicon.ico] DEBUG org.eclipse.jetty.servlet.ServletHandler  - servlet ||/favicon.ico -> null
2013-07-23 11:06:16,771 [qtp22355327-11 - /favicon.ico] DEBUG org.eclipse.jetty.servlet.ServletHandler  - chain=null
2013-07-23 11:06:16,772 [qtp22355327-11 - /favicon.ico] DEBUG org.eclipse.jetty.servlet.ServletHandler  - Not Found /favicon.ico
2013-07-23 11:06:16,774 [qtp22355327-11 - /favicon.ico] DEBUG org.eclipse.jetty.server.Server  - RESPONSE /favicon.ico  404
2013-07-23 11:06:16,775 [qtp22355327-11] DEBUG org.eclipse.jetty.http.HttpParser  - filled 0/0
2013-07-23 11:06:26,564 [qtp22355327-15] DEBUG org.eclipse.jetty.io.nio.ChannelEndPoint  - ishut SCEP@1dd9891{l(/127.0.0.1:61293)<->r(/127.0.0.1:8080),d=true,open=true,ishut=false,oshut=false,rb=false,wb=false,w=true,i=1r}-{AsyncHttpConnection@14b6b02,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-14,l=0,c=0},r=0}
2013-07-23 11:06:26,564 [qtp22355327-15] DEBUG org.eclipse.jetty.http.HttpParser  - filled -1/0
2013-07-23 11:06:26,566 [qtp22355327-15] DEBUG org.eclipse.jetty.io.nio.ChannelEndPoint  - close SCEP@1dd9891{l(/127.0.0.1:61293)<->r(/127.0.0.1:8080),d=true,open=true,ishut=true,oshut=false,rb=false,wb=false,w=true,i=1r}-{AsyncHttpConnection@14b6b02,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=0,l=0,c=0},r=0}
2013-07-23 11:06:26,568 [qtp22355327-10 Selector0] DEBUG org.eclipse.jetty.io.nio  - destroyEndPoint SCEP@1dd9891{l(/127.0.0.1:61293)<->r(/127.0.0.1:8080),d=true,open=false,ishut=true,oshut=true,rb=false,wb=false,w=true,i=1!}-{AsyncHttpConnection@14b6b02,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=0,l=0,c=0},r=0}
2013-07-23 11:06:26,572 [qtp22355327-10 Selector0] DEBUG org.eclipse.jetty.server.AbstractHttpConnection  - closed AsyncHttpConnection@14b6b02,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=0,l=0,c=0},r=0

1 个答案:

答案 0 :(得分:2)

您需要一个默认的servlet。尝试添加

context.addServlet(DefaultServlet.class, "/");

添加Guice过滤器后。