2015-08-31 33 views
1

有關上一個問題,請參閱here在Jetty中使用Websockets

我正在嘗試使用Websockets設置應用程序並在Jetty中運行。當我運行gradle jettyRun,但是,我得到:

javax.servlet.ServletException: Not running on Jetty, WebSocket support unavailable 
    at org.eclipse.jetty.websocket.server.WebSocketServerFactory.init(WebSocketServerFactory.java:411) 
    at org.eclipse.jetty.websocket.servlet.WebSocketServlet.init(WebSocketServlet.java:136) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:241) 
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440) 
    at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:440) 
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) 
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

This page表明,WebSockets的只是「Jetty的容器內」可以,但我會想到的是Jetty插件默認會這麼做。我需要重新配置嗎?

編輯:This issue表明Jetty插件的目標是Jetty的舊版本(並且與websockets不兼容)。不過,這已經很老了 - 我不知道它是否尚未解決的說法仍然正確。我會嘗試直接運行Jetty,而不是通過插件。

回答

0

這是一個正確的假設。

org.mortbay.jetty.servlet.ServletHolder告訴你,你正在運行碼頭6.x的標記EOL(壽終)早在2010年

項目轉移到Eclipse基金會在2008年,隨着新的第一版「 Eclipse的碼頭」(在org.eclipse.jetty命名空間)在2009年10月

版本7.0.0 WebSocket的支持,你正在嘗試使用需要碼頭9.2+

你可能要考慮不使用gradle這個插件,但只需使用來自項目特定的runner模塊的嵌入式碼頭實例即可您自己的設計。

如:

package org.eclipse.jetty.cookbook; 

import java.io.File; 
import java.nio.file.Path; 

import org.eclipse.jetty.server.Server; 
import org.eclipse.jetty.webapp.WebAppContext; 

public class WebAppContextFromFileSystem 
{ 
    public static void main(String[] args) throws Exception 
    { 
     Server server = new Server(8080); 

     Path warPath = new File("webapps/hello.war").toPath().toRealPath(); 
     System.err.println("WAR File is " + warPath); 

     // A very bare bones example (see other examples for 
     // how to use WebAppContext Configurations to enable 
     // jndi, annotations, etc ...) 
     WebAppContext webapp = new WebAppContext(); 
     webapp.setContextPath("/"); 
     webapp.setWar(warPath.toUri().toASCIIString()); 

     server.setHandler(webapp); 

     server.start(); 
     server.join(); 
    } 
} 

見嵌入式碼頭的例子更多的細節。

https://github.com/jetty-project/embedded-jetty-cookbook https://github.com/eclipse/jetty.project/tree/master/examples/embedded

+0

只想讓你知道,我並沒有拋棄這個問題 - 我會接受這個答案一旦我能得到它的工作,但我還是一直沒能成功儘管舉例說明,但仍可以運行嵌入Jetty。特別是,甚至可以在這裏使用超簡單化的示例http://www.eclipse.org/jetty/documentation/current/embedded-examples.html#embedded-minimal-servlet或這裏http://www.eclipse.org/jetty /documentation/current/embedding-jetty.html#d0e19135每次給出500響應。我會繼續嘗試! – scubbo

+0

在日誌中顯示沒有任何明顯錯誤: $ java -Dorg.eclipse.jetty.util.log.class = org.eclipse.jetty.util.log.StdErrLog -jar build/libs/myProject-all-1.0.jar 2015-09-08 00:17:48.546:INFO :: main:日誌初始化[at] 298ms 2015-09-08 00:17:48.605:INFO:oejs.Server:main:jetty-9.3.z-SNAPSHOT 2015-09-08 00:17:48.665:INFO:oejs.ServerConnector:main:啓動ServerConnector [at] deb6432 {HTTP/1.1,[http/1.1]} {0.0.0.0:8080} 2015-09-08 00:17:48.666:INFO:oejs.Server:main:Started [at] 422ms [即使在請求後沒有進一步的日誌記錄] – scubbo

+0

嗯 - 當我放棄對jetty-all的依賴時,切換到顯式依賴關係,這個例子有效!奇怪的。 我原來的build.gradle有: 編譯 'org.eclipse.jetty.aggregate:碼頭全:9.3.2.v20150730' 和工作版本有 編譯「org.eclipse.jetty:碼頭服務器:9.3。 2.v20150730' 編譯'org.eclipse。jetty:jetty-servlets:9.3.3.v20150827' compile'org.eclipse.jetty:jetty-webapp:9.3.3.v20150827' Accepting - thanks! – scubbo