未配置嵌入式jetty webserver JSP支持

我目前将Jetty嵌入到应用程序中。 Jetty服务器启动,我可以看到项目中的文件,但是当我尝试查看JSP文件时,它说

HTTP错误500
访问/web/index.jsp时出现问题。 原因:
未配置JSP支持

我在这里阅读了一些其他post和一些在线教程,其中大部分都是关于start.jar和maven的。 我没有使用其中任何一种我只是使用eclipse中内置的东西。

我有三节课

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

我从来没有试过使用嵌入式docker,所以我可能会遗漏一些东西。 我在网上遵循了这个教程,但它似乎对他们有效。

任何帮助都会很棒,谢谢!

如果该代码段表示您初始化Web应用程序的方式,那么您将缺少许多 JSP初始化步骤。

Jetty项目生成了一个示例项目,展示了如何在嵌入式Jetty中使用JSP

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

注意……

  • 所需的ClassLoader类型
  • scratchDir声明
  • ServletContainerInitializer设置
  • Jsp Servlet Holder和映射
  • InstanceManager

(仅举几个大的)

管理解决这个问题。

我所要做的就是创建一个WAR,然后将以下代码行添加到WebBuilderContext类中。

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

我正在为我的构建使用ANT,所以我每次构建时都添加了一个新的WAR目标来生成WAR文件。

希望这有助于其他人。