Встроенная поддержка 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
(просто назвать несколько больших)