与其他 Servlets 进行通信
JavaServlets 可以通过使用父网页中的 JavaScript 函数与其他 JavaServlets 进行通信。 JavaScript 函数通过从一个 Servlets 接收消息并调用其他 Servlets 的方法来实现 Servlets 之间的通信。有关 Java 代码和 JavaScript 代码之间的交互的更多信息,请参见以下主题:
您应该避免使用以下机制来查找其他 Servlets 并在 Servlets 之间共享数据:
-
避免使用静态变量在 Servlets 之间共享数据。
-
不要使用AppletContext类的
getApplet
和getApplets
方法来查找其他 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”示例,以进一步进行实验。