2012-02-14 21 views
8

Uso jetty6 en una aplicación simple como contenedor de servlet incorporado. Decidí actualizarlo en Jetty 8. En muelle 6 que era bastante simple para iniciar el servidor:Migración de 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(); 

pero no funciona en Jetty8. Desafortunadamente no puedo encontrar ningún ejemplo simple para esta versión. No se puede crear una instancia del Contexto con el error

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

porque ahora es una clase interna y tampoco es un constructor de este tipo.

La mayoría de los ejemplos son para embarcadero 6 y 7. ¿Podría proporcionar un ejemplo simple de cómo iniciar el servlet en el embarcadero 8?

+0

No, no funciona. – NullPointer

+0

Su pregunta es breve en los detalles. ¿Qué no funciona? ¿Qué línea causa el problema? ¿Hay un rastro de pila cuando intentas ejecutar? – SteveD

+0

Tengo el mismo problema en algunos de mis códigos Jetty 6. Tenía dos 'Context's que toman el servidor como parámetro. En Jetty 8, el patrón parece estar invertido, ya que tiene un método 'setHandler' en el servidor (para un solo manejador). Pero ninguno de los documentos parece abordar la forma en que se migra el código con más de un contexto adjunto al mismo servidor. ¿Es esta una situación en la que debes usar una Colección de Manejador de contexto? – Ash

Respuesta

1

Jetty es hoy en día parte de Eclipse. La documentación here es para Jetty 7 pero afirma que debería funcionar para Jetty 8. Hay un ejemplo de uso de servlets hacia el final de la página.

+1

Este ejemplo tampoco funciona. no hay clases como ServletContextHandler y ServletHolder – NullPointer

+0

Entonces estás haciendo algo mal ya que Jetty 8 Javadoc tiene estas clases en la lista. – SteveD

+0

Agregué maven dependency org.eclipse.jetty jetty-server 8.1. ¿Qué puede estar mal allí? http://dl.dropbox.com/u/12053587/jetty1.png – NullPointer

13

Este es el Jetty 8 equivalente a su código. Todavía es tan simple como lo era antes, sin embargo, la API ha cambiado un poco.

Si esto no funciona para usted, entonces probablemente tenga un problema de classpath: Jetty 8 está separado en una gran cantidad de archivos jar independientes, y necesitará un número de ellos. Por lo menos se necesita:

  • embarcadero de continuación de
  • embarcadero-http
  • embarcadero-io
  • muelle de una seguridad
  • embarcadero-servidor
  • embarcadero en servlet
  • embarcadero -util
  • servlet-api

Si tiene esos frascos, a continuación, el código debería funcionar bien:

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