我在简单的应用程序中使用jetty6作为嵌入式servlet容器。我决定将它更新到Jetty 8。 在jetty 6中,启动服务器非常简单:
Server server = new Server(8080);
Context context = new Context(server, "/", Context.SESSIONS);
context.addServlet(MyServlet.class, "/communication-service");
server.start();
但它在Jetty8中不起作用。 不幸的是,我找不到这个版本的任何简单示例。无法实例化带有错误的上下文
an enclosing instance that contains
org.eclipse.jetty.server.handler.ContextHandler.Context is required
因为现在它是一个内部类,也没有这样的构造函数。
大多数例子都是6号和7号码头。 能否请您提供如何在jetty 8启动servlet的简单示例?
答案 0 :(得分:13)
这是与您的代码等效的Jetty 8。它仍然像以前一样简单,但API略有改变。
如果这对您不起作用,那么您可能会遇到类路径问题 - Jetty 8被分成许多独立的jar文件,您将需要其中的一些。至少你需要:
如果你有这些罐子,那么这段代码应该可以正常工作:
package test;
import java.io.IOException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.servlet.ServletContextHandler;
public class Jetty8Server {
public static class MyServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("text/plain");
response.getWriter().write(getClass().getName() + " - OK");
}
}
public static void main(String[] args) throws Exception {
Server server = new Server(8080);
ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS);
handler.setContextPath("/"); // technically not required, as "/" is the default
handler.addServlet(MyServlet.class, "/communication-service");
server.setHandler(handler);
server.start();
}
}
答案 1 :(得分:1)
Jetty现在是Eclipse的一部分。文档here适用于Jetty 7,但声称它应该适用于Jetty 8.这是一个在页面末尾使用servlet的示例。