Встроенная поддержка JSP веб-сервера Jetty не настроена

В настоящее время у меня есть Jetty, встроенный в приложение. Сервер Jetty запускается, и я вижу файлы в проекте, однако, когда я пытаюсь просмотреть файл JSP, он говорит

HTTP ERROR 500
Проблема с доступом к /web/index.jsp. Причина:
Поддержка JSP не настроена

Я прочитал некоторые другие посты здесь и некоторые учебники в Интернете, и большинство из них говорят о start.jar и maven. Я не использую ни одного из тех, кого я использую, то, что встроено в затмение.

У меня три класса

AppContextBuilder

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

ServerControl

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

}

Я никогда не пытался использовать встроенный причал, поэтому я могу что-то упустить. Я следовал этому уроку онлайн, хотя, похоже, он работает для них.

Любая помощь будет отличной, спасибо!

2 ответа

Решение

Удалось решить это.

Все, что мне нужно было сделать, это создать WAR, а затем добавить следующие строки кода в класс WebBuilderContext.

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

Я использую ANT для своих сборок, поэтому просто добавляю новую цель WAR, чтобы генерировать файл WAR при каждой сборке.

Надеюсь, это поможет кому-то еще.

Если этот фрагмент кода представляет собой то, как вы инициализируете свое веб-приложение, то вам не хватает многих шагов инициализации JSP.

В качестве примера проекта Jetty Project показано, как использовать JSP со встроенным Jetty в

https://github.com/jetty-project/embedded-jetty-jsp

Обрати внимание на...

  • Требуемый тип ClassLoader
  • Декларация scratchDir
  • Настройка ServletContainerInitializer
  • Держатель сервлета JSP и сопоставления
  • InstanceManager

(просто назвать несколько больших)

Другие вопросы по тегам