2012-02-14 11 views
8

임베디드 서블릿 컨테이너로 간단한 응용 프로그램에서 jetty6을 사용합니다.부두 6에서 부두 8로 이동

Server server = new Server(8080); 
Context context = new Context(server, "/", Context.SESSIONS); 
context.addServlet(MyServlet.class, "/communication-service"); 
server.start(); 

있지만 Jetty8에서 작동하지 않습니다 : 나는 서버를 시작하는 데 매우 간단했다 부두 6에서 부두 8 으로 업데이트하기로 결정했다. 불행히도이 버전에 대한 간단한 예제를 찾을 수 없습니다. 지금은 내부 클래스도 그런 생성자 때문에 오류

an enclosing instance that contains 
    org.eclipse.jetty.server.handler.ContextHandler.Context is required 

을 컨텍스트를 인스턴스화 할 수 없습니다.

대부분의 예제는 부두 6 및 7에 대한 것입니다. 부두 8에서 서블릿을 시작하는 방법을 간단한 예제로 제공해 주시겠습니까?

+0

아니, 그것이 작동하지 않습니다. – NullPointer

+0

귀하의 질문에 대한 자세한 내용은 짧습니다. 작동하지 않는 것은 무엇입니까? 문제의 원인은 무엇입니까? 당신이 시도하고 실행할 때 스택 트레이스가 있습니까? – SteveD

+0

제 부두 6 코드에서 같은 문제가 발생했습니다. 서버를 매개 변수로 사용하는 두 개의 '컨텍스트'가 있습니다. Jetty 8에서는 서버에 (단일 핸들러의 경우)'setHandler' 메소드가 있다는 점에서 패턴이 거꾸로 된 것처럼 보입니다. 그러나 동일한 서버에 연결된 둘 이상의 컨텍스트를 사용하여 코드를 마이그레이션하는 방법을 설명하는 설명서는 없습니다. 컨텍스트 핸들러 콜렉션을 사용해야하는 상황입니까? – Ash

답변

1

부두는 요즘 Eclipse의 일부입니다. 문서 here은 Jetty 7 용이지만 Jetty 8에서 작동해야한다고 주장합니다. 페이지 끝 부분에 서블릿을 사용하는 예가 있습니다.

+1

이 예도 작동하지 않습니다. ServletContextHandler 및 ServletHolder와 같은 클래스가 없습니다. – NullPointer

+0

그런 다음 Jetty 8 Javadoc이 이러한 클래스를 나열한대로 잘못된 작업을 수행하고 있습니다. – SteveD

+0

maven 종속성 org.eclipse.jetty jetty-server 8.1을 추가했습니다. 거기에 무엇이 잘못 될 수 있습니까? http://dl.dropbox.com/u/12053587/jetty1.png – NullPointer

13

이것은 귀하의 코드와 동일한 부두 8입니다. 이전과 마찬가지로 여전히 간단하지만 API가 약간 변경되었습니다.

이것이 작동하지 않는다면 클래스 패스 문제가있을 것입니다. Jetty 8은 많은 독립적 인 jar 파일로 분리되어 있기 때문에 여러 개의 jar 파일이 필요할 것입니다. 최소한 다음이 필요합니다

  • 부두 연속
  • 부두-HTTP
  • 부두-IO
  • 부두 보안
  • 부두 서버
  • 부두 - 서블릿
  • 부두 -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(); 
    } 
}