瓜瓜派的瓜瓜
分类: Java
2012-01-09 17:07:57
作者:曹祺 Blog: http://blogs.sun.com/greysh Web: Email: 本文链接: http://developers.sun.com.cn/blog/functionalca/entry/javafx_applet%E4%B8%8E%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B9%8B%E9%97%B4%E7%9A%84%E9%80%9A%E4%BF%A1 工程下载: http://developers.sun.com.cn/blog/functionalca/resource/Greysh/FCA_Greysh_SA.zip 难度:入门 摘要 随着富互联网应用(RIA,Rich InternetApplications)的发展,越来越多的公司开始开发自己的RIA语言,比如Sun的JavaFX,Adobe的Flex,微软的WPF,Silverlight。然而Java Applet和AdobeFlash应该属于最早RIA应用。由于Applet有很多要改进的地方,比如AWTUI,客户端必须装很大体积的JVM,于是Sun主推JavaFX.但是Applet依然有很多比较成熟的应用,比如AOL的ICQ2Web版本以前便有FLASH版本和Applet版本。本文主要介绍JavaFX,Applet如何和服务器进行交互,服务器以Servlet为例。 applet与servlet的通信 applet虽然是在web页面显示,但是实质上是从远程下载下来的java应用程序,执行的时候并不是IE的线程,因此对于这种情况,不可能像HTML表单那样去DOPOST和DOGET,最主要的方法是打开一个socket连接,然后构造带参数URL,发送请求。 Servlet端的主要代码如下 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); Runtime runtime = Runtime.getRuntime(); out.println("User name : " + request.getParameter("user")); out.println("Free Memory : " + runtime.freeMemory()); } Servlet主要是根据用户参数去得到用户名然后显示服务器上JVM的可用内存 对于applet只需要打开一个socket连接,然后在URL上进行参数构造,然后发送出去即可 参数构造:String url = "/Memory?user=" + user; 打开连接: URLConnection connect = (new URL(url)).openConnection(); 设置连接参数,比如缓存,输入和输出: connect.setDefaultUseCaches(false); connect.setUseCaches(false); connect.setDoInput(true); connect.setDoOutput(true); 打开连接: connect.connect(); DataInputStream input = new DataInputStream(connect.getInputStream()); String message = input.readLine(); int line = 20; while (message != null) { g.drawString(message, 5, line);//显示出来 message = input.readLine(); line+=20; } input.close(); 这样就可以得到服务器上响应,当然,如果要applet要访问webservice,原理和这个是大同小异,只是发送的请求到WSDL,返回XML,然后进行SAX或者DOM解析即可,由于applet是基于java的,如果采用其他的通信,比如RMI,JMS也是可以的,只不过发送的时候改为相应的协议即可。 javafx与servlet的通信 由于javafx做了很大程度的简化,进行通信的时候类似于JQuery发送Ajax请求,因为javafx主要发送JSON对象,所以配置的时候只要配置好JSON参数就可以发送出去了,不需要在Socket层进行处理 核心代码如下: 这段代码主要是配置发送request后返回response 传入request的url,得到response public function getResponse(url:String){ |