La compatibilidad con JSP del servidor web Jetty integrado no está configurada

Resuelto FMC asked hace 9 años • 2 respuestas

Actualmente tengo Jetty integrado en una aplicación. El servidor Jetty se inicia y puedo ver los archivos del proyecto, sin embargo, cuando intento ver un archivo JSP, dice

ERROR HTTP 500
Problema al acceder a /web/index.jsp. Motivo:
compatibilidad con JSP no configurada

He leído algunas otras publicaciones aquí y algunos tutoriales en línea y la mayoría habla sobre start.jar y maven. No estoy usando ninguno de los dos, solo estoy usando lo que está integrado en eclipse.

tengo tres clases

Generador de contexto de aplicaciones

public class AppContextBuilder
{

private WebAppContext webAppContext;


public WebAppContext buildWebAppContext()
{
    webAppContext = new WebAppContext();
    webAppContext.setDescriptor( webAppContext + "/WEB-INF/web.xml" );
    webAppContext.setResourceBase( "." );
    webAppContext.setContextPath( "/" );
    return webAppContext;
}

JettyServer

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;

public class JettyServer
{

private Server server;


public JettyServer()
{
    this( 8585 );
}


public JettyServer(Integer runningPort)
{
    server = new Server( runningPort );
}


public void setHandler( ContextHandlerCollection contexts )
{
    server.setHandler( contexts );
}


public void start() throws Exception
{
    server.start();
}


public void stop() throws Exception
{
    server.stop();
    server.join();
}


public boolean isStarted()
{
    return server.isStarted();
}


public boolean isStopped()
{
    return server.isStopped();
}
}

Control del servidor

import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.handler.ContextHandlerCollection;

public class ServerControl
{

public static void main( String[] args )
{
    Logger.getLogger().logMethodEntryMessage();

    ContextHandlerCollection contexts = new ContextHandlerCollection();

    contexts.setHandlers( new Handler[]
    { new AppContextBuilder().buildWebAppContext() } );

    final JettyServer jettyServer = new JettyServer();
    jettyServer.setHandler( contexts );

    start( jettyServer );

    Logger.getLogger().logMethodExitMessage();        
}


private static void start( final JettyServer jettyServer )
{
    Logger.getLogger().logMethodEntryMessage();

    try
    {
        jettyServer.start();
        Logger.getLogger().debug( "Jetty server started!" );
    }
    catch( Exception e )
    {
        Logger.getLogger().error( e.getMessage() );
    }

    Logger.getLogger().logMethodExitMessage();
}

}

Nunca antes había intentado utilizar el embarcadero integrado, por lo que es posible que me esté perdiendo algo. Sin embargo , seguí este tutorial en línea y parece funcionar para ellos.

¡Cualquier ayuda sería genial, gracias!

FMC avatar Feb 12 '15 23:02 FMC
Aceptado

Logré resolver esto.

Todo lo que tuve que hacer fue crear un WAR y luego agregar las siguientes líneas de código a la clase WebBuilderContext.

webAppContext.setExtractWAR( true );    
webAppContext.setWar( "path/to/your/war/file/here" );

Estoy usando ANT para mis compilaciones, así que agregué un nuevo objetivo WAR para generar el archivo WAR cada vez que construyo.

Espero que esto ayude a alguien más.

FMC avatar Feb 13 '2015 15:02 FMC