星期三, 二月 16, 2005

Java 平台里程碑的事件.JSR223草案发布

Scripting for the Java Platform
试用了一下,基本ScriptEngine同BSF类似(resemble).
不过让人惊奇的时,现在Web Tier不只有JSP可以使用了.
我们完全可以用javascript,groovy,php来直接解析和调用Servlet的API了.
这太Cool了.
换句话说,javasript可以同时在server端和Client使用同一套语法来做了.
只要符合Javascripting Engin的接口规范,其他任何语言都可以使用Java的类库了.
不知道,swing是否可以直接调用.理论上没什么问题.

方法:
1.修改配置文件.
conf/server.xml

<Context path="/jsr223samples" docBase="C:/jsr223/samples" debug="0" reloadable="true" crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger" prefix="localhost_jsr223" suffix=".txt"/>
</Context>


conf/web.xml

<servlet>
<servlet-name>JSR223Script</servlet-name>
<servlet-class>com.sun.script.http.ScriptServlet</servlet-class>
<init-param>
<param-name>script-blocks</param-name>
<param-value>js,groovy</param-value>
</init-param>
</servlet>


<servlet-mapping>
<servlet-name>JSR223Script</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>JSR223Script</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>

<servlet-mapping>
<servlet-name>JSR223Script</servlet-name>
<url-pattern>*.groovy</url-pattern>
</servlet-mapping>


这样设置后,就可以直接调用对应的.js,php,.groovy的脚本文件在服务器端直接执行并输出结果了.

2.在Java代码中调用对应的引擎

//Initiate ScriptEngineManager
ScriptEngineManager manager = new ScriptEngineManager();

//Return Groovy engine by name
ScriptEngine jsengine = manager.getEngineByName("groovy");
//或者改为js或php

//Execute the HelloWorld script
jsengine.eval(new FileReader("./HelloWorld.groovy"));