- 浏览: 1595138 次
- 性别:
文章分类
- 全部博客 (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 580目前整个开发社区对AOP(Aspect Oriented P ... -
Java中用动态代理类实现记忆功能
2009-07-22 14:30 680记忆是衍生自lisp,python, ... -
JAVA动态代理实现方法
2009-07-22 14:31 664在目前的Java开发包中包含了对动态代理的支持,但是其实现只支 ... -
对代理模式与Java动态代理类的理解(转)
2009-07-22 14:32 7421. 代理模式 代理模式的作用是:为其他对象 ... -
十年与java 相关的名字
2009-07-22 17:12 702RickardOberg:J2EE奇才 文/ ... -
搞懂java中的synchronized关键字
2009-07-28 17:48 579实际上,我关于java的基 ... -
字符串转化为unicode编码
2009-07-31 16:16 859package com.util; import java. ... -
移位运算符的规则及其数学意义
2009-07-31 18:02 729移位运算符就是在二进制的基础上对数字进行平移。按照平移的方 ... -
几个谜题,深入的了解java
2009-08-03 17:02 701在2009年的JavaOne大会上,Joshua Bloch和 ... -
一、我对java中编码的理解(摘)
2009-08-06 09:17 5941. 编码的产生 对电 ... -
四、深入下package,import:(摘)
2009-08-06 09:18 671注:因package,import涉及较多内容,另开一个帖子了 ... -
三、我对java中类路径的理解(摘)
2009-08-06 09:18 500Java中的类路径分“编译后的存放路径” 和 “运行时的查找路 ... -
二、我对java中类装载的理解(摘)
2009-08-06 09:18 7461.Java中的所有类,必须 ... -
java class文件格式解析(摘)
2009-08-06 09:19 7601.目的 ... -
关于 JavaBean 规范你还是应该知道的二三事
2009-08-06 09:22 793作为 Java 程序员,对于 JavaBean 也许你会说再熟 ... -
synchronized(this)的几个简单示例
2009-08-06 10:31 782一、当两个并发线程访问同一个对象object中的这个synch ... -
java压缩对象 与 对象的序列化
2009-08-07 17:39 642gzip是目前广泛应用的一种压缩方式,它具有很高的压缩比和压缩 ... -
Java常见问题集锦
2009-08-12 12:22 650如何设置Java 2(JDK1.2)的环境变量? 哪些Jav ... -
Java在不同环境下获取当前路径的方法--this.getClass().getResource("")
2009-08-17 17:24 6711. 在Servlet/Filter等Servlet web环 ... -
JAVA进阶:VO(DTO)与PO(DAO)之间的转换
2009-08-26 13:58 834PO即 Persistence Object VO ...
相关推荐
javafx
JavaFX API文档。Sun公司已于2008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语言开发互联网应用程序(RIA)。该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich ...
JavaFx做界面VLC做视频处理,请看源码
JavaFX教程;JavaFX教程;JavaFX教程JavaFX教程;
javaFX Demo 模板案例
Sun公司已于2008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语言开发互联网应用程序(RIA)。该产品于2007年5月在JavaOne大会上首次对外公布。JavaFX技术主要应用于创建Rich Internet ...
linux系统下,可用如下两命令运 行 javafx 的 jar包 export JAVAFX=/home/这里是linux的用户名文件夹/javafx-sdk-18/lib java --module-path $JAVAFX --add-modules javafx.fxml,javafx.controls -jar demo.jar 或都...
JavaFX api文档 chm格式
javafx2.0,java,javafx,例子,代码 Sun公司(已于20092008年12月05日发布了JavaFX技术的正式版,它使您能利用 JavaFX 编程语 言开发富互联网应用程序(RIA)。JavaFX Script编程语言(以下称为JavaFX)是Sun微...
Java11以后的版本不再集成Javafx,需要单独下载
javaFX高级教程JavaFX2.0的FXML语言 中文文档,想免费上传,CSDN不同意,选了一个最小资源分2
javafx8api文档
javaFX登陆和跳转
用JavaFx开发的模仿Windows的画图板工具
闲来无事,写了个Springboot JavaFx mysql mybatis整合模板,方便以后windows桌面程序迅速开发,直接套用即可! 要用的话,application配置文件自己改一下数据库账号密码,以及mapper和.fxml的Controller路径!
资源名称:JavaFX 8 技术手册资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
javaFX单独放大缩小图片和移动图片的很多,很难找到能缩放和移动一起实现的例子。由于项目的需要就自己写了个javaFX实现图片放大(以图片中心放大)、缩小、鼠标移动。(netbeans项目)
javaFX刽子手图形
JavaFX Script编程语言是Sun微系统公司开发的一种declarative,statically typed(声明性的、静态类型)脚本语言。JavaFX技术有着良好的前景,包括可以直接调用Java API的能力。
JavaFx PDF viewer ,javaFx显示PDF的控件 ,