这里似乎有很多问题,但没有人帮助我.... 尝试使用单个Java Class作为运行嵌入式Jetty和Jersey的起始点,以提供Webpages和JSON接口......但是,即使第一步也未能提供多个页面。
这很好用
ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
jerseyServlet.setInitOrder(0);
jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", EntryPoint.class.getCanonicalName());
但添加其他内容失败。如何提供提供不同内容类型的多个页面? 是在单个EntryPoint类中添加内容的唯一解决方案吗?
提前感谢任何暗示需要更改
的内容public class App {
public static void main(String[] args) throws Exception {
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
Server jettyServer = new Server(8080);
jettyServer.setHandler(context);
ServletHolder jerseyServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
jerseyServlet.setInitOrder(0);
jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", EntryPoint.class.getCanonicalName());
ServletHolder helloWorldServlet = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/*");
helloWorldServlet.setInitOrder(1);
helloWorldServlet.setInitParameter("jersey.config.server.provider.classnames", HelloWorldService.class.getCanonicalName());
try {
jettyServer.start();
jettyServer.join();
} catch (Exception e){
System.out.println("Failed running jettyServer with " + e.getMessage());
} finally {
jettyServer.destroy();
}
}
}
答案 0 :(得分:3)
实际上找到了解决方案。 缺少密钥信息是你只需要每一个和所有正确的处理程序,把它们放在一个处理程序列表中,瞧你在那里....
主要是在找到它后从码头文件中取出
public class JettyServer
{
public static void main(String[] args) throws Exception
{
// Create a basic Jetty server object that will listen on port 8080. Note that if you set this to port 0
// then a randomly available port will be assigned that you can either look in the logs for the port,
// or programmatically obtain it for use in test cases.
Server server = new Server(8080);
// Create the ResourceHandler. It is the object that will actually handle the request for a given file. It is
// a Jetty Handler object so it is suitable for chaining with other handlers as you will see in other examples.
ResourceHandler resource_handler = new ResourceHandler();
// Configure the ResourceHandler. Setting the resource base indicates where the files should be served out of.
// In this example it is the current directory but it can be configured to anything that the jvm has access to.
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(new String[]{ "./html/index.html" });
resource_handler.setResourceBase(".");
//Jersey ServletContextHandler
ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
ServletHolder jerseyServlet = servletContextHandler.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/api/*");
jerseyServlet.setInitOrder(0);
jerseyServlet.setInitParameter("jersey.config.server.provider.classnames", EntryPoint.class.getCanonicalName());
// Add the ResourceHandler to the server.
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { resource_handler, servletContextHandler, new DefaultHandler() });
server.setHandler(handlers);
// Start things up! By using the server.join() the server thread will join with the current thread.
// See "http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Thread.html#join()" for more details.
server.start();
server.join();
}
}
帮了我......
答案 1 :(得分:1)
我认为这就是你想要的:
jerseyServlet.setInitParameter("jersey.config.server.provider.classnames",
String.join(",", Arrays.asList(EntryPoint.class.getCanonicalName(),
HelloWorldService.class.getCanonicalName())));
答案 2 :(得分:0)
您没有将ServletHolder
个实例添加到ServletContextHandler
。
这两个servlet也有相同的/*
路径,我不确定但是这可能不起作用,尝试归因于不同的路径并查看它是否有效。
执行:
context.addServlet(jerseyServlet,“/ jersey”);
context.addServlet(helloWorldServlet,“/ hello”);