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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/21861019/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 11:07:31  来源:igfitidea点击:

Running a web application (WAR) with embedded jetty server

javajettywar

提问by Parul S

I have made a very basic web application that has only one html page. I exported it as a war.

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

Now I created an embedded jetty server.

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

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

}

}

I created a jar for this embedded server. But when I try to run my web application through the embedded server,I get the following error.

我为这个嵌入式服务器创建了一个 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

C:\Users\User>java -jar C:\Users\User\Desktop\jetty\webServer.jar .. 2014-02-18 22:43:15.400:INFO:oejs.Server:jetty-8.y.z-SNAPSHOT 2014-02-18 22:43:15.490:INFO:oejw.WebInfConfiguration:Extract jar:file:/C:/Users/User/Desktop/jetty/JettyWar.war!/ to C:\Users\User\AppData\Loca \jetty-0.0.0.0-8000-JettyWar.war--any-\webapp 2014-02-18 22:43:15.878:WARN:oejuc.AbstractLifeCycle:FAILED jsp: 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) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:1075) at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:957) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514) at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494) at 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) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at com.windows.services.SimplestServer.main(SimplestServer.java:41) Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.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(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:1075) at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:957) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514) at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494) at 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) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at com.windows.services.SimplestServer.main(SimplestServer.java:41) 2014-02-18 22:43:15.909:WARN:oejuc.AbstractLifeCycle:FAILED o.e.j.w.WebAppContext{/,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) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:1075) at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:957) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514) at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494) at 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) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at com.windows.services.SimplestServer.main(SimplestServer.java:41) Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.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(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(ServletContextHandler.java:1075) at org.eclipse.jetty.servlet.ServletHolder.newInstance(ServletHolder.java:957) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514) at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791) at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:265) at org.eclipse.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1242) at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:717) at org.eclipse.jetty.webapp.WebAppContext.doStart(WebAppContext.java:494) at 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) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at com.windows.services.SimplestServer.main(SimplestServer.java:41)

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:Extract 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:WARN:oejuc.AbstractLifeCycle:FAILED jsp: 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) at sun。反射.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet( ServletContextHandler.java:1075) 在 org.eclipse.jetty.servlet.ServletHolder。newInstance(ServletHolder.java:957) at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:514) at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:344) at org.eclipse .jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791) 在 org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler) .java:265) 在 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.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) 在 org.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) 由:java.lang.ClassNotFoundException:org.apache.juli.logging.LogFactory在 java.net.URLClassLoader$1.run(Unknown Source) 在 java.net.URLClassLoader$1.run(Unknown Source) 在 java.security.AccessController.doPrivileged(Native Method) 在 java.net.URLClassLoader.findClass(Unknown Source)在 java.lang.ClassLoader.loadClass(Unknown Source) 在 sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 在 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。反射.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet( 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.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791) 在 org.eclipse.jetty.servlet .ServletContextHandler.startContext(ServletContextHandler.java:265) 在 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.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 org.eclipse.jetty.server。 handler.HandlerWrapper.doStart(HandlerWrapper.java:95) at org.eclipse.jetty.server.Server.doStart(Server.java:282) at org.eclipse.jetty。util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at com.windows.services.SimplestServer.main(SimplestServer.java:41) 2014-02-18 22:43:15.909:WARN:oejuc.AbstractLifeCycle:WebAppContextoe {/,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/在 org.apache.jasper.servlet.JspServlet.(JspServlet.java:68) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 在 sun.reflect。 DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet(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.util.component .AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791) at org.eclipse.jetty.servlet.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) at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) at org.eclipse.jetty.server.handler.HandlerWrapper.doStart(HandlerWrapper.java:95) 在 org.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) 由:java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory at java.net.URLClassLoader$1 .run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.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。反射.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) at java.lang.reflect.Constructor.newInstance(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet( 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.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:791) 在 org.eclipse.jetty.servlet .ServletContextHandler.startContext(ServletContextHandler.java:265) 在 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.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 org.eclipse.jetty.server。 handler.HandlerWrapper.doStart(HandlerWrapper.java:95) at org.eclipse.jetty.server.Server.doStart(Server.java:282) at org.eclipse.jetty。util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 com.windows.services.SimplestServer.main(SimplestServer.java:41)

I have used jetty 8.1.14. I cant understand why I am getting apache's no class def error when I selected j2ee preview in my target runtime. By the way, I got the same error when I had used apache tomcat in runtime.

我使用了码头 8.1.14。当我在目标运行时中选择 j2ee 预览时,我不明白为什么会出现 apache 的 no class def 错误。顺便说一句,当我在运行时使用 apache tomcat 时,我遇到了同样的错误。

Also note that I am not using maven or ant. I dont want to use either. I wish to do it through simple java only.

另请注意,我没有使用 maven 或 ant。我也不想用。我希望仅通过简单的 java 来完成。

Thank you in advance for helping out.

预先感谢您的帮助。

采纳答案by Jér?me Gloaguen

A simple solution is to use the jetty-runner. The jetty-runner jar is directly embedded in the jetty distribution (<groupId>org.mortbay.jetty</groupId> <artifactId>jetty</artifactId>)

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

and then in your main class you just have to do something like that :

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

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