2016-07-17 399 views
0
**16-Jul-2016 15:50:39.774 SEVERE [localhost-startStop-1] 
org.apache.catalina.core.StandardContext.startInternal Error during ServletContainerInitializer processing 
    javax.servlet.ServletException: javax.websocket.DeploymentException: The path [websocket] is not valid. 
     at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:123) 
     at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5292) 
     at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147) 
     at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:725) 
     at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:701) 
     at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:717) 
     at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1092) 
     at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1834) 
     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
     at java.lang.Thread.run(Thread.java:745) 
Caused by: javax.websocket.DeploymentException: The path [websocket] is not valid. 
     at org.apache.tomcat.websocket.server.UriTemplate.<init>(UriTemplate.java:48) 
     at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:200) 
     at org.apache.tomcat.websocket.server.WsServerContainer.addEndpoint(WsServerContainer.java:279) 
     at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:120) 
    ... 12 more** 

的WebSocket的代碼(JAVA):產生的原因:javax.websocket.DeploymentException:路徑[的WebSocket]無效

**import java.io.IOException; 
import javax.websocket.ClientEndpoint; 
import javax.websocket.OnError; 
import javax.websocket.OnMessage; 
import javax.websocket.OnOpen; 
import javax.websocket.OnClose; 
import javax.websocket.Session; 
import javax.websocket.server.ServerEndpoint; 
import java.util.concurrent.CopyOnWriteArraySet; 
import java.util.concurrent.atomic.AtomicInteger; 
import java.util.*; 
@ServerEndpoint("webDemo/chat") 
public class ChatEntpoint{ 
    private static final String GUEST_PREFIX = "訪客"; 
    private static final AtomicInteger connectionIds = new AtomicInteger(0); 
    private static final Set<ChatEntpoint> clientSet = new  CopyOnWriteArraySet<>(); 
    private final String nickname; 
    private Session session; 
    public ChatEntpoint(){ 
     nickname = GUEST_PREFIX + connectionIds.getAndIncrement(); 
    } 
    @OnOpen 
    public void start(Session session){ 
     this.session = session; 
     clientSet.add(this); 
     String message = String.format("【%s %s】",nickname,"加入了聊天室!"); 
     broadcast(message); 
    } 
    @OnClose 
    public void end(){ 
     clientSet.remove(this); 
     String message = String.format("【%s %s】",nickname,"離開了聊天室!"); 
     broadcast(message); 
    } 
    @OnMessage 
    public void incoming(String message){ 
     String filteredMessage = String.format("【%s %s】",nickname,filter(message)); 
     broadcast(filteredMessage); 
    } 
    @OnError 
    public void OnError(Throwable t) throws Throwable{ 
     System.out.println("WebSocket服務器端錯誤" + t); 
    } 
    private static void broadcast(String msg){ 
     for(ChatEntpoint client:clientSet){ 
      try{ 
       synchronized(client){ 
        client.session.getBasicRemote().sendText(msg); 
       } 
      } 
      catch(IOException e){ 
       System.out.println("聊天錯誤,向客戶端"+client+"發送消息出現錯誤!"); 
       clientSet.remove(client); 
       try{ 
        client.session.close(); 
       } 
       catch(IOException e1){} 
       String message = String.format("【%s %s】",client.nickname,"已經被斷開了連接!"); 
       broadcast(message);    
      } 
     } 
    } 
    private static String filter(String message){ 
     if(message == null){ 
      return null; 
     } 
     char content[] = new char[message.length()]; 
     message.getChars(0,message.length(),content,0); 
     StringBuilder result = new StringBuilder(content.length + 50); 
     for(int i=0;i<content.length;i++){ 
      switch(content[i]){ 
       case '<': 
        result.append("&lt;"); 
        break; 
       case '>': 
        result.append("&gt;"); 
        break; 
       case '&': 
        result.append("&amp;"); 
        break; 
       case '"': 
        result.append("&quot;"); 
        break; 
       default: 
        result.append(content[i]); 
      } 
     } 
     return (result.toString()); 
    } 
}** 

我嘗試建立一個實時同步的網站。我已經下載了tomcat 8.0,並且在運行web時瀏覽器錯誤404中構建了websocket服務器。日誌寫入:

我在net上搜索了很長時間,但沒有用。請幫助或嘗試提供一些想法如何將其歸檔。

計算機配置: 窗口-7 64 i5-3230M RAM 4G

回答

0

上的@ServerEndpoint

@ServerEndpoint("webDemo/chat") 

值的值將出現問題應固定到另一個,而不是名稱的HTML。

0

問題在於@ServerEndpoint的值。您錯過了價值前的/

你應該使用這樣的:

@ServerEndpoint("/webDemo/chat") 
+0

請使用[編輯]鏈接來解釋這個代碼是如何工作的,不只是給代碼,一個解釋更有可能幫助未來的讀者。另見[回答]。 [源(http://stackoverflow.com/users/5244995) –

0

你應該使用這樣的:

@Serverendpoint("webDemo/{chat}") 
相關問題