[英]Jersey Jetty Embedded Won't Read Path Annotation, Error 404
请帮助我,我在这里疯了。
所以我试图在嵌入式码头(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
有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(“ /”)更改为其他路径,则它将为包括http:// localhost:8080 /的任何URL返回错误404。 我尽了所有我能想到的原因但无济于事的尝试,这真令人沮丧。 我在这里想念什么吗?
谢谢...
这里context.addServlet(sh, "/");
您正在告诉匹配访问servlet的路径。 因此,您唯一的访问点是/
。 如果要访问“ /
之后的任何内容” ,则应添加通配符*
。 因此,只需将其更改为.addServlet(sh, "/*");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.