2012-02-14 69 views
8

我在简单的应用程序中使用jetty6作为嵌入式servlet容器。我决定把它更新到码头8 在码头6这是非常简单的启动服务器:从码头6移植到码头8

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 能否请您提供简单的例子,如何在码头8开始的servlet?

+0

不,这是行不通的。 – NullPointer 2012-02-14 15:05:23

+0

您的问题缺乏细节。什么不行?哪一行导致问题?当您尝试并运行时是否存在堆栈跟踪? – SteveD 2012-02-14 15:25:04

+0

我在一些Jetty 6代码中遇到了同样的问题。我有两个'Context'将服务器作为参数。在Jetty 8中,该模式似乎是倒置的,因为在服务器中有一个“setHandler”方法(对于单个处理程序)。但是,这些文档似乎都没有解决如何使用连接到同一服务器的多个Context进行代码迁移。这是你打算使用Context Handler Collection的情况吗? – Ash 2012-09-04 08:00:22

回答

1

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

+1

这个例子不起作用。没有像ServletContextHandler和ServletHolder这样的类 – NullPointer 2012-02-14 15:37:55

+0

然后你做错了,因为Jetty 8 Javadoc列出了这些类。 – SteveD 2012-02-15 09:52:33

+0

我已经添加了maven dependency org.eclipse.jetty jetty-server 8.1。那里有什么可能是错的? http://dl.dropbox.com/u/12053587/jetty1.png – NullPointer 2012-02-15 10:04:37

13

这是与您的代码相当的Jetty 8。它仍然像以前一样简单,但API略有改变。

如果这不是为你工作,那么你可能有一个类路径问题 - 码头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(); 
    } 
}