问题描述
我认为您在打开websocket时正在尝试连接到不存在的端点。
这(请注意,您错过了/../
):
var wsUri = "ws://" + document.location.hostname + ":8000" +
document.location.pathname + "/../serverendpoint";
…将适用于您部署到WildFly的文件,如下所示:
├── pom.xml
└── src
└── main
├── java
│ └── testing
│ └── serverendpoint.java
└── webapp
├── MyTest.html
└── WEB-INF
└── web.xml
我已经在OpenShift Online上的WildFly 10磁带上使用您的代码(带有修改的端点路径)检查了此内容。
解决方法
我正在使用OpenShift和WildFly 8.2.1 final来实现新的HTML5
websocket。我使用了本教程来设置这个项目。
每当我打开MyTest.html时,这就是JavaScript记录的内容:
JS: Server Connected...
JS: Server Disconnected...
服务器连接,然后立即断开连接。为什么?我究竟做错了什么?有什么我想念的吗?
这是模式代码->
serverendpoint.java
package testing;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/serverendpoint")
public class serverendpoint {
@OnOpen
public void handleOpen () {
System.out.println("JAVA: Client is now connected...");
}
@OnMessage
public String handleMessage (String message) {
System.out.println("JAVA: Received from client: "+ message);
String replyMessage = "echo "+ message;
System.out.println("JAVA: Send to client: "+ replyMessage);
return replyMessage;
}
@OnClose
public void handleClose() {
System.out.println("JAVA: Client is now disconnected...");
}
@OnError
public void handleError (Throwable t) {
t.printStackTrace();
}
}
MyTest.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>My WS Website</title>
</head>
<body>
<form>
<input id="textMessage" type="text">
<input onclick="sendMessage();" value="Send Message" type="button">
</form>
<br>
<textarea id="messageTextArea" rows="10" cols="50"></textarea>
<script type="text/javascript">
var wsUri = "ws://" + document.location.hostname + ":8000" + document.location.pathname + "serverendpoint";
var webSocket = new WebSocket(wsUri);
var messageTextArea = document.getElementById("messageTextArea");
webSocket.onopen = function(message) { processOpen(message);};
webSocket.onmessage = function(message) { processMessage(message);};
webSocket.onclose = function(message) { processClose(message);};
webSocket.onerror = function(message) { processError(message);};
function processOpen (message) {
messageTextArea.value += "JS: Server Connected..."+"\n";
}
function processMessage(message) {
messageTextArea.value += "JS: Receive from Server ==> "+message.data+"\n";
}
function sendMessage () {
if (textMessage.value !="close") {
webSocket.send(textMessage.value);
messageTextArea.value += "JS: Send to Server ==> "+textMessage.value+"\n";
textMessage.value="";
} else webSocket.close();
}
function processClose(message) {
webSocket.send("JS: Client disconnected...")
messageTextArea.value += "JS: Server Disconnected..."+"\n";
}
function processError (message) {
messageTextArea.value += "JS: error ..."+"\n";
}
</script>
</body>
</html>
和pom.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>testing</groupId>
<artifactId>testing</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>testing</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<profiles>
<profile>
<!-- When built in OpenShift the 'openshift' profile will be used when invoking mvn. -->
<!-- Use this profile for any OpenShift specific customization your app will need. -->
<!-- By default that is to put the resulting archive into the 'deployments' folder. -->
<!-- http://maven.apache.org/guides/mini/guide-building-for-different-environments.html -->
<id>openshift</id>
<build>
<finalName>testing</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<outputDirectory>deployments</outputDirectory>
<warName>ROOT</warName>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
谢谢您的帮助!