TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
java Applet是如此的平常以至于几乎任何Java的入门书籍中都有它的详细描述,但这里要展示的是它不平常的另一面:Applet既是一个Java Class, 又是Web页面DOM结构的一个节点,具有操纵DOM从而修改页面的强大能力。
我们看到的浏览器中的千变万化的页面在浏览器内部表达为文档对象模型(DOM),对它的修改会直接影响页面的外观。时下流行的AJAX的基本技术就是用JavaScript从网上取得数据来局部地修改页面的DOM,已达到流畅的客户体验的目的。
其实,Java Applet 很早就可以存取其所在页面的DOM,只是由于这方面的文档或例子比较少,甚至java.sun.com上 Java 教程中都没有提及这个强大的特性,以至于很多人没有意识到它。
与Java应用程序相比,Java 小程序并不小,它除去可以具有普通Java应用程序的所有功能外,还可以访问浏览器中的服务,包括DOM。
对DOM的操纵有两种方法,一种是通过 netscape.javascript.JSObject,这在一些JavaScript的书中可以看到;第二种方法是通过Common DOM API,这个API包含了大量的类,是DOM标准的一种Java语言绑定的实现,与第一种方法相比具有更强的类型安全性。
这里举一个小例子来通过Java Applet来修改DOM,以隐藏/显示页面。简单地说,是修改body元素的style属性。当然,Applet可以修改DOM 的任何部分,包括插入/删除/修改节点和其属性。
// TestDom.java,在jdk1.5下编译通过。
import javax.swing.*;
import java.awt.event.*;
import com.sun.java.browser.dom.*;
import org.w3c.dom.*;
import org.w3c.dom.HTML.*;
import org.w3c.dom.css.*;
public class TestDom extends JApplet implements ActionListener {
public void init(){
JButton btn = new JButton("Test");
btn.addActionListener(this);
add(btn);
}
public void actionPerformed(ActionEvent ae) {
try{
DOMService ds = DOMService.getService(this);
final JApplet applet = this;
HTMLDocument doc = (HTMLDocument)ds.invokeAndWait(
new DOMAction(){
public Object run(DOMAccessor accessor){
return accessor.getDocument(applet);
}
});
HTMLBodyElement body = (HTMLBodyElement)doc.getBody();
CSSStyleDeclaration style = ((ElementCSSInlineStyle)body).getStyle();
style.setProperty("visibility", "hidden", null);
Thread.sleep(3000);
style.setProperty("visibility", "visible", null);
} catch (Exception e) {
e.printStackTrace();
}
}
}
将下面一行嵌入某个页面中,按下按钮,就可以隐藏那个页面3秒。注意MAYSCRIPT,这个例子需要它才能在Mozilla/Firefox中工作。 IE不需要。
<applet codeE = "TestDom.class" width = 100 height = 20 mayscript></APPLET>
事实上,我们可以用Java Applet来实现AJAX,与其它实现方式相比,它具有Java平台的强大功能,如网络连接,安全等等。在Internet上Java Applet可以用HTTP来和服务器端通信,而在Intranet或局域网中可以使用更快捷的方式如Socket.
Applet还可以实现RIA(Rich Internet Application),这已经属于Web 2.0的技术了。有兴趣的开发者可以看看http://www.nexaweb.com所用的jRex. 它实质上是在客户端用Applet作为引擎来解释以XML来表述的UI。
Java技术与浏览器技术的结合,随着Web的发展越来越得到认同。Applet技术将会扮演一个越来越重要的角色。
源码下载:http://file.javaxxz.com/2014/11/5/235606671.zip |
|