- 浏览: 1657942 次
- 性别:
文章分类
- 全部博客 (2929)
- 非技术 (18)
- Eclipse (11)
- JAVA (31)
- 正则表达式 (0)
- J2EE (4)
- DOS命令 (2)
- WEB前端 (52)
- JavaScript (69)
- 数据库 (8)
- 设计模式 (0)
- JFreechart (1)
- 操作系统 (1)
- 互联网 (10)
- EasyMock (1)
- jQuery (5)
- Struts2 (12)
- Spring (24)
- 浏览器 (16)
- OGNL (1)
- WebService (12)
- OSGi (14)
- 软件 (10)
- Tomcat (2)
- Ext (3)
- SiteMesh (2)
- 开源软件 (2)
- Hibernate (2)
- Quartz (6)
- iBatis (2)
最新评论
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中的字符串支持嵌入表达式
- var name='Joe';
- var s= "Hello{name}" ;
- System.out.println(s);
程序在输出结果的时候会自动把字符串中的表达式 {} 算出来,替换成结果 。这段程序的输出结果是 : Hello Joe
这个特点和php很相似。用在来做结果输出模板时很有用,不必用自己创造标签语法,输出的时候又得用正则分析,替换。
3.类与对象
对象声明可以用一种类似于json的语法进行。
- class Person{
- attributename:String;
- attributeparent:PersoninversePerson.children;
- attributechildren:Person*inversePerson.parent;
- functiongetFamilyIncome():Number;
- functiongetNumberOfChildren():Number;
- operationmarry(spouse:Person);
- }
- varchris=Person{
- name:"Chris"
- children:
- [Person{
- name:"Dee"
- },
- Person{
- name:"Candice"
- }]
- };
4.很有特色的反射操作
javaFX的反射很奇妙,我都在想,为什么java的反射也不做成这样。
- import java.lang.System;
- System.out.println(1 . class .Name) //prints"Number"
- System.out.println("Hello" . class .Name); //prints"String"
方便吧?
三.在web中的尝试。
看了说明,好像javaFX出现的目标是简化Swing的界面开发编程。一方面javaFX还没有一个好的所见即所得的ide支持,另外本人对web方面的编程比较感兴趣。所以进行了一个小实验。
我的思路是用一个servlet拦截所有对fx的请求,根据requestURI,获得javafx文件的绝对路径,然后在servelt中调用java6的脚本引擎,解释执行。
FXServlet.java
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.script.Bindings;
- import javax.script.ScriptContext;
- import javax.script.ScriptEngine;
- import javax.script.ScriptEngineManager;
- import javax.script.SimpleScriptContext;
- public class FXServlet extends HttpServlet{
- private StringrealPath;
- public void doGet(HttpServletRequestrequest,HttpServletResponseresponse)
- throws ServletException,IOException{
- this .doWork(request,response);
- }
- public void doPost(HttpServletRequestrequest,HttpServletResponseresponse)
- throws ServletException,IOException{
- this .doWork(request,response);
- }
- public void doWork(HttpServletRequestrequest,HttpServletResponseresponse) throws ServletException,IOException{
- System.out.println("begin...." );
- try {
- ClassLoaderloader=Thread.currentThread().getContextClassLoader();
- ScriptEngineManagermanager=new ScriptEngineManager(loader);
- ScriptEngineengine=manager.getEngineByExtension("fx" );
- Bindingsbindings=engine.createBindings();
- //将request和response两个对象传递给脚本引擎。
- bindings.put("REQUEST:javax.servlet.http.HttpServletRequest" ,request);
- bindings.put("RESPONSE:javax.servlet.http.HttpServletResponse" ,response);
- ScriptContextcontext=new SimpleScriptContext();
- context.setBindings(bindings,ScriptContext.GLOBAL_SCOPE);
- context.setBindings(bindings,ScriptContext.ENGINE_SCOPE);
- engine.setContext(context);
- Stringuri=request.getRequestURI();
- StringcontextPath=request.getContextPath();
- //将requestURI中的contextPath替换掉
- if (contextPath!= null &&contextPath.trim().length()> 0 ){
- uri=uri.replaceAll(contextPath,"" );
- }
- //根据requestURI取得fx文件的绝对地址我们把fx文件放在站点的WEB-INF下的jfx目录下。
- StringfilePath=this .realPath+ "WEB-INF" +File.separator+ "jfx" +uri;
- FilejfxFile=new File(filePath);
- if (!jfxFile.exists()){
- response.sendError(404 );
- }else {
- InputStreamReaderreader=new InputStreamReader( new FileInputStream(jfxFile));
- engine.eval(reader);
- reader.close();
- }
- }catch (Exceptione){
- e.printStackTrace();
- }
- System.out.println("...end" );
- }
- public void init() throws ServletException{
- this .realPath= this .getServletContext().getRealPath( "/" );
- }
- }
web.xml
- <? xml version = "1.0" encoding = "UTF-8" ?>
- < web-app version = "2.4"
- xmlns = "http://java.sun.com/xml/ns/j2ee"
- xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation ="http://java.sun.com/xml/ns/j2ee
- http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
- < servlet >
- < servlet-name > FXServlet </ servlet-name >
- < servlet-class > net.teamhot.jfxweb.FXServlet </ servlet-class >
- </ servlet >
- < servlet-mapping >
- < servlet-name > FXServlet </ servlet-name >
- < url-pattern > *.fx </ url-pattern >
- </ servlet-mapping >
- </ web-app >
Hello.fx
- import java.lang.System;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.PrintWriter;
- //接受从java中传递过来的参数
- varrequest:HttpServletRequest=REQUEST;
- varresponse:HttpServletResponse=RESPONSE;
- varname=request.getParameter("name" );
- varout:PrintWriter=response.getWriter();
- vartemplate="HelloWorld!{ifname==nullthen'guest'elsename}" ;
- 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 下面。
转自:http://jolestar.javaeye.com/blog/107017
发表评论
-
使用Java 动态代理实现AOP
2009-07-22 14:29 606目前整个开发社区对AOP(Aspect Oriented P ... -
Java中用动态代理类实现记忆功能
2009-07-22 14:30 703记忆是衍生自lisp,python, ... -
JAVA动态代理实现方法
2009-07-22 14:31 694在目前的Java开发包中包含了对动态代理的支持,但是其实现只支 ... -
对代理模式与Java动态代理类的理解(转)
2009-07-22 14:32 7661. 代理模式 代理模式的作用是:为其他对象 ... -
十年与java 相关的名字
2009-07-22 17:12 731RickardOberg:J2EE奇才 文/ ... -
搞懂java中的synchronized关键字
2009-07-28 17:48 607实际上,我关于java的基 ... -
字符串转化为unicode编码
2009-07-31 16:16 901package com.util; import java. ... -
移位运算符的规则及其数学意义
2009-07-31 18:02 779移位运算符就是在二进制的基础上对数字进行平移。按照平移的方 ... -
几个谜题,深入的了解java
2009-08-03 17:02 731在2009年的JavaOne大会上,Joshua Bloch和 ... -
一、我对java中编码的理解(摘)
2009-08-06 09:17 6241. 编码的产生 对电 ... -
四、深入下package,import:(摘)
2009-08-06 09:18 706注:因package,import涉及较多内容,另开一个帖子了 ... -
三、我对java中类路径的理解(摘)
2009-08-06 09:18 529Java中的类路径分“编译后的存放路径” 和 “运行时的查找路 ... -
二、我对java中类装载的理解(摘)
2009-08-06 09:18 7751.Java中的所有类,必须 ... -
java class文件格式解析(摘)
2009-08-06 09:19 7901.目的 ... -
关于 JavaBean 规范你还是应该知道的二三事
2009-08-06 09:22 823作为 Java 程序员,对于 JavaBean 也许你会说再熟 ... -
synchronized(this)的几个简单示例
2009-08-06 10:31 822一、当两个并发线程访问同一个对象object中的这个synch ... -
java压缩对象 与 对象的序列化
2009-08-07 17:39 668gzip是目前广泛应用的一种压缩方式,它具有很高的压缩比和压缩 ... -
Java常见问题集锦
2009-08-12 12:22 681如何设置Java 2(JDK1.2)的环境变量? 哪些Jav ... -
Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
2009-08-17 17:24 7061. 在Servlet/Filter等Servlet web环 ... -
JAVA进阶:VO(DTO)与PO(DAO)之间的转换
2009-08-26 13:58 898PO即 Persistence Object VO ...
相关推荐
JavaFX SDK 11.0.2 是一个用于开发富客户端应用程序的工具包,它在Java 11及更高版本中不再作为标准JDK的一部分。这个独立的SDK提供了必要的库和工具,使得开发者能够在Java平台上构建具有丰富图形用户界面(GUI)的...
JavaFX 是一个用于构建桌面、移动和嵌入式设备上富客户端应用的开源图形用户界面(GUI)工具包。它是Java平台的一部分,提供了一系列高级特性,包括2D和3D图形处理、媒体支持、CSS样式以及强大的数据绑定机制。本...
javafx
JavaFX 是一个用于开发桌面应用程序的Java库,它提供了丰富的用户界面组件和强大的图形功能。SpringBoot 是一个基于 Spring 框架的轻量级启动器,它简化了配置并帮助快速搭建应用。MyBatis 是一个优秀的持久层框架,...
最新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文档。Sun公司已于2008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语言开发互联网应用程序(RIA)。该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich ...
【JavaFX 教程】 JavaFX 是一个用于创建桌面、移动和嵌入式系统的富客户端应用的Java平台。本教程将深入讲解如何使用JavaFX 8进行应用开发,特别是涉及Scene Builder工具,以及应用程序的打包和部署。Scene Builder...
JavaFX 使用指南 JavaFX 是一个基于 Java 语言的软件平台,用于开发桌面应用程序、移动应用程序和网络应用程序。它提供了一个统一的编程模型,可以跨平台运行,具有高清晰度的图形用户界面和多媒体支持。 JavaFX ...
JavaFX是一种强大的Java库,用于构建桌面、移动和嵌入式系统的富客户端应用程序。它提供了丰富的用户界面组件和高级图形功能,使得开发者可以创建出美观、互动性强的应用程序。在这个"javafxѧϰ"压缩包中,很可能...
JavaFx登录跳转完整教程含源码 本教程将指导读者如何使用JavaFx创建一个完整的登录跳转系统,包括登录页面的设计、验证账号密码、跳转到应用程序的首页等步骤。 知识点1:JavaFx简介 JavaFx是Oracle公司推出的一...
JavaFX 是一个用于创建桌面应用、移动应用和Web应用的开放源代码图形用户界面(GUI)工具包。它提供了一套丰富的UI控件、2D和3D图形处理能力,以及媒体播放支持,使得开发者可以构建出具有现代感且交互性强的应用...
### JavaFX 2.0 的 FXML 语言高级教程 #### 概述 JavaFX 2.0 引入了一种新的声明性标记语言——FXML(发音为 “fizz-le”),这是一种基于 XML 的语言,专门用于定义应用程序的用户界面。通过使用 FXML,开发者...
JavaFX是Oracle公司推出的用于构建桌面、Web以及移动设备上富客户端应用的平台,它提供了丰富的用户界面组件和强大的图形功能。JavaFX 2.2.3是该平台的一个版本,它增强了性能、稳定性和兼容性,使得开发者可以更加...
JavaFX是Java平台上的一个强大的富客户端应用开发框架,它为构建桌面、移动和Web应用程序提供了丰富的图形用户界面(GUI)工具集。标题中的"javafx-11.0.2 jar.rar"指的是JavaFX 11.0.2版本的库文件,这些文件被压缩...
JavaFX是一种用于构建桌面、移动和嵌入式设备上的富客户端应用程序的框架,自Java 7版本开始成为标准的一部分。这个“简单的JavaFX登录”项目是利用JavaFX库创建的一个基本用户登录界面,旨在帮助开发者了解如何在...
JavaFX PDF阅读软件是一款基于JavaFX技术开发的PDF文档查看应用程序。它利用开源库icepdf来解析和渲染PDF文档,为用户提供一个用户友好的界面来查看和操作PDF文件。下面我们将详细探讨JavaFX、icepdf以及如何使用...
JavaFX教程;JavaFX教程;JavaFX教程JavaFX教程;
JavaFX是一种用于构建桌面、移动和嵌入式设备上的富互联网应用程序(Rich Internet Applications, RIA)的Java库。它是Oracle公司推出的,旨在提供一种更简单、更强大的方式来创建具有丰富图形用户界面的应用程序。...
JavaFx做界面VLC做视频处理,请看源码
JavaFX是一种强大的、基于Java的富客户端应用开发框架,它为创建桌面、移动和Web应用程序提供了丰富的图形用户界面(GUI)工具集。本项目“JavaFx开发Windows画图板工具”旨在模仿Windows操作系统内置的画图应用,为...