Jersey Jetty Embedded 无法读取路径注释,错误 404

Jersey Jetty Embedded Won't Read Path Annotation, Error 404

请大家帮帮我,我快疯了..

所以我尝试在嵌入式码头 (9.2.14.v20151106) 中使用球衣 (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 有 2 个 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/ 中调用它,它将 return 纯文本 TestClass.class 来自那个 class 的第一个方法,但是如果我在 link 中添加更多路径,它将只是 return 相同的字符串,我没办法可以调用它来显示 TestServlet class 或 TestServlet2.

的第二种方法

但是如果将 TestServlet 的路径从 @Path("/") 更改为除此之外的任何路径,它只会 return 任何 URL 的错误 404,包括 http://localhost:8080/。我尝试了所有我能想到的原因,但无济于事,这太令人沮丧了。我在这里错过了什么吗?

谢谢...

此处 context.addServlet(sh, "/"); 您要指定要匹配的访问 servlet 的路径。所以你唯一的访问点是 /。如果您想访问 "anything after /",您应该添加通配符 *。所以只需将其更改为 .addServlet(sh, "/*");