2012-02-14 2 views
8

Uso jetty6 in un'applicazione semplice come contenitore di servlet incorporato. Ho deciso di aggiornarlo al Molo 8. In molo 6 è stato abbastanza semplice per avviare il server:Migrazione da Jetty 6 a Jetty 8

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

ma non funziona in Jetty8. Purtroppo non riesco a trovare alcun esempio semplice per questa versione. Impossibile istanziare Contesto con errore

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

perché ora si tratta di una classe interna e anche tale costruttore.

La maggior parte degli esempi sono per il molo 6 e 7. Potresti fornire un semplice esempio su come avviare il servlet al molo 8?

+0

No, non funziona. – NullPointer

+0

La tua domanda è breve sui dettagli. Cosa non funziona? Quale linea causa il problema? C'è una traccia di stack quando provi a correre? – SteveD

+0

Ho lo stesso problema in alcuni dei miei codici Jetty 6. Ho avuto due 'Context's che prendono il server come parametro. In Jetty 8 il pattern sembra essere invertito, in quanto si ha un metodo 'setHandler' nel server (per un singolo gestore). Ma nessuna documentazione sembra indicare come si esegue la migrazione del codice con più di un Contesto collegato allo stesso server. Si tratta di una situazione in cui si intende utilizzare una raccolta di gestori del contesto? – Ash

risposta

1

Il molo è attualmente parte di Eclipse. La documentazione here è per Jetty 7 ma afferma che dovrebbe funzionare per Jetty 8. C'è un esempio di utilizzo di servlet verso la fine della pagina.

+1

Anche questo esempio non funziona. nessuna classe come ServletContextHandler e ServletHolder – NullPointer

+0

Quindi stai facendo qualcosa di sbagliato, come il Jetty 8 Javadoc ha elencato queste classi. – SteveD

+0

Ho aggiunto maven dependency org.eclipse.jetty jetty-server 8.1. Cosa può esserci di sbagliato lì? http://dl.dropbox.com/u/12053587/jetty1.png – NullPointer

13

Questo è il Jetty 8 equivalente al codice. È ancora semplice come prima, tuttavia l'API è leggermente cambiata.

Se questo non funziona, probabilmente hai un problema di classpath - Jetty 8 è separato in molti file jar indipendenti, e ne avrai bisogno un numero. Per lo meno è necessario:

  • molo di continuazione
  • molo-http
  • molo-io
  • molo-sicurezza
  • molo server
  • molo-servlet
  • pontile -util
  • servlet-api

Se si dispone di quei vasi, allora questo codice dovrebbe funzionare bene:

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