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)
-
System.out.println("Hello"
.
class
.Name);
方便吧?
三.在web中的尝试。
看了说明,好像javaFX出现的目标是简化Swing的界面开发编程。一方面javaFX还没有一个好的所见即所得的ide支持,另外本人对web方面的编程比较感兴趣。所以进行了一个小实验。
我的思路是用一个servlet拦截所有对fx的请求,根据requestURI,获得javafx文件的绝对路径,然后在servelt中调用java6的脚本引擎,解释执行。
FXServlet.java
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();
-
-
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();
-
-
if
(contextPath!=
null
&&contextPath.trim().length()>
0
){
-
uri=uri.replaceAll(contextPath,""
);
-
}
-
-
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 代码
-
<?
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;
-
-
-
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
分享到:
相关推荐
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
这是利用sun的javafx实现的具有相对完整功能的多媒体播放器-----相对于网上的“一分钟写出一个javafx播放器”而言。 注意:javafx需要一些运行环境,具体说来是: 1.jdk6update14以上 2.javafx运行包----如果你在...
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的能力。