与特定浏览器通信

时间:2014-04-01 18:02:56

标签: java jsp servlets web

我在JSP中使用Servlets创建了一个网站。

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

我创建了一个带有文本框和按钮的页面,我可以在其中填写userid

点击按钮后,我想在特定用户的browser上打开一个弹出窗口(网址),其中session userid等于文本框中填充的userid。弹出窗口应立即显示,不需要显示页面请求。

我应该用什么样的东西呢?

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

2 个答案:

答案 0 :(得分:1)

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

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

像DWR这样的库可以很容易地在Javascript和Java之间进行AJAX。它还有一个名为Reverse AJAX的功能,允许您编写在客户端上执行javascript代码的Java代码。 http://directwebremoting.org/dwr/documentation/reverse-ajax/index.html

使用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);
    }

答案 1 :(得分:0)

如果您需要立即显示弹出窗口并且您不能等待页面请求,则需要从服务器到客户端的某种通信通道,这样可以推送消息。

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

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