Jersey Jetty Embedded不会读取路径注释,错误404

时间:2015-11-30 05:18:35

标签: java servlets jersey jetty embedded-jetty

请帮助我们,我在这里疯了......

所以我试图在嵌入式码头(9.2.14.v20151106)中使用jersey(2.22.1),使用非常简单的主应用程序:

public class MainApp{
    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);
        ServletContextHandler context = new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);

        ServletHolder sh = new ServletHolder(ServletContainer.class);
            sh.setInitParameter(ServerProperties.PROVIDER_PACKAGES, "etc.mypackage");
            sh.setInitParameter(ServerProperties.PROVIDER_SCANNING_RECURSIVE, "true");
            sh.setInitParameter(ServerProperties.TRACING, "ALL");
            sh.setInitParameter("jersey.config.server.tracing", "ALL");
            sh.setInitOrder(1);
            sh.setInitParameter("com.sun.jersey.api.json.POJOMappingFeature", "true");
        context.addServlet(sh, "/");
        server.start();
        server.join();
    }
}

在这里不起作用的一件事是,即使我在参数中设置了球衣追踪也似乎不起作用。

我在 etc.mypackage.servlets

有两个servlet
@Path("/")
public class TestServlet {
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String testString){ return "TestServlet.class; }

    @Path("test1")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getString(){
        String test = "TestServlet.class second method called";
        return test;
    }
}

和另一个具有相同功能但具有不同路径和调试字符串:

@Path("/2")
public class TestServlet2 {
    @Path("/test1")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String testString){ return "TestServlet2.class; }

    @Path("test2")
    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getString(){
        String test = "TestServlet2.class second method called";
        return test;
    }
}

这些代码会运行,如果在 http://localhost:8080/ 中调用它,它将从该类的第一个方法返回纯文本 TestClass.class ,但如果我在链接中添加了更多路径,它将只返回相同的字符串,我无法调用它来显示 TestServlet 类或 TestServlet2 的第二种方法。< / p>

但是,如果将 TestServlet 的路径从 @Path(“/”)更改为除此之外的任何内容,则只返回包含<的任何URL的错误404强> http://localhost:8080/ 即可。我尝试了一切我能想到的原因但无济于事,而且令人沮丧。我在这里错过了什么吗?

...谢谢

1 个答案:

答案 0 :(得分:2)

这里context.addServlet(sh, "/");告诉你要访问servlet的路径是什么。因此,您拥有的唯一接入点是/。如果您想要访问&#34; /&#34; 之后的任何内容,则应添加通配符*。所以只需将其更改为.addServlet(sh, "/*");