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

Par*_*l S 8 java jetty 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();
}
Run Code Online (Sandbox Code Playgroud)

}

我为这个嵌入式服务器创建了一个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 org.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.servlet.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.wevapp.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.jet.server.hand.hand.Wart(.HandaWrapper.doa):org.eclipse.jet.Server.doStart(Server.java:282)org.eclipse.je上的org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)tty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64)在com.windows.services.SimplestServer.main(SimplestServer.java:41)引起的:抛出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.ServletHolder.inInstance(ServletHolder.java:957)org.eclipse.jetty.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位于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.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)at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95)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 atg.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)atg.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514)org. eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344)atg.eclipse.jetty.uart.start(AbstractLifeCycle.java:64)org.eclipse.jetty.servlet.ServletHandler.initialize( ServletHandler.java:791)org.eclipse.jet中的org.eclipse.jetty.wevapp.WebAppContext.startContext(WebAppContext.java:1242)上的org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265)位于org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle)的org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)中的.server.handler.ContextHandler.doStart(ContextHandler.java:717) .java:64)在org.eclipse.jetty.server.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.security.AccessController.doPrivileged在java.net.URLClassLoader的$ 1.run(来源不明)在java.net.URLClassLoader的$ 1.run(来源不明)org.apache.juli.logging.LogFactory(本机方法) 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.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.servit.ServletContextHandler.startContext(ServletContextHandler.java:265)at org.eclipse.jetty.webapp.WebAppContext .startContext(WebAppContext.java:1242)在org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717)在org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494)在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)

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

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

提前感谢您的帮助.

小智 7

一个简单的解决方案是使用jetty-runner.jetty-runner jar直接嵌入码头分布(<groupId>org.mortbay.jetty</groupId> <artifactId>jetty</artifactId>)

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

jettyRunner = new JettyRunner("/yourContext", "path/to/your/webApp", port);
    jettyRunner.start();
Run Code Online (Sandbox Code Playgroud)