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