使用嵌入式jetty服务器运行Web应用程序(WAR)

我做了一个非常基本的Web应用程序,只有一个html页面。 我把它作为战争出口了。

现在我创建了一个嵌入式jetty服务器。

public class SimplestServer { public static void main(String[] args) throws Exception{ Server server = new Server(8000); WebAppContext webapp = new WebAppContext(); webapp.setContextPath("/"); webapp.setWar("C:\\Users\\User\\Desktop\\jetty\\JettyWar.war"); server.setHandler(webapp); server.start(); server.join(); } 

}

我为这个嵌入式服务器创建了一个jar。 但是当我尝试通过嵌入式服务器运行我的Web应用程序时,我收到以下错误。

C:\ Users \ User> java -jar C:\ Users \ User \ Desktop \ jetty \ webServer.jar

C:\ Users \ User> java -jar C:\ Users \ User \ Desktop \ jetty \ webServer.jar .. 2014-02-18 22:43:15.400:INFO:oejs.Server:jetty-8.yz-SNAPSHOT 2014-02-18 22:43:15.490:INFO:oejw.WebInfConfiguration:提取jar:file:/ C:/Users/User/Desktop/jetty/JettyWar.war!/到C:\ Users \ User \ AppData \ Loca \ jetty-0.0.0.0-8000-JettyWar.war- -any- \ webapp 2014-02-18 22:43:15.878:警告:oejuc.AbstractLifeCycle:FAILED jsp:java.lang.NoClassDefFoundError:org / apache / juli / log / LogFactory java.lang.NoClassDefFoundError:org / apache / juli / logging / LogFactory atg.apache.jasper.servlet.JspServlet。(JspServlet.java:68)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun位于org的java.lang.Class.newInstance(未知来源)的java.lang.reflect.Constructor.newInstance(未知来源)的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源)的.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) .eclipse.jetty.servlet.ServletContextHandler $ Context.createServlet(ServletContext中 Handler.java:1075)org.eclipse.jetty上的org.eclipse.jetty.servle.ServletHolder.inInstance(ServletHolder.java:957)org.eclipse.jet中的org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514)位于org.eclipse.jetty.servet.ServletHandler.initialize(ServletHandler.java)的org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)中的.servlet.ServletHolder.doStart(ServletHolder.java:344) :791)位于org.eclipse.jetty.server上的org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242)的org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)。 handler.ContextHandler.doStart(ContextHandler.java:717)org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java: 64)在org.eclipse.je上的org.eclipse.jetty.doStart(Server.java:282)的org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) com.windows.services.SimplestServer.main(SimplestServer.java:41)中的tty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)引起:java.lang.ClassNotFoundException:org.apache.juli.logging。 java.net.URLClassLoader上的LogFactory $ java。在java.net.URLClassLoader $ 1.run(未知来源)java.net.URLClassLoader.findClass(未知来源)java.security.AccessController.doPrivileged(本地方法)来自org.apache.jasper.servlet.JspServlet的java.lang.ClassLoader.loadClass(未知来源)的sun.misc.Launcher $ AppClassLoader.loadClass(未知来源)的java.lang.ClassLoader.loadClass(未知来源)。 (jspServlet.java:68)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)at java.lang.reflect。 org.eclips上java.lang.Class.newInstance(未知来源)的Constructor.newInstance(未知来源) e.jetty.servlet.ServletContextHandler $ Context.createServlet(ServletContextHandler.java:1075)位于org.eclipse.jetty上的org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:957)中。(ServletHolder.java:。 ServletHolder.java:514)org.eclipse.jet中的org.eclipse.jetty.ust.Av.Ard.Cart(ServletHolder.java:。位于org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java)的org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)中的.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791) :1242)org.eclipse.jetty上的org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)的org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)。 util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)at at org.eclipse.jetty.server.Server.doStart(Server.java:282)位于com.windows.services.SimplestServer.main的org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)( SimplestServer.java:41)2014-02-18 22:43:15.909:警告:oejuc.AbstractLifeCycle:FAILED oejwWebAppContext {/,file:/ C:/Users/User/AppData/Local/Temp/jetty-0.0.0.0- 8000-Je .war- -any- / webapp /},C:\ Users \ User \ Desktop \ jetty \ JettyWar.war:java.lang.NoClassDefFoundError:org / apache / juli / logging / LogFactory java.lang.NoClassDefFoundError: org / apache / juli / logging / LogFactory at org.apache.jasper.servlet.JspServlet。(JspServlet.java:68)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source来自org.eclipse.jetty.servlet.ServletContextHandler $的java.lang.Class.newInstance(未知来源)的java.lang.reflect.Constructor.newInstance(未知来源)中的sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源)上下文 .orgateServlet(ServletContextHandler.java:1075)org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:957)org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514)org。 eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344)位于org.eclipse.jetty.servart.ServletHandler.initialize上的org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) ServletHandler.java:791)org.eclipse.jet中的org.eclipse.jetty.wevapp.WebAppContext.startContext(WebAppContext.java:1242)上的org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) .server.handler.ContextHandler.doStart(ContextHandler.java:717)org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle) .java:64)org.eclipse.jetty.doStart上的org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)(服务器) r.java:282)位于com.windows.services.SimplestServer.main的org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)(SimplestServer.java:41)引起:java.lang .ClassNotFoundException:java.net.URLClassLoader的java.net.URLClassLoader $ 1.run(未知来源)的org.apache.juli.logging.LogFactory java.security.AccessController.doPrivileged(Native Method)的java.net.URLClassLoader $ 1.run(未知来源) at java.lang.ClassLoader.findClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source)at sun.misc.Launcher $ AppClassLoader.loadClass(Unknown Source)at java.lang.ClassLoader.loadClass(Unknown Source) at org.apache.jasper.servlet.JspServlet。(JspServlet.java:68)at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance java.lang.Class.newInstance中java.lang.reflect.Constructor.newInstance(Unknown Source)的(未知来源) 来自org.eclipse.jetty的org.eclipse.jet中的org.eclipse.jetty.ServletHolder.newInstance(ServletHolder.java:957)中的org.eclipse.jetty.servlet.ServletContextHandler $ Context.createServlet(ServletContextHandler.java:1075)。 servlet.ServletHolder.initServlet(ServletHolder.java:514)org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344)org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java: 64)org.eclipse.jetty.servit.servlet.ServletHandler.initialize(ServletHandler.java:791)org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)at org.eclipse.jetty.webapp.WebAppContext位于org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)的org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)的.startContext(WebAppContext.java:1242) Org.eclipse.jetty.start(AbstractLifeCycle.java:64)org.eclipse.jetty.server.handler.HandlerWrapper.doStar上的org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) t(HandlerWrapper.java:95)atg.eclipse.jetty.server.Server.doStart(Server.java:282)org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)at com .windows.services.SimplestServer.main(SimplestServer.java:41)

我用过docker8.1.14。 当我在目标运行时选择j2ee预览时,我无法理解为什么我得到apache没有类def错误。 顺便说一下,当我在运行时使用apache tomcat时,我得到了同样的错误。

另请注意,我不使用maven或ant。 我也不想使用它们。 我希望只通过简单的java来实现。

提前感谢您的帮助。

一个简单的解决方案是使用jetty-runner。 jetty-runner jar直接嵌入到docker分布中( org.mortbay.jetty jetty

然后在你的主要课堂上你只需要做那样的事情:

 jettyRunner = new JettyRunner("/yourContext", "path/to/your/webApp", port); jettyRunner.start();