JavaFX结合Hessian可以访问服务器端Web应用,JavaFX等RIA和Struts等是同一个层面的,都属于表现层,架构应该是这样:JavaFX + Hessian + Servlet + Spring/Seam/Jdon。
Hessian主要是一个Proxy开源项目,可以让远程富客户端RIA可以象调用本地Java代码一样调用,类似RMI,不过是基于Http的RMI。
这里关键是要自己做一个Servlet,也就是Hessian通讯的服务器端,Servlet是一个业务层服务的代理,Flamingo开源项目已经提供Seam/Spring的现成Servlet(http://exadel.com/web/portal/flamingo),而Jdon框架的Servlet需要参考Flamingo做一个,我会拓展到下一个版本发布。
首先看看步骤: 一. 客户端代码分两个,一个JavaFX 相当于MVC模式中的View,与B/S架构中的html类似;一个是Java客户端代码,相当于MVC的Controller,主要用来和服务器通讯调用(通过Hessian)。
下面是Java客户端控制器代码:
public class HelloworldClient { public static HelloworldClient CLIENT; private String _url; private HelloworldClient(String string) { _url = string; } private HelloService _service; public static void setServerUrl(String url) { CLIENT = new HelloworldClient(url); } private HelloService getService() { if (_service == null) { try { //通过Hessian调用服务器端服务 HessianProxyFactory factory = new HessianProxyFactory(); _service = (HelloService) factory.create(HelloService.class, _url); } catch (MalformedURLException ex) { System.out.println(ex); } } return _service; } //供JavaFX调用 public String hello(String s) { return getService().hello(s); } } |
下面是JavaFX代码:
class Hello { attribute name:String; attribute str:String; } var helloModel = new Hello(); HelloworldClient.setServerUrl(ARGUMENTS:String); Frame { width: 300 height: 200 title: "Exadel Flamingo Helloworld Spring Sample" centerOnScreen: true onClose: operation(){ System.exit(0);} content: GridPanel { border: EmptyBorder { top: 30 left: 30 bottom: 30 right: 30 } rows: 3 columns: 1 vgap: 10 cells: [TextField { value: bind helloModel.name }, Button { text: "Say Hello!" action: operation() { //调用Controller控制器HelloworldClient的hello方法 //将返回结果赋值给JavaFX的数据对象helloModel helloModel.str = HelloworldClient.CLIENT.hello(helloModel.name); } }, Label { text: bind "Server says: {helloModel.str}" }] } visible: true }; |
二. 服务器端主要是配置Servlet,在Web.xml中配置如下Servlet:
以上Servlet是针对Spring框架的,Flamingo 也有Seam框架,当然,Flamingo不会提供Jdon框架的Servlet,不过参考Spring的Servlet实现起来应该很方便,我会加入Jdon框架下一个版本。
这样,使用JavaFX我们就可以方便实现一个富客户端的新型多层C/S架构应用,JavaFX当然不会替代AJAX,但是拥有一些自己的独特特点,对于一些领域应用还是有市场的,加上简洁的类似JavaScrpt的表达方式,无缝和java结合,真的是Swing或Applet的替代物。
[该贴被banq于2009-06-29 10:02修改过] [该贴被banq于2009-06-29 10:02修改过]