- 浏览: 195478 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
long2010:
看来是个太老的链接了。打不开……
一个纯java的H.264播放器--Onavia Video Player -
goodjin:
如果是这个语句怎么办?insert into t(id,nam ...
mysqldump导出数据到mssql -
HYbdbc:
貌似不能判断啊,我做了个测试,UTF-8编码的 还是显示gb2 ...
搜索引擎URI编码的处理 -
小鱼儿好:
Java Web实时会议解决方案 -
ssy341:
老帖子啊 连接都不能用了
JMS
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中的字符串支持嵌入表达式
程序在输出结果的时候会自动把字符串中的表达式 {} 算出来,替换成结果 。这段程序的输出结果是 : Hello Joe
这个特点和php很相似。用在来做结果输出模板时很有用,不必用自己创造标签语法,输出的时候又得用正则分析,替换。
3.类与对象
对象声明可以用一种类似于json的语法进行。
4.很有特色的反射操作
javaFX的反射很奇妙,我都在想,为什么java的反射也不做成这样。
方便吧?
三.在web中的尝试。
看了说明,好像javaFX出现的目标是简化Swing的界面开发编程。一方面javaFX还没有一个好的所见即所得的ide支持,另外本人对web方面的编程比较感兴趣。所以进行了一个小实验。
我的思路是用一个servlet拦截所有对fx的请求,根据requestURI,获得javafx文件的绝对路径,然后在servelt中调用java6的脚本引擎,解释执行。
FXServlet.java
web.xml
Hello.fx
运行: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 下面。
这个程序没有考虑效率问题。其实这样的事情应该由容器完成,本人只是做了个小小的实验。
一.以下是几个相关网址:
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);
这个特点和php很相似。用在来做结果输出模板时很有用,不必用自己创造标签语法,输出的时候又得用正则分析,替换。
3.类与对象
对象声明可以用一种类似于json的语法进行。
- class Person {
- attribute name: String;
- attribute parent: Person inverse Person.children;
- attribute children: Person* inverse Person.parent;
- function getFamilyIncome(): Number;
- function getNumberOfChildren(): Number;
- operation marry(spouse: Person);
- }
- var chris = 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
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 String realPath;
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- this.doWork(request, response);
- }
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- this.doWork(request, response);
- }
- public void doWork(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{
- System.out.println("begin ....");
- try {
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- ScriptEngineManager manager = new ScriptEngineManager(loader);
- ScriptEngine engine = manager.getEngineByExtension("fx");
- Bindings bindings = engine.createBindings();
- //将request和response两个对象传递给脚本引擎。
- bindings.put("REQUEST:javax.servlet.http.HttpServletRequest",request);
- bindings.put("RESPONSE:javax.servlet.http.HttpServletResponse",response);
- ScriptContext context = new SimpleScriptContext();
- context.setBindings(bindings, ScriptContext.GLOBAL_SCOPE);
- context.setBindings(bindings, ScriptContext.ENGINE_SCOPE);
- engine.setContext(context);
- String uri = request.getRequestURI();
- String contextPath = request.getContextPath();
- //将requestURI中的contextPath替换掉
- if(contextPath!=null&&contextPath.trim().length()>0){
- uri = uri.replaceAll(contextPath,"");
- }
- //根据requestURI取得fx文件的绝对地址 我们把fx文件放在站点的 WEB-INF下的 jfx目录下。
- String filePath = this.realPath + "WEB-INF"+ File.separator +"jfx" + uri;
- File jfxFile = new File(filePath);
- if(!jfxFile.exists()){
- response.sendError(404);
- }else{
- InputStreamReader reader = new InputStreamReader(new FileInputStream(jfxFile));
- engine.eval(reader);
- reader.close();
- }
- } catch (Exception e) {
- 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;
- //接受从java中传递过来的参数
- var request:HttpServletRequest = REQUEST;
- var response:HttpServletResponse = RESPONSE;
- var name = request.getParameter("name");
- var out:PrintWriter = response.getWriter();
- var template = "Hello World!{if name ==null then 'guest' else name}";
- 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效率不知道高不高?
不过例子不错.
希望楼主分析一下javafx的优势?
发表评论
-
Java String intern
2009-01-14 16:31 0http://www.codingdiary.com/deve ... -
Spring自动装配(autowire)导致quartz不能运行
2008-12-18 20:24 6714在spring中配置了一个简单的quartz任务,结果报错: ... -
ActiveMQ的一个问题
2008-09-22 17:58 4137安装了activemq,然后要配置成数据库持久化的。 参考文档 ... -
四个有害的java习惯
2008-07-30 19:46 8045本文不算严格意义上的翻译,算是该文章的摘要以及读后感。 文 ... -
Dspace架设经验
2008-04-09 00:56 29841.Dspace是什么? dspace.org ... -
struts2的时间格式转换问题
2008-03-21 11:50 8824struts2提供了一个时间标签:<s:date ... -
Java Web实时会议解决方案
2008-02-28 22:48 6973Java solutions profile: Jav ... -
struts2 checkboxlist 的一个问题
2008-01-30 13:07 9611用struts2的checkboxlist遇到一个问题。 ... -
http://jroller.com/eyallupu/entry/hibernate_exception_simult
2007-12-01 18:54 58http://jroller.com/eyallupu/ent ... -
Java SE 6.0
2007-07-05 14:35 39HTTP 增强 http://www.ibm.com/deve ... -
用ReflectionFactory实现不调用构造参数创建对象
2007-03-19 10:20 2828那天在sun的论坛上漂着,不经意发现了一篇帖子,大概 ... -
swt
2007-03-11 18:06 126widget基础 StyledText Widget ww ... -
JMS
2007-03-07 10:44 2684Geronimo 中 JMS、MDB 和 ActiveMQ 的 ... -
Hadoop
2007-03-07 10:29 41http://www.blogjava.net/calvin/ ... -
java编程奇怪错误收集
2007-03-01 21:34 29161.org.xml.sax.SAXParseException ...
相关推荐
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的能力。