`
jolestar
  • 浏览: 197254 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaFX尝鲜

    博客分类:
  • java
阅读更多
       java6出来以后,其一大特色就是对脚本语言的支持。以前只是粗略看了一下,没感觉到有什么具体的用处。最近又对java的特有脚本语言javaFX了解一下,感觉挺有意思。

一.以下是几个相关网址:
   1.sun javafx 官方网站:.www.sun.com/software/javafx/script/
   2.openjfx 网站:  openjfx.dev.java.net/
   3.JavaFX: First Steps - "Hello OnJava" App  www.oreillynet.com/onjava/blog/2007/05/javafx_first_steps_hello_onjav_1.html
   4.The JavaFX Script Programming Language Reference (Chinese version)

hello world 式的程序,很简单,稍看一下文档就明白了。
二.我比较喜欢这个语言的下面几个特征:
 
     这个语言融合了javascript,php,actionscript,sql 等许多脚本语言的特征。

    1.数组操作很有特色
         var nums = [0..3];
         ..  是范围表达式,上面的语句相当于  var nums == [0,1,2,3];
         数组支持类似于sql语句一样的查询表达式。
        var nums = select n*n from n in [1..100];
        结果便是从1到100每个数字的平方组成的数组。

     2.字符串
        javaFX中的字符串支持嵌入表达式
      
 
  1. var name = 'Joe';  
  2. var s = "Hello {name}";  
  3. System.out.println(s);  
       程序在输出结果的时候会自动把字符串中的表达式 {} 算出来,替换成结果 。这段程序的输出结果是 : Hello Joe
       这个特点和php很相似。用在来做结果输出模板时很有用,不必用自己创造标签语法,输出的时候又得用正则分析,替换。

    3.类与对象
       对象声明可以用一种类似于json的语法进行。
 
  1. class Person {  
  2.         attribute name: String;  
  3.         attribute parent: Person inverse Person.children;  
  4.         attribute children: Person* inverse Person.parent;  
  5.         function getFamilyIncome(): Number;  
  6.         function getNumberOfChildren(): Number;  
  7.         operation marry(spouse: Person);  
  8.     }  
  9.   
  10. var chris = Person {  
  11.         name: "Chris"  
  12.         children:  
  13.         [Person {  
  14.             name: "Dee"  
  15.         },  
  16.         Person {  
  17.             name: "Candice"  
  18.         }]  
  19.     };  
      
       4.很有特色的反射操作
      javaFX的反射很奇妙,我都在想,为什么java的反射也不做成这样。
 
  1. import java.lang.System;  
  2.   
  3.     System.out.println(1.class.Name) // prints "Number"  
  4.     System.out.println("Hello".class.Name); // prints "String"  
      方便吧?

三.在web中的尝试。

      看了说明,好像javaFX出现的目标是简化Swing的界面开发编程。一方面javaFX还没有一个好的所见即所得的ide支持,另外本人对web方面的编程比较感兴趣。所以进行了一个小实验。
     我的思路是用一个servlet拦截所有对fx的请求,根据requestURI,获得javafx文件的绝对路径,然后在servelt中调用java6的脚本引擎,解释执行。
 FXServlet.java

java 代码
 
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.io.InputStreamReader;  
  5. import javax.servlet.ServletException;  
  6. import javax.servlet.http.HttpServlet;  
  7. import javax.servlet.http.HttpServletRequest;  
  8. import javax.servlet.http.HttpServletResponse;  
  9.   
  10. import javax.script.Bindings;  
  11. import javax.script.ScriptContext;  
  12. import javax.script.ScriptEngine;  
  13. import javax.script.ScriptEngineManager;  
  14. import javax.script.SimpleScriptContext;  
  15.   
  16. public class FXServlet extends HttpServlet {  
  17.   
  18.     private String realPath;  
  19.       
  20.     public void doGet(HttpServletRequest request, HttpServletResponse response)  
  21.             throws ServletException, IOException {  
  22.   
  23.         this.doWork(request, response);  
  24.     }  
  25.   
  26.   
  27.     public void doPost(HttpServletRequest request, HttpServletResponse response)  
  28.             throws ServletException, IOException {  
  29.   
  30.         this.doWork(request, response);  
  31.     }  
  32.       
  33.     public void doWork(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{  
  34.         System.out.println("begin ....");  
  35.          try {  
  36.                 ClassLoader loader = Thread.currentThread().getContextClassLoader();  
  37.                 ScriptEngineManager manager = new ScriptEngineManager(loader);  
  38.                 ScriptEngine engine = manager.getEngineByExtension("fx");  
  39.   
  40.                 Bindings bindings = engine.createBindings();  
  41.                 //将request和response两个对象传递给脚本引擎。  
  42.                 bindings.put("REQUEST:javax.servlet.http.HttpServletRequest",request);  
  43.                 bindings.put("RESPONSE:javax.servlet.http.HttpServletResponse",response);  
  44.                   
  45.                 ScriptContext context = new SimpleScriptContext();  
  46.                 context.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);  
  47.                 context.setBindings(bindings, ScriptContext.ENGINE_SCOPE);  
  48.                 engine.setContext(context);  
  49.                 String uri = request.getRequestURI();  
  50.                 String contextPath = request.getContextPath();  
  51.                 //将requestURI中的contextPath替换掉  
  52.                 if(contextPath!=null&&contextPath.trim().length()>0){  
  53.                     uri = uri.replaceAll(contextPath,"");  
  54.                 }  
  55.                 //根据requestURI取得fx文件的绝对地址  我们把fx文件放在站点的 WEB-INF下的 jfx目录下。  
  56.                 String filePath = this.realPath + "WEB-INF"+ File.separator +"jfx" + uri;  
  57.                 File jfxFile =  new File(filePath);  
  58.                   
  59.                 if(!jfxFile.exists()){  
  60.                     response.sendError(404);  
  61.                 }else{  
  62.                     InputStreamReader reader = new InputStreamReader(new FileInputStream(jfxFile));  
  63.                     engine.eval(reader);  
  64.                     reader.close();  
  65.                 }  
  66.             } catch (Exception e) {  
  67.                 e.printStackTrace();  
  68.             }  
  69.             System.out.println("... end");  
  70.     }  
  71.   
  72.     public void init() throws ServletException {  
  73.         this.realPath = this.getServletContext().getRealPath("/");  
  74.     }  
  75.   
  76. }  

web.xml

xml 代码
 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.   <servlet>  
  8.     <servlet-name>FXServlet</servlet-name>  
  9.     <servlet-class>net.teamhot.jfxweb.FXServlet</servlet-class>  
  10.   </servlet>  
  11.   
  12.   <servlet-mapping>  
  13.     <servlet-name>FXServlet</servlet-name>  
  14.     <url-pattern>*.fx</url-pattern>  
  15.   </servlet-mapping>  
  16. </web-app>  

Hello.fx

 
  1. import java.lang.System;  
  2. import javax.servlet.http.HttpServlet;  
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5. import java.io.PrintWriter;  
  6.   
  7.     //接受从java中传递过来的参数  
  8.     var request:HttpServletRequest = REQUEST;  
  9.     var response:HttpServletResponse = RESPONSE;  
  10.       
  11.     var name = request.getParameter("name");  
  12.     var out:PrintWriter = response.getWriter();  
  13.       
  14.     var template = "Hello World!{if name ==null then 'guest' else name}";  
  15.   
  16.     out.print(template);  

运行:http://localhost:8080/jfx/Hello.fx
结果:Hello World!guest

运行:http://localhost:8080/jfx/Hello.fx?name=jolestar
结果:Hello World!jolestar

注意:本程序需要tomcat在jdk6环境下运行,如果还是提示找不到javax.script.ScriptEngine,请将jdk6 lib 下面的rt.jar中的javax.script包抽取出来,重新打包后放到 tomcat  common lib 下面。

这个程序没有考虑效率问题。其实这样的事情应该由容器完成,本人只是做了个小小的实验。
分享到:
评论
3 楼 einsteinm 2008-06-30  
将javafx当作服务器端脚本了啊????有优势吗?
2 楼 差沙 2007-07-30  
有点意思呀?抽空分析一下javfx的优势.
1 楼 galaxystar 2007-07-30  
楼主是把javafx当作了jsp或velocity等表示层html渲染技术了.
javafx效率不知道高不高?

不过例子不错.

希望楼主分析一下javafx的优势?

相关推荐

    javafx-sdk-11.0.2

    JavaFX SDK 11.0.2 是一个用于开发富客户端应用程序的工具包,它在Java 11及更高版本中不再作为标准JDK的一部分。这个独立的SDK提供了必要的库和工具,使得开发者能够在Java平台上构建具有丰富图形用户界面(GUI)的...

    javaFX Demo 模板案例

    JavaFX 是一个用于构建桌面、移动和嵌入式设备上富客户端应用的开源图形用户界面(GUI)工具包。它是Java平台的一部分,提供了一系列高级特性,包括2D和3D图形处理、媒体支持、CSS样式以及强大的数据绑定机制。本...

    javafx javafx javafx javafx

    javafx

    javafx 整合 sparingboot mybatis

    JavaFX 是一个用于开发桌面应用程序的Java库,它提供了丰富的用户界面组件和强大的图形功能。SpringBoot 是一个基于 Spring 框架的轻量级启动器,它简化了配置并帮助快速搭建应用。MyBatis 是一个优秀的持久层框架,...

    JavaFX 2.0 電子書 - Pro JavaFX 2

    最新JavaFx 2.0 電子書 In Pro JavaFX 2: A Definitive Guide to Rich Clients with Java Technology, Jim Weaver, Weiqi Gao, Stephen Chin, Dean Iverson, and Johan Vos show you how you can use the JavaFX ...

    JavaFX API文档

    JavaFX API文档。Sun公司已于2008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语言开发互联网应用程序(RIA)。该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich ...

    JavaFX 教程 (中文).docx

    【JavaFX 教程】 JavaFX 是一个用于创建桌面、移动和嵌入式系统的富客户端应用的Java平台。本教程将深入讲解如何使用JavaFX 8进行应用开发,特别是涉及Scene Builder工具,以及应用程序的打包和部署。Scene Builder...

    javafx使用指南-目录版.pdf

    JavaFX 使用指南 JavaFX 是一个基于 Java 语言的软件平台,用于开发桌面应用程序、移动应用程序和网络应用程序。它提供了一个统一的编程模型,可以跨平台运行,具有高清晰度的图形用户界面和多媒体支持。 JavaFX ...

    javafx实现好看的界面

    JavaFX是一种强大的Java库,用于构建桌面、移动和嵌入式系统的富客户端应用程序。它提供了丰富的用户界面组件和高级图形功能,使得开发者可以创建出美观、互动性强的应用程序。在这个"javafxѧϰ"压缩包中,很可能...

    JavaFx登录跳转完整教程含源码

    JavaFx登录跳转完整教程含源码 本教程将指导读者如何使用JavaFx创建一个完整的登录跳转系统,包括登录页面的设计、验证账号密码、跳转到应用程序的首页等步骤。 知识点1:JavaFx简介 JavaFx是Oracle公司推出的一...

    javaFX高级教程JavaFX2.0的FXML语言 中文文档

    ### JavaFX 2.0 的 FXML 语言高级教程 #### 概述 JavaFX 2.0 引入了一种新的声明性标记语言——FXML(发音为 “fizz-le”),这是一种基于 XML 的语言,专门用于定义应用程序的用户界面。通过使用 FXML,开发者...

    javafx-src.zip_javaFx_退火_退火算法

    JavaFX 是一个用于创建桌面应用、移动应用和Web应用的开放源代码图形用户界面(GUI)工具包。它提供了一套丰富的UI控件、2D和3D图形处理能力,以及媒体播放支持,使得开发者可以构建出具有现代感且交互性强的应用...

    javafx2.2.3 eclipse4.2.1插件

    JavaFX是Oracle公司推出的用于构建桌面、Web以及移动设备上富客户端应用的平台,它提供了丰富的用户界面组件和强大的图形功能。JavaFX 2.2.3是该平台的一个版本,它增强了性能、稳定性和兼容性,使得开发者可以更加...

    javafx-11.0.2 jar.rar

    JavaFX是Java平台上的一个强大的富客户端应用开发框架,它为构建桌面、移动和Web应用程序提供了丰富的图形用户界面(GUI)工具集。标题中的"javafx-11.0.2 jar.rar"指的是JavaFX 11.0.2版本的库文件,这些文件被压缩...

    简单的JavaFx登陆

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的框架,自Java 7版本开始成为标准的一部分。这个“简单的JavaFX登录”项目是利用JavaFX库创建的一个基本用户登录界面,旨在帮助开发者了解如何在...

    JavaFX.zip_JavaFX利用Vlc播放视频_JavaFX播放视频_believed75v_javaFx VLC_jav

    JavaFx做界面VLC做视频处理,请看源码

    javaFx pdf 阅读软件

    JavaFX PDF阅读软件是一款基于JavaFX技术开发的PDF文档查看应用程序。它利用开源库icepdf来解析和渲染PDF文档,为用户提供一个用户友好的界面来查看和操作PDF文件。下面我们将详细探讨JavaFX、icepdf以及如何使用...

    JavaFX官方教程(中文版)

    JavaFX是一种用于构建桌面、移动和嵌入式设备上的富互联网应用程序(Rich Internet Applications, RIA)的Java库。它是Oracle公司推出的,旨在提供一种更简单、更强大的方式来创建具有丰富图形用户界面的应用程序。...

    JavaFx开发Windows画图板工具

    JavaFX是一种强大的、基于Java的富客户端应用开发框架,它为创建桌面、移动和Web应用程序提供了丰富的图形用户界面(GUI)工具集。本项目“JavaFx开发Windows画图板工具”旨在模仿Windows操作系统内置的画图应用,为...

    JavaFx 官方源码例子

    JavaFX是Java平台上的一个强大的用户界面工具包,用于创建桌面、移动和Web应用程序。它提供了丰富的图形和媒体功能,支持2D和3D渲染、CSS样式以及自定义控件。这个压缩包包含了一些官方提供的JavaFX源码示例,非常...

Global site tag (gtag.js) - Google Analytics