Servlets WebSocket OnMessage和ServerEndpoint

Servlets WebSocket OnMessage和ServerEndpoint,servlets,websocket,Servlets,Websocket,我一直在阅读WebSocket api,并一直在玩它一点,但我不能让我的头围绕一些事情。现在,我有一个servletTestServlet,它在web.xml中定义,每次将URL localhost:TestServlet放入浏览器的URL时,都会触发doGet方法 我想等待来自移动设备的连接,构建手机应用程序的家伙说他们可以加载我的servlet,在这种情况下,doGet方法将触发,我将处理接收到的数据。唯一的问题是,在doGet方法中,我有请求和响应,我可以从请求中获取从手机发送的数据吗 我

我一直在阅读WebSocket api,并一直在玩它一点,但我不能让我的头围绕一些事情。现在,我有一个servlet
TestServlet
,它在
web.xml
中定义,每次将URL localhost:TestServlet放入浏览器的URL时,都会触发
doGet
方法

我想等待来自移动设备的连接,构建手机应用程序的家伙说他们可以加载我的servlet,在这种情况下,
doGet
方法将触发,我将处理接收到的数据。唯一的问题是,在
doGet
方法中,我有请求和响应,我可以从请求中获取从手机发送的数据吗

我还将我的
@ServerEndpoint
设置为
/*
,这意味着当加载包含
/TestServlet
的url时,servlet将处于活动状态。这里的问题是,我并没有看到任何打印行的输出,也并没有看到任何断点被击中

我只是想知道(如果这有意义的话),
@ServerEndpoint
设置为@ServerEndpoint(value=“/*”),如果有消息要接收,带注释的
@OnMessage
方法会触发吗


如果不能,我如何使其触发,如果不能,我如何从HttpServletRequest获取数据字符串?

您在混合基本概念。
@ServerEndpoint(value)
不表示类似于
@WebServlet(urlPatterns)
的URL模式。它代表了世界。
/*
的值完全错误。您不应该将其视为servlet(过滤器)。它也不会在某些
http://
请求上“自动”调用。客户端必须通过JavaScript中的a.o.
new WebSocket(uri)
显式触发
ws://
请求(假设为web应用程序)

例如

另见:
  • (另一个具体示例涉及带JavaScript的WebSocket)


更新:这是一款真正的移动应用程序(Android/iOS)。如果通过
HTTP://
连接Servlet所使用的(本机)URL/HTTP连接库不支持
ws://
协议,那么您最好寻找支持该协议的第三方库。要找到一个,请使用关键字或。注意:在文档/教程/博客中,请注意“客户端”部分,而不是“服务器”部分,因为“服务器”部分已经由
@ServerEndpoint

实现。我删除了我之前的评论,因为我已经将其更新为:现在,如果我理解正确,javascript将在页面上运行,并用事件初始化套接字。为了进行测试,我可以制作一个只包含该代码的虚拟页面,并测试我的侦听器。当用户导航到我的网站时,将此代码放在我的网站主页上会启动套接字,尽管我看不出手机如何通过此套接字向服务器发送更新。不用说,我想你已经完全回答了我的问题。获取android的WS-jar文件,安装它们并在手机上建立连接。这是完美的,我非常感谢你!这很好,看起来我可以使用JAR创建一个独立的客户机,并使用它连接到服务器。我们也可以把这个挂在电话上!这有点无关,但我想你可以帮忙。我可以在哪里上传我的服务器或向DNS注册我的站点,我不想使用ip:port/ProjectName/index.xhtml进行连接,有什么建议吗?@BalusC:
@ServerEndpoint(“/user”)
满足将要发送到url的请求
../user
。假设有两个请求转到
/user
,唯一的区别是发送的消息。一条消息说
create
,另一条消息说
delete
。如果您只有一个url来定义所有内容,您如何向类中的其他成员指示它是否应该
创建
删除
@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.
}