与其他 Servlets 进行通信

JavaServlets 可以通过使用父网页中的 JavaScript 函数与其他 JavaServlets 进行通信。 JavaScript 函数通过从一个 Servlets 接收消息并调用其他 Servlets 的方法来实现 Servlets 之间的通信。有关 Java 代码和 JavaScript 代码之间的交互的更多信息,请参见以下主题:

您应该避免使用以下机制来查找其他 Servlets 并在 Servlets 之间共享数据:

  • 避免使用静态变量在 Servlets 之间共享数据。

  • 不要使用AppletContext类的getAppletgetApplets方法来查找其他 Servlets。这些方法仅查找在 Java Runtime Environment 软件的同一实例中运行的 applet。

Servlets 必须源自服务器上的同一目录才能相互通信。

接下来显示发送者和接收者 Servlets。当用户单击按钮以增加计数器时,发件人 Servlets 将调用 JavaScript 函数以将请求发送到接收方 Servlets。收到请求后,接收方 Servlets 将增加一个计数器变量并显示该变量的值。

A browser with JavaScript enabled is required for this page to operate properly\.  

Sender Applet

Receiver Applet

Note:

如果看不到 Servlets 正在运行,则需要至少安装Java SE 开发套件(JDK)6 更新 10版本。

Note:

如果看不到示例正在运行,则可能需要在浏览器中启用 JavaScript 解释器,以便 Deployment Toolkit 脚本能够正常运行。

要启用与另一个 applet 的通信,请获取对netscape.javascript.JSObject类的实例的引用。使用此实例来调用 JavaScript 函数。 SenderServlets 使用netscape.javascript.JSObject类的实例来调用名为sendMsgToIncrementCounter的 JavaScript 函数。

try {
    JSObject window = JSObject.getWindow(this);
    window.eval("sendMsgToIncrementCounter()");
} catch (JSException jse) {
    // ...
}

Note:

要编译引用了netscape.javascript包中的类的 Java 代码,请在 Classpath 中包含<your JDK path>/jre/lib/plugin.jar。在运行时,Java 插件软件会自动将这些类提供给 applet。

编写 JavaScript 函数,该函数将接收来自一个 Servlets 的请求并调用网页上另一个 Servlets 的方法。 sendMsgToIncrementCounter JavaScript 函数调用 ReceiverServlets 的incrementCounter方法。

<script>
    function sendMsgToIncrementCounter() {
        var myReceiver = document.getElementById("receiver");
        myReceiver.incrementCounter();
    } 
<script>

请注意,JavaScript 代码使用名称receiver来获取对该网页上的 ReceiverServlets 的引用。此名称应与部署 Receiver applet 时指定的id属性的值相同。

接下来显示Receiver applet 的incrementCounter方法。

public void incrementCounter() {
    ctr++;
    String text = " Current Value Of Counter: "
        + (new Integer(ctr)).toString();
    ctrLbl.setText(text);
}

如以下代码片段所示,将 Servlets 部署在网页上。您可以在AppletPage.html中查看发件人和接收者 Servlets 以及相关的 JavaScript 代码。

<!-- Sender Applet -->
<script src="https://www.java.com/js/deployJava.js"></script>
<script> 
    var attributes = { code:'Sender.class',
        archive:'examples/dist/applet_SenderReceiver/applet_SenderReceiver.jar',
        width:300, height:50} ;
    var parameters = { permissions:'sandbox' };
    deployJava.runApplet(attributes, parameters, '1.6');
</script>

<!-- Receiver Applet -->
<script> 
    var attributes = { id:'receiver', code:'Receiver.class',
        archive:'examples/dist/applet_SenderReceiver/applet_SenderReceiver.jar',
        width:300, height:50} ;
    var parameters = { permissions:'sandbox' };
    deployJava.runApplet(attributes, parameters, '1.6');
</script>

下载源代码用于“发件人接收器 Servlets”示例,以进一步进行实验。