Chinaunix首页 | 论坛 | 博客
  • 博客访问: 621266
  • 博文数量: 233
  • 博客积分: 2221
  • 博客等级: 大尉
  • 技术积分: 3184
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-16 14:01
个人简介

瓜瓜派的瓜瓜

文章分类

全部博文(233)

文章存档

2013年(28)

2012年(197)

2011年(8)

分类: 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){ 
         def request = HttpRequest {
            url: bind location
            method: HttpRequest.GET//采用GET方法
            onInput: function(inputStream: java.io.InputStream) {
                def parser = PullParser {
                    documentType: PullParser.JSON//采用JSON对象
                    input: inputStream
                    onEvent:bind onEvents
                };
                parser.parse();
                inputStream.close();
      }
      onException: function(ex: Exception) {
                excepton=ex.getMessage();
      }
      }
     request.start();
}

  调用的时候只需要传入url即可,类似JQuery
阅读(2128) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~