我正在使用javax.websocket
库在Java中创建一个Web套接字:
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.server.ServerEndpoint;
@ServerEndpoint("/serverendpoint")
/**
* This class creates websockets, opens, and maintains connection with the client
*/
public class serverendpoint {
@OnOpen
public void handleOpen () {
System.out.println("JAVA: Client is now connected...");
}
@OnMessage
public String handleMessage (String message) {
if (message.equals("ping"))
return "pong";
else if (message.equals("close")) {
handleClose();
return null;
}
System.out.println("JAVA: Received from client: "+ message);
// do something
return aMessage;
}
@OnClose
public void handleClose() {
System.out.println("JAVA: Client is now disconnected...");
}
@OnError
public void handleError (Throwable t) {
t.printStackTrace();
}
}
我正在使用Red Hat的Openshift平台来托管我的网站(使用HTTPS),该网站使用wss
(安全网络套接字)。 该应用程序有一个www。网址(供参考) 。 webSocket的Javascript代码是:
var wsUri = "wss://" + document.location.hostname + ":8080" + document.location.pathname + "/../serverendpoint";
var webSocket = new WebSocket(wsUri);
我阅读了this教程,因此更改了我的web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
metadata-complete="false">
</web-app>
为:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
metadata-complete="false">
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected resource</web-resource-name>
<url-pattern>/*</url-pattern>
<http-method>GET</http-method>
</web-resource-collection>
<!-- https -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
</web-app>
然后我将我的代码推送到Wildfly服务器(那些托管在Openshift上)。当我访问我的网站(使用Web套接字连接)时,它给了我以下错误:
当我的网站为HTTP
并使用ws
时,网络套接字连接有效。但我必须将其更改为HTTPS
,因此我将webSocket URL(JavaScript)更改为使用wss
和正确的端口:8080
,然后我按照该教程(参见上文)更改web.xml
。但我得到了上述错误。我做错了什么,我无法理解我的生活
我使用错误的端口(即8080)进行安全连接吗?
非常感谢你的帮助!