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

Java SE 6入门之脚本引擎加大程序功能

阅读更多

Java SE 6比Java SE 5有了很大的改进,它的功能更强,而且是专为Vista所设计,这就意味着Java SE 6将是Vista上的最佳选择。而Java SE 6所提供的最众多的新功能必将成为它的最大卖点。

Java SE 6最引人注目的新功能之一就是内嵌了脚本支持。在默认情况下,Java SE6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript。在Java SE6中提供了一些接口来定义一个脚本规范,也就是JSR223。通过实现这些接口,Java SE 6可以支持任意的脚本语言(如PHP或Ruby)。

运行第一个脚本程序

在使用Java SE 6运行脚本之前,必须要知道你的Java SE6支持什么脚本语言。在javax.script包中有很多的类,但这些类中最主要的是ScriptEngineManager。可以通过这个类得到当前Java SE 6所支持的所有脚本。如下面例子将列出所有可以使用的脚本引擎工厂。

<ccid_nobr></ccid_nobr>

<ccid_code>import javax.script.*; 
import java.io.*;
import java.util.*;
import static java.lang.System.*;
public class ListScriptEngines
{
 public static void main(String args[])
 {
  ScriptEngineManager manager = new ScriptEngineManager();
  // 得到所有的脚本引擎工厂
  List<ScriptEngineFactory> factories = manager.getEngineFactories();
  // 这是Java SE 5 和Java SE 6的新For语句语法
  for (ScriptEngineFactory factory: factories)
  {
   // 打印脚本信息
   out.printf("Name: %s%n" +
    "Version: %s%n" +
    "Language name: %s%n" +
    "Language version: %s%n" +
    "Extensions: %s%n" +
    "Mime types: %s%n" +
    "Names: %s%n",
    factory.getEngineName(),
    factory.getEngineVersion(),
    factory.getLanguageName(),
    factory.getLanguageVersion(),
    factory.getExtensions(),
    factory.getMimeTypes(),
    factory.getNames());
   // 得到当前的脚本引擎
   ScriptEngine engine = factory.getScriptEngine();
  }
 }
}</ccid_code>

上面的例子必须要在Java SE 6中编译。其中import static java.lang.System.*是新的语法,将System中的所有静态成员进行引用,以后就可以直接使用out、in或err了。

通过运行java ListScriptEngines,将显示如下信息

<ccid_nobr></ccid_nobr>

<ccid_code>Name: Mozilla Rhino 
Version: 1.6 release 2
Language name: ECMAScript
Language version: 1.6
Extensions: [js]
Mime types: [application/javascript, application/ecmascript, text/javascript, text/ecmascript]
Names: [js, rhino, JavaScript, javascript, ECMAScript, ecmascript]</ccid_code>

在最下面一行是脚本的别名,也就是使用它们中的任意一个都可以。得到一个具体的脚本引擎有3种方法。

·根据扩展名得到脚本引擎

ScriptEngine engine = manager.getEngineByExtension("js");

getEngineByExtension的参数就是Extensions:[js]中[…]里的部分。

·根据Mime类型得到脚本引擎

ScriptEngine engine = manager.getEngineByMimeType("text/javascript");

getEngineByMimeType的参数可以是Mime types: [application/javascript,application/ecmascript, text/javascript,text/ecmascript]中的任何一个,可以将text/javascript改成text/ecmascript。

·根据名称得到脚本引擎

ScriptEngine engine = manager.getEngineByName("javascript");

getEngineByName后的参数可以是Names: [js, rhino, JavaScript, javascript, ECMAScript, ecmascript]中的任何一个,如可以将javascript改成ecmascript。

上面已经讨论了执行脚本的第一步,就是得到一个可用的脚本引擎。在完成这项工作之后就可以利用这个脚本引擎执行相应的脚本了。我们可以使用ScriptEngine的eval方法来执行脚本。eval方法被重载的多次,但最常用的是public Object eval(String script)。

下面的例子演示了如何使用eval方法来执行javascript脚本。

<ccid_nobr></ccid_nobr>

<ccid_code>import javax.script.*; 
import java.io.*;
import static java.lang.System.*;
public class FirstJavaScript
{
 public static void main(String args[])
 {
  ScriptEngineManager manager = new ScriptEngineManager();
  // 得到javascript脚本引擎
  ScriptEngine engine = manager.getEngineByName("javascript");
  try
  {
   // 开始运行脚本,并返回当前的小时
   Double hour = (Double)engine.eval("var date = new Date();" +"date.getHours();");
   String msg;
   // 将小时转换为问候信息
   if (hour < 10)
   {
    msg = "上午好";
   }
   else if (hour < 16)
   {
    msg = "下午好";
   }
   else if (hour < 20)
   {
    msg = "晚上好";
   }
   else
   {
    msg = "晚安";
   }
   out.printf("小时 %s: %s%n", hour, msg);
  }
  catch (ScriptException e)
  {
   err.println(e);
  }
 }
}</ccid_code>

上面的例子通过得到当前的小时,并将其转化为问候语。上面的程序的输出信息为:

小时9.0:上午好

这个例子最值得注意的是执行的2句脚本,最后一句是date.getHours()。并未将这个值赋给一个javascript变量。这时,eval方法就将这样的值返回。这有些类似C语言的(…)运算符。如(c=a+b, c + d),这个表达式的返回值是a+b+d。

分享到:
评论

相关推荐

    Beginning Java SE 6 Platform

    ### Java SE 6 平台入门到精通 #### 核心知识点概览 - **Java SE 6 平台概述** - **Java SE 6 的新特性与改进** - **面向对象编程基础** - **核心类库详解** - **Swing GUI 编程** - **AWT GUI 编程** - **事件...

    Apress - Beginning Java SE 6 Platform (Oct 2007)

    《Java SE 6 平台入门》是一本针对初学者的详细教程,旨在帮助读者全面了解和掌握Java Standard Edition(SE)6版本的核心概念和技术。这本书由Apress出版,于2007年10月发布,是Java开发者的宝贵资源,特别是对于...

    毕向东Java SE视频教程整理笔记

    - **Swing简介**:Swing是Java平台上的图形用户界面(GUI)工具包之一,提供了丰富的组件和布局管理器来帮助开发者快速构建桌面应用程序。 #### 第十章:网络编程 - **网络编程基础**:Java支持TCP/IP协议栈,提供...

    Java Web快速入门——全十讲

    ### Java Web快速入门——全十讲 #### 一、Java与Web开发的融合:JavaEE标准框架 在探讨Java Web开发之前,我们首先要理解Java在Web领域的定位。Java不仅仅是一种编程语言,它还是一套完整的生态系统,适用于各种...

    Java的由来及发展历史,Java学习入门,了解Java的起源及发展历史

    2005年,Sun公司宣布Java SE 6(代号Mustang),支持脚本语言,并增强了安全性。Java EE 6在2009年发布,继续优化Web服务和企业级应用的功能。Oracle接手后,虽然面临社区关系的挑战,但Java仍然保持着强劲的发展...

    java入门教程

    ### Java入门教程:基础知识与面向对象思想 #### Java语言概述与发展历程 Java作为一种跨平台的高级编程语言,自诞生以来,便以其强大的功能和简洁的语法吸引了全球无数开发者。Java由James Gosling等人于1995年在...

    Wrox.Professional.Java.JDK.6.Edition.Jan.2007.pdf

    - **脚本引擎API**:讲解新的脚本引擎API,使得在Java应用程序中嵌入动态脚本语言成为可能。 ### 3. 高级主题 - **泛型编程**:详解Java中的泛型编程,包括泛型类、泛型方法以及泛型集合类的使用。 - **注解**:...

    Java学习从入门到精通.pdf

    Java是世界上最流行的编程语言之一,尤其在企业级应用开发领域占据主导地位。要学习Java,首先需要理解并掌握Java Development Kit(JDK),它是开发和运行Java程序的基础。JDK包含了Java运行环境(JRE)、一系列...

    《Java基础入门》-课后习题答案--1-6.doc

    - **Java SE (Standard Edition)**:标准版,适用于桌面应用程序。 - **Java EE (Enterprise Edition)**:企业版,面向大型企业级应用开发,如Web应用、服务端应用等。 - **Java ME (Micro Edition)**:微型版,...

    使用Eclipse做JAVA SE开发从零到一的过程

    ### 使用Eclipse进行JAVA SE开发从零到一的全过程 #### 一、环境搭建与配置 ...以上步骤涵盖了使用Eclipse进行JAVA SE开发的基本流程,从安装配置到项目的创建与管理,希望能帮助JAVA初学者顺利入门。

    Java_Web快速入门——全十讲

    ### Java Web 快速入门全十讲知识点梳理 #### 第一讲:Java Web 概念与环境搭建 ##### 1. Java 与 Java Web 的关系 - **Java 的三大平台**: - Java SE(Standard Edition):标准版,适用于桌面应用软件。 - ...

    jdk6.0从入门到精通-----chapter18与动态语言结合

    在Java 6中,引入了一个重要的特性,即Java平台标准版6(Java SE 6)对动态语言的支持,这使得Java可以更方便地与如Ruby、Python等动态语言交互。 在Java 6中,最显著的变化是JRuby、Jython等项目的推动,它们实现...

    Java相关课程系列笔记之一Java学习笔记.doc

    笔记中还将涵盖JavaScript语言的基础知识,虽然JavaScript主要用于前端开发,但与Java有诸多相似之处,如都是基于ECMAScript标准的脚本语言,理解JavaScript可以帮助开发者更好地理解Web应用的工作原理。 总结,这...

    javaAPI中文chm大全

    2. **Java EE**:Java EE是企业级应用开发的平台,它构建在Java SE(标准版)之上,增加了对分布式应用、数据库访问、Web服务等功能的支持。Java EE API帮助文档详细介绍了EJB(Enterprise JavaBeans)、Servlet、...

    java培训机构 课件

    Java的发展历史可以追溯到1995年,自那时起,它不断发展壮大,JDK版本也随之迭代,如JDK1.0、1.1、1.2等,直至现在的Java 17等版本。Java技术平台分为三个主要部分:Java EE(Enterprise Edition,企业版)、Java ME...

    java系列笔记【全套15个文档】

    Java SE是Java的基础,它提供了开发桌面应用和服务器端程序所需的核心功能。主要知识点包括: 1. **语法基础**:变量、数据类型、运算符、流程控制(如if-else,switch,循环)。 2. **类与对象**:封装、继承、多态...

    JAVA 学习成长路线:从入门到精通的技术成长分享.docx

    # JAVA 学习成长路线:从入门到精通的技术成长分享 Java 作为一种经典的面向对象编程语言,自 1995 年由 Sun Microsystems 发布以来,在软件开发领域内占据了重要地位。它被广泛应用于 Web 开发、企业级应用、移动...

    Java SE MIDP2-开源

    Java SE(标准版)是Java开发平台的核心,它提供了运行Java应用程序的基础框架。MIDP(Mobile Information Device Profile)2.0则是Java ME(微型版)的一个子集,专为移动设备如智能手机和平板电脑设计,用于开发轻...

    java jdk 1.7官网免安装版本

    Java JDK 1.7,全称为Java Development Kit version 7,是Oracle公司推出的Java编程语言的开发工具包,主要用于编写、编译、测试和运行Java应用程序。这个版本的JDK在2012年发布,引入了许多新特性,提升了性能,并...

Global site tag (gtag.js) - Google Analytics