【问题标题】:Running a web application (WAR) with embedded jetty server使用嵌入式码头服务器运行 Web 应用程序 (WAR)
【发布时间】:2014-02-18 17:26:08
【问题描述】:

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

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

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.y.z-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 在 org.apache.jasper.servlet.JspServlet.(JspServlet.java:68) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 资源) 在 java.lang.reflect.Constructor.newInstance(未知来源) 在 java.lang.Class.newInstance(未知来源) 在 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) 在 org.eclipse.jetty.server.Server.doStart(Server.java:282) 在 org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 com.windows.services.SimplestServer.main(SimplestServer.java:41) 引起:java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory 在 java.net.URLClassLoader$1.run(未知来源) 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 org.apache.jasper.servlet.JspServlet.(JspServlet.java:68) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 资源) 在 java.lang.reflect.Constructor.newInstance(未知来源) 在 java.lang.Class.newInstance(未知来源) 在 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) 在 org.eclipse.jetty.server.Server.doStart(Server.java:282) 在 org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 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 在 org.apache.jasper.servlet.JspServlet.(JspServlet.java:68) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 资源) 在 java.lang.reflect.Constructor.newInstance(未知来源) 在 java.lang.Class.newInstance(未知来源) 在 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) 在 org.eclipse.jetty.server.Server.doStart(Server.java:282) 在 org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 com.windows.services.SimplestServer.main(SimplestServer.java:41) 引起:java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory 在 java.net.URLClassLoader$1.run(未知来源) 在 java.net.URLClassLoader$1.run(未知来源) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 sun.misc.Launcher$AppClassLoader.loadClass(未知来源) 在 java.lang.ClassLoader.loadClass(未知来源) 在 org.apache.jasper.servlet.JspServlet.(JspServlet.java:68) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知 资源) 在 java.lang.reflect.Constructor.newInstance(未知来源) 在 java.lang.Class.newInstance(未知来源) 在 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) 在 org.eclipse.jetty.server.Server.doStart(Server.java:282) 在 org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:64) 在 com.windows.services.SimplestServer.main(SimplestServer.java:41)

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

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

提前感谢您的帮助。

【问题讨论】:

    标签: java jetty war


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的建议。给那些试图通过嵌入式码头服务器运行 WAR 的人的一个提示,下载 jettyrunner.jar。创建一个bat文件。并直接通过 jettyrunner 运行你的战争,而无需编写任何代码来制作码头服务器。 java -jar jetty-runner.jar my.war 它对我有用。
    • 杰罗姆,还有一个帮助。你能帮我阻止jettyrunner吗?目前,我正在通过在命令提示符下按 Ctrl+C 终止进程。是否有任何命令可以杀死它,以便我创建一个 bat/shell 文件来停止我的服务器?
    • $ java -jar start.jar STOP.PORT=28282 STOP.KEY=secret --stop 摘自stackoverflow.com/questions/14981435/how-do-i-stop-jetty
    • 在成功通过码头运行 WAR 后,我正在尝试将码头服务器嵌入到我的网络应用程序中。它是一个由 servlet 组成的普通 java 应用程序。我使用了爆炸的 WAR 目录(WARless)。但我得到以下异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2015-10-01
    • 2014-12-11
    • 1970-01-01
    相关资源
    最近更新 更多