【问题标题】:Jersey Jetty Embedded Won't Read Path Annotation, Error 404Jersey Jetty Embedded 不会读取路径注释,错误 404
【发布时间】:2016-03-03 16:35:19
【问题描述】:

请帮帮我,我快疯了..

所以我尝试在嵌入式码头 (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/ 中调用它,它将从该类的第一个方法返回纯文本 TestClass.class,但如果我添加了任何链接中的更多路径,它只会返回相同的字符串,我无法调用它来显示 TestServlet 类或 TestServlet2 的第二种方法。

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

谢谢...

【问题讨论】:

    标签: java servlets jersey jetty embedded-jetty


    【解决方案1】:

    这里context.addServlet(sh, "/"); 你正在告诉匹配哪个路径来访问servlet。所以你唯一的访问点是/。如果你想访问/之后的任何内容”,你应该添加通配符*。所以直接改成.addServlet(sh, "/*");

    【讨论】:

    • 有效!!我不敢相信这真的是问题所在,因为我很确定我已经尝试过使用通配符,但我之前一定已经改变了一些东西。非常非常感谢
    猜你喜欢
    • 2014-10-29
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多