2012-02-14 6 views
8

Używam jetty6 w prostej aplikacji jako osadzonego kontenera serwletu. Postanowiłem zaktualizować go do Jetty 8. W molo 6 to dość proste do uruchomienia serwera:Migracja z Jetty 6 do Jetty 8

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

ale to nie działa w Jetty8. Niestety nie mogę znaleźć żadnego prostego przykładu dla tej wersji. Nie można utworzyć instancji kontekstu z błędem

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

ponieważ obecnie jest to klasa wewnętrzna, a także nie ma takiego konstruktora.

Większość przykładów dotyczy pomostów 6 i 7. Czy mógłby Pan podać prosty przykład jak uruchomić serwlet na przystani 8?

+0

Nie, to nie działa. – NullPointer

+0

Twoje pytanie jest mało szczegółowe. Co nie działa? Która linia powoduje problem? Czy istnieje ślad stosu podczas próby uruchomienia? – SteveD

+0

Mam ten sam problem w niektórych z mojego kodu Jetty 6. Miałem dwa "konteksty", które przyjmują serwer jako parametr. W Jetty 8 wzorzec wydaje się być odwrócony, ponieważ na serwerze istnieje metoda 'setHandler' (dla pojedynczego programu obsługi). Jednak żadna z dokumentacji nie wydaje się odpowiadać, w jaki sposób migrować kod z więcej niż jednym kontekstem dołączonym do tego samego serwera. Czy jest to sytuacja, w której zamierzasz używać kolekcji Handler kontekstu? – Ash

Odpowiedz

1

Molo jest obecnie częścią Eclipse. Dokumentacja here dotyczy Jetty 7, ale twierdzi, że powinna działać dla Jetty 8. Istnieje przykład użycia serwletów na końcu strony.

+1

Ten przykład też nie działa. nie ma takich klas jak ServletContextHandler i ServletHolder – NullPointer

+0

Następnie robisz coś złego, ponieważ Javadoc Jetty 8 ma wymienione klasy. – SteveD

+0

Dodałem usługę zależności serwerowej org.eclipse.jetty 8.1. Cóż może być nie tak? http://dl.dropbox.com/u/12053587/jetty1.png – NullPointer

13

To jest odpowiednik Twojego kodu w Jetty 8. Jest wciąż tak samo prosty jak wcześniej, jednak interfejs API nieco się zmienił.

Jeśli to nie działa, prawdopodobnie masz problem z klasą ścieżek - Jetty 8 jest podzielony na wiele niezależnych plików jar i będziesz potrzebować ich wielu. Przynajmniej trzeba:

  • pomost kontynuacji
  • molo HTTP
  • pomost-IO
  • pomost z zabezpieczeniami
  • pomost-serwer
  • pomost-servlet
  • molo -util
  • servlet-api

Jeśli masz te słoiki, to kod powinien działać dobrze:

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(); 
    } 
}