【发布时间】: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