【问题标题】:embedding jetty server problems嵌入码头服务器问题
【发布时间】:2011-09-05 19:41:36
【问题描述】:

我在将码头服务器嵌入 Java 应用程序时遇到了一些困难。我正在使用 spring 来配置实际对象,并且可以毫无问题地构建 webapp - 但是在启动服务器时遇到了这个问题......

0 [main] INFO test.Server  - Starting server in 'c:/workspace/test/war/' on port 9090
34615 [main] INFO test.Server  - Using resource base: src/main/webapp
34615 [main] INFO test.Server  - Using descriptor file: src/main/webapp/WEB-INF/web.xml
2011-09-05 12:29:36.961:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
36344 [main] INFO test.Server  - Starting Server!
2011-09-05 12:29:37.023:INFO::jetty-6.1H.22
2011-09-05 12:29:37.039:WARN::Failed startup of context org.mortbay.jetty.webapp.WebAppContext@8ab708{/TestServer,file:/C:/workspace/test/war/src/main/webapp/}
java.lang.ClassNotFoundException: org.mortbay.jetty.plus.webapp.EnvConfiguration
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    at org.mortbay.util.Loader.loadClass(Loader.java:91)
    at org.mortbay.util.Loader.loadClass(Loader.java:71)
    at org.mortbay.jetty.webapp.WebAppContext.loadConfigurations(WebAppContext.java:859)
    at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:431)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
    at org.mortbay.jetty.Server.doStart(Server.java:224)
    at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
    at test.Server.main(Server.java:84)
2011-09-05 12:29:37.054:INFO::Started SocketConnector@0.0.0.0:9090

问题似乎与我的一些路径有关...目录结构很简单(什么 maven '推荐') -

工作区/测试/战争/ -src/main/java/test/Server.java -src/main/webapp/WEB-INF/web.xml

除此之外,它属于我在 web.xml 中设置的 spring 东西,这些东西已经过验证(通过 tomcat)。

main中的相关代码是这样的(否则就是属性废话):

svrLogger.info ("Starting server in '" + home + "' on port " + port);

String rsrcBase = "src/main/webapp";
String webXml = rsrcBase + "/WEB-INF/web.xml";

svrLogger.info ("Using resource base: " + rsrcBase);
svrLogger.info ("Using descriptor file: " + webXml);

Server server = new Server(port);
WebAppContext webapp = new WebAppContext();

webapp.setContextPath ("/TestServer");
webapp.setDescriptor (home + "/" + webXml);
webapp.setResourceBase (home + "/" + rsrcBase);
webapp.setParentLoaderPriority (true);
server.setHandler(webapp);

svrLogger.info ("Starting Server!");
server.start();
server.join();
svrLogger.info ("Joined and exiting");

任何帮助都很好......很有帮助。这是我第一次尝试制作自己的网络服务器(所以也欢迎其他建议!)

【问题讨论】:

  • 尝试将 jetty-plus.jar 添加到您的类路径中。我不确定为什么需要 org.mortbay.jetty.plus.webapp.EnvConfiguration。
  • 可能我在问一个愚蠢的问题,但是如果你想在Java应用程序中嵌入Jetty,为什么需要web.xml?只需使用嵌入式码头并启动服务器
  • 在这种情况下,你需要一个来使用 webapp 架构 - web app 需要一些描述符
  • 我认为 jetty 是一个简单的网络服务器,可以处理容器映射内容(映射 GET/POST/etc...)到适当的 servlet。在这种情况下,我有一个 webapp(自包含)并为此使用码头功能(我的基础是:link)。这不是预期用途吗?

标签: java web-services jetty embedded-jetty


【解决方案1】:

尽量包含

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-jndi</artifactId>
    <version>${jetty.version}</version>
</dependency>

它试图加载这个类,因为在 Jetty 中 JNDI 没有默认配置。

这是了解 Jetty 更多信息的好资源

https://jersey.java.net/documentation/latest/index.html

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-22
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多