我一直在阅读WebSocket api并且已经玩了一下但是我无法理解我的头脑。现在我有一个servlet TestServlet
,它在web.xml
中定义,每次将URL localhost:TestServlet放入浏览器的URL时触发doGet
方法。
我想等待来自移动设备的连接,构建手机应用程序的人说他们可以加载我的servlet,在这种情况下doGet
方法会触发,我会根据收到的数据开展业务。唯一的问题是,在doGet
方法中我有请求和响应,我可以从请求中获取手机发送的数据吗?
我也将@ServerEndpoint
设置为/*
,我认为这意味着当加载包含/TestServlet
的网址时,servlet将处于活动状态。这里的问题是我看不到打印行的任何输出或看到任何断点。
我只是想知道(如果这有任何意义)将@ServerEndpoint
设置为@ServerEndpoint(value =" / *")将触发注释@OnMessage
的方法有消息可以收到吗?
如果没有,我怎么能让它触发,如果我不能如何从HttpServletRequest获取数据字符串?
答案 0 :(得分:1)
您正在混合基本概念。 @ServerEndpoint(value)
不代表@WebServlet(urlPatterns)
之类的网址格式。它代表URI or URI template。 /*
的价值是完全错误的。你不应该把它当作一个servlet(过滤器)。它不是自动化的#34;在某些http://
请求上调用。客户端必须通过a.o明确触发ws://
请求。 JavaScript中的new WebSocket(uri)
(假设是一个Web应用程序)。
E.g。
@ServerEndpoint("/push")
public class Push {}
与
if (window.WebSocket) {
var ws = new WebSocket("ws://example.com/contextname/push");
ws.onmessage = function(event) {
var text = event.data;
console.log(text);
};
}
else {
// Bad luck. Browser doesn't support it. Consider falling back to long polling.
// See http://caniuse.com/websockets for an overview of supported browsers.
// There exist jQuery WebSocket plugins with transparent fallback.
}
更新:结果证明这是一款真正的移动应用(Android / iOS)。如果http://
用于连接Servlet的(本机)URL / HTTP连接库不支持ws://
协议,那么您最好寻找支持该协议的第三方库。要查找一个,请使用关键字"android websocket client"或"ios websocket client"。注意:在文档/教程/博客中,注意"客户端"部分,而不是"服务器"部分,因为"服务器"部分已由@ServerEndpoint
实施。