扯淡时间:
现在是2012年6月12日,Applet这个词语似乎离我们渐渐远去,今天,我又把它带回来,是因为,它有着独一无二的魅力。
为什么起这个标题?
完全是因为SEO,这种标题可能更容易被人搜索到,至少,在我完全不会的时候,就会搜这么样子的关键词。如果按照我以前的个性,我绝对会起一个“Applet初探门径”之类的标题。
为什么Bloging?
Bloging是一种良好的习惯,有助于自己深入理解一个知识,Bloging的同时又是梳理的过程。再者,可能很久以后,回头看看,会很有意思。如果,同时又能为自己积攒点RP,这件事就太爽了。也有这样的可能,不过几率很小,就是你的某一个观点不正确,好心的路人(我经常是好心的路人)会帮你指出,和你讨论,这样子,又可以帮助自己进步,但这个几率实在太小了(CSDN从来没有过),但是我还是期待我一样的人的出现,让我们成为朋友吧~
Show Time(一下观点基本属于闭门原创,百度和谷歌还有官网能够出现的部分尽量不出现在下面的内容里)
Applet是一个客户端技术,一般嵌入在html页面中,就是一个Applet标签,或者是Object标签。运行原理(这个很重要)是这样的,在执行前,有个很长的加载过程,Applet的所有Class都从服务端(或者服务器,下面我就叫服务端,习惯了)通过Socket方式传送过来,加载到“本地的虚拟机”中,然后利用本地计算能力执行该应用程序。
所以,它完全是个客户端技术,相当于本地运行的一个Java程序,只不过,有一个部分的Class要从服务端通过网络加载到本地的ClassLoader(类加载器,神器)里,仅此而已。
为什么想到使用Applet?
假设项目是B/S架构(随着互联网的发展,这种架构将越来越具有优越性)的,你想提供给浏览器的用户一个文件上传的功能,上传的路径是固定的,你需要做的就是选择文件,点击确定,开始上传,上传完成后,显示已完成。
然后我们开始做技术选择,加入首先想到的是Servlet/JSP技术,比如用struts或者smartupload框架,然后页面就用html的标签,写出来可能是这样的:
<body>
<input type="file"/>
<form action="doUpload">
<input type="submit" value="上传"/>
</form>
</body>

http://www.roseindia.net/struts/struts2/struts-2-file-upload.shtml (参照这个)
但是,这种方式进度条很难实现,而且大小可能还受限制。因为它是通过http请求方式来更新界面的,必须实现局部异步更新(Ajax),才能实现进度条,而且进度粒子太粗,不好控制。
其次,加入我们想到FlexFTP框架,基于Flex的FTP客户端,介绍见这里,缺点说了一堆。什么大小限制啦,传输不稳定啦,就一个好处,好看,好看不好使,没用。
http://code.google.com/p/fl-ftp/
(PS:另外,在网上找到一个Flex实现的独立的FTPClient,感觉非常强大,但不是需求想要的,不过因为太强大了,所以贴出来,下面是网址。
http://maliboo.pl/projects/FlexFTP/
我试着用Flex sdk4.51改了一下,运行良好~
)
最后,我们决定用Applet来实现,使用apache.commons.net的ftp框架。因为身为一个搞Java的人,能用Java做,就用Java做,省不少熟悉语言的功夫,而且,小巧精悍,非常满足需求。服务端假设一个apache ftpserver,然后调用ftpclient的api完成工作。(这里不讨论apache ftpserver的部署问题,另写一篇另作讨论)
操作步骤:
1.Java Swing界面,打开MyEclipse的可视化工具,新建一个Applet,然后拖吧拖吧弄一个这样的界面:

然后,selec file按钮点进去,添加选择文件事件;Start按钮点进去,添加开始上传的动作;进度条就用CopyStreamListener的bytesTransferred函数来操作。就像在本地编码一样,方便自如。
2.调用ftp api,编写传输代码:
ftp.storeFile("storedFilename", inputStream);
就这么一行,完事。(这句话我用了一个线程哦,小技巧)
3.滚动条实现:
public void bytesTransferred(long totalBytesTransferred,
int bytesTransferred, long streamSize) {
probar.setValue((int) totalBytesTransferred);
probar.repaint();
}
完事。
运行效果:

Applet如何部署
简单说就是一个标签,但是你可能不知道目录的格式,细节是最花时间的。下面这个链接对目录格式有个相当明确的勾勒,感谢他给予我的帮助。
http://blog.csdn.net/chenxiandiao316/article/details/7009643
Applet安全策略话题
你要假设到网页中,让浏览器客户可以用,就必须面对这个问题,这个不算是问题,就是多这么一步麻烦。为你的Applet程序jar包,做一个签名。详细步骤,参加下面这个链接,讲的非常好,鉴于讲的这么好,我就不重复了,也非常感谢他给于我的帮助。
http://blog.csdn.net/mzyp/article/details/5217081
Applet示例源码(这个最靠谱)
http://download.csdn.net/detail/bicaipiaohainanzhong/4369663