Hallo Leute,
seit 2 Tagen informiere ich mich bereits über WebSockets und habe schon viel darüber in Erfahrung gebracht.
Ich fand auch Tutorials, die aber bei mir nicht klappten. Da ich in meiner Umgebung niemanden kenne, der mir diesbezüglich weiterhelfen kann, hoffe ich, dass sich hier jemand findet, der bereits WebSockets erfolgreich verwendet hat.
Es gibt ja WebSocket Server (Jetty, JWebSocket, Netty,...). Ich möchte meine webapps aber weiterhin bei tomcat deployen, deswegen brauche ich die Schnittstelle zu den WebSocket Servern.
Nun las ich, dass tomcat 7.027 WebSockets unterstützt, also habe ich wieder ein Tutorial durchgearbeitet, was mich aber nicht auf die Lösung brachte. Ich denke aber, ich bin sehr nah dran.
Schau mal mein Code:
web.xml
Fehlermeldung in FireFox-Konsole:
Die Klasse ist doch in der web.xml registriert?!
Danke im voraus.
seit 2 Tagen informiere ich mich bereits über WebSockets und habe schon viel darüber in Erfahrung gebracht.
Ich fand auch Tutorials, die aber bei mir nicht klappten. Da ich in meiner Umgebung niemanden kenne, der mir diesbezüglich weiterhelfen kann, hoffe ich, dass sich hier jemand findet, der bereits WebSockets erfolgreich verwendet hat.
Es gibt ja WebSocket Server (Jetty, JWebSocket, Netty,...). Ich möchte meine webapps aber weiterhin bei tomcat deployen, deswegen brauche ich die Schnittstelle zu den WebSocket Servern.
Nun las ich, dass tomcat 7.027 WebSockets unterstützt, also habe ich wieder ein Tutorial durchgearbeitet, was mich aber nicht auf die Lösung brachte. Ich denke aber, ich bin sehr nah dran.
Schau mal mein Code:
web.xml
Java:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<description>
Testttttttttttttt
</description>
<display-name>Teeeeestttt</display-name>
<servlet>
<servlet-name>wsChat</servlet-name>
<servlet-class>
com.ChatWebSocketServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>wsChat</servlet-name>
<url-pattern>/com/ChatWebSocketServlet</url-pattern>
</servlet-mapping>
</web-app>
Java:
package com;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import org.apache.catalina.websocket.MessageInbound;
import org.apache.catalina.websocket.StreamInbound;
import org.apache.catalina.websocket.WebSocketServlet;
import org.apache.catalina.websocket.WsOutbound;
public class ChatWebSocketServlet extends WebSocketServlet{
@Override
protected StreamInbound createWebSocketInbound(String subProtocol) {
return new ChatMessageInbound();
}
private final class ChatMessageInbound extends MessageInbound {
@Override
protected void onOpen(WsOutbound outbound){
System.out.println("onOpen");
};
protected void onClose(int status){
System.out.println("onClose");
}
@Override
protected void onBinaryMessage(ByteBuffer message)
throws IOException {
//this application does not expect binary data
throw new UnsupportedOperationException(
"Binary message not supported.");
}
@Override
protected void onTextMessage(CharBuffer message) throws IOException {
String msg = message.toString();
//modify the message by adding a timestamp
//msg = “(“ + System.currentTimeMillis()+”) “+ msg;
broadcast(msg);
}
private void broadcast(String message) {
//write some code to process the message
}
}
}
Java:
<!DOCTYPE html>
<html>
<head>
<title>Websocket</title>
<script type="text/javascript" src="jquery-1.7.2.min.js"></script>
</head>
<body>
<form action="#" id="chat_form" method = "post">
<input id="msg">
<input type="submit" value="senden">
</form>
<script>
var websocket = new WebSocket('ws://localhost:8080/wsChat');
websocket.onopen = function(event){
$('#chat').append('<br> Connection...');
}
websocket.onmessage = function(event){
$('#chat').append(event.data);
}
websocket.onclose = function(event){
$('#chat').append("<br> closed");
}
$(function(){
$('form#chat_form').submit(function(e){
e.preventDefault();
var textfield = $('#msg');
websocket.send(textfield.val());
textfield.val("");
})
});
</script>
</body>
</html>
Fehlermeldung in FireFox-Konsole:
Firefox kann keine Verbindung zu dem Server unter ws://localhost:8080/wsChat aufbauen.
Die Klasse ist doch in der web.xml registriert?!
Danke im voraus.