从Jetty 6迁移到Jetty 8

Nul*_*ter 8 java servlets jetty

我在简单的应用程序中使用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();
Run Code Online (Sandbox Code Playgroud)

但它在Jetty8中不起作用.不幸的是,我找不到这个版本的任何简单示例.无法实例化具有错误的Context

an enclosing instance that contains
    org.eclipse.jetty.server.handler.ContextHandler.Context is required
Run Code Online (Sandbox Code Playgroud)

因为现在它是一个内部类,也没有这样的构造函数.

大多数例子都是针对jetty 6和7.你能提供一个简单的例子来说明如何在jetty 8上启动servlet吗?

Tim*_*Tim 13

这是Jetty 8等同于您的代码.它仍然像以前一样简单,但API略有改变.

如果这不适合你,那么你可能有一个类路径问题 - Jetty 8被分成很多独立的jar文件,你需要它们中的一些.至少你需要:

  • 码头延续
  • 码头-HTTP
  • 码头-IO
  • 码头安全
  • 码头服务器
  • 码头-的servlet
  • 码头-UTIL
  • servlet的API

如果你有这些罐子,那么这段代码应该可以正常工作:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*veD 1

Jetty 现在是 Eclipse 的一部分。这里的文档适用于 Jetty 7,但声称它应该适用于 Jetty 8。页面末尾有一个使用 servlet 的示例。