Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 与特定浏览器通信_Java_Jsp_Servlets_Web - Fatal编程技术网

Java 与特定浏览器通信

Java 与特定浏览器通信,java,jsp,servlets,web,Java,Jsp,Servlets,Web,我已经用JSP和servlet创建了一个网站 用户可以登录,他们都可以使用userid获得会话属性 我创建了一个带有文本框和按钮的页面,在这里我可以填写用户ID 单击按钮后,我想在特定用户的浏览器上打开一个弹出窗口(url),其中会话用户ID等于文本框中填写的用户ID。弹出窗口应立即出现,无需页面请求即可显示 我应该用什么样的东西 我在谷歌上搜索过,但找不到任何有用的东西。当你需要弹出窗口立即出现,并且你不能等待页面请求时,你需要某种从服务器到客户端的通信渠道,允许推送消息 Javascript

我已经用JSP和servlet创建了一个网站

用户可以登录,他们都可以使用
userid
获得会话属性

我创建了一个带有文本框和按钮的页面,在这里我可以填写
用户ID

单击按钮后,我想在特定用户的
浏览器
上打开一个弹出窗口(url),其中
会话用户ID
等于文本框中填写的
用户ID
。弹出窗口应立即出现,无需页面请求即可显示

我应该用什么样的东西


我在谷歌上搜索过,但找不到任何有用的东西。

当你需要弹出窗口立即出现,并且你不能等待页面请求时,你需要某种从服务器到客户端的通信渠道,允许推送消息

Javascript是一个很好的工具。WebSocket是浏览器和服务器之间的双向连接,在页面打开时打开,双方可以随时使用它发送数据


在每个页面上,您都需要创建一个websocket并将其连接到一个Web服务器。当客户机打开页面时,servlet可以随时向客户机发送消息。然后,您可以用Javascript处理该消息以实现实时聊天应用程序。

编写聊天客户端可能非常棘手,因为当另一个用户发送消息时,您必须将数据从服务器发送到客户端。WebSockets允许您这样做,但这是一项非常新的技术,不适用于低于10的IE版本。Chrome、Firefox和Safari都支持它

允许您使用javascript与服务器通信而不需要刷新浏览器页面的一组技术称为AJAX

像DWR这样的库使得在Javascript和Java之间执行AJAX非常容易。它还有一个称为反向AJAX的特性,允许您编写在客户端上执行javascript代码的Java代码

使用DWR,您可以编写此命令以在所有连接的客户端上显示弹出窗口:

    Container container = ServerContextFactory.get().getContainer();
    ScriptSessionManager manager = container.getBean(ScriptSessionManager.class);
    System.out.println("sessions: " + manager.getAllScriptSessions().size());
    for (ScriptSession scriptSession : manager.getAllScriptSessions()) {
        System.out.println("Sending script to session " + scriptSession);
        ScriptBuffer script = new ScriptBuffer("window.alert('hello from reverse ajax server');");
        scriptSession.addScript(script);
    }

在下一个页面请求中显示弹出窗口就足够了,还是希望立即显示?@Philipp立即,这是一个聊天弹出窗口。是否可能只向一个浏览器(使用特定会话用户ID)发送数据,而不是在所有浏览器都连接时向所有浏览器发送数据?@y451n是。servlet只需要跟踪所有会话的用户ID。试试这个!谢谢。它不会显示警报,但会话存在。明白了!非常感谢你。