HiiHahWIKI - making some notes for... -
Java:Rhino:初めてのRhino
をテンプレートにして作成
開始行:
*Java:Rhino:初めてのRhino [#w4da3443]
JavaからJavaScriptを実行できる、Rhinoを使って見ました。
これから、Webページのスクレイピングで使おうとおもってます...
***環境設定 [#xcd50f48]
Rhinoのjarにクラスパスが通っているだけでOKです。
Rhinoのjarは以下のURLよりDLします。
-https://developer.mozilla.org/en-US/docs/Rhino/Download_...
※日本語ページもありますが、日本語の方はバイナリが古いです...
***ソースコード [#o1d4389f]
RhinoをつかってJavaScriptを読み込み、JavaScriptに定義され...
ファイルは以下の2つです。
-sample.js
-RhinoFirstSample.java
まず、JavaScriptのソースコード。
■sample.js
function sample(){
print("hello world");
print("This output is from JavaScript.");
return "Return value";
};
他愛もないjsです。
次にjavaのソースコード。大雑把に、以下の内容を実行してま...
-コンストラクタ:Rhinoの初期可処理をしてます。
--Rhinoのシェルにしかない関数(print等)を使用したいため...
-execScriptメソッド:引数に指定されたスクリプトを実行しま...
-execFunctionメソッド:引数に指定された関数名及び引数から...
まあ、ポイントはコードを読んでもらえればw
コンストラクタ→execScriptメソッド→execFunctionメソッド→co...
※mainの中身どおりw
■RhinoFirstSample.java
package rhinotest;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextFactory;
import org.mozilla.javascript.Script;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.tools.shell.Global;
public class RhinoFirstSample {
private Global global = null;
private Context cx = null;
private Scriptable scope = null;
/**
* コンストラクタ
* Rhinoの初期化処理を実行
*/
public RhinoFirstSample() {
// コンテキストの生成
cx = ContextFactory.getGlobal().enterContext();
// shellでしか使えない関数(print等)を使用するため、...
global = new Global();
global.init(cx);
// optimazationのレベルを指定。-1だと、Scriptを逐次解...
// 1-9だと、レベルに応じて適切にclassファイルを生成す...
cx.setOptimizationLevel(-1);
cx.setLanguageVersion(Context.VERSION_1_5);
// スタンダードオブジェクトを生成。
// Javadocには「return: the initialized scope」と記載...
scope = cx.initStandardObjects(global);
}
/**
* 指定されたパス、ファイル名のJavaScriptを実行する。
* @param path
* @param filename
* @throws IOException
*/
public void execScript(String path, String filename) th...
Reader scriptReader = new FileReader(path + File.separ...
Script script = cx.compileReader(scriptReader, filenam...
scriptReader.close();
script.exec(cx, scope);
}
/**
* 指定された関数を実行する。
* 以下の場合、実行行を以下のように組み立て、スクリプト...
* jsFuncName:testFunc
* args : ["test1","test2"]
* => testFunc("test1","test2");
* @param jsFuncName : 関数名を指定
* @param args : 引数をString配列で指定、引数がない...
* @return
*/
@SuppressWarnings("static-access")
public String execFunction(String jsFuncName,String[] a...
StringBuffer execLine = new StringBuffer();
execLine.append(jsFuncName + "(" );
if(args != null){
for(int i=0; i < args.length; i++){
execLine.append("\"");
execLine.append(args[i]);
execLine.append("\"");
if (i != args.length-1){
execLine.append(",");
}
}
}
execLine.append(");");
Object result = cx.evaluateString(scope, execLine.toSt...
1, null);
return cx.toString(result);
}
/**
* Rhinoのコンテキストをクローズする。
* RhinoのJavadocに、exit()しろってかいてあったので書い...
*/
public void contexExit(){
Context.exit();
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOExcepti...
RhinoFirstSample rhino = null;
try{
rhino = new RhinoFirstSample();
final String RESOURCE_PATH = "bin/resources";
rhino.execScript(RESOURCE_PATH, "sample.js");
System.out.println("This output is java(println) : "
+ rhino.execFunction("sample", null));
}finally{
rhino.contexExit();
}
}
}
***実行結果 [#c95baf48]
こんな感じです。
hello world
This output is from JavaScript.
This output is java(println) : Return value
うん、いい感じw
***参考 [#k00c664c]
-MOZILLA-japanのチュートリアル&BR;http://www.mozilla-japa...
Rhinoのjavadocがアーカイブに含まれているため、これをちゃ...
特に、以下のクラスについてはw
-ContextFactory
-Context
終了行:
*Java:Rhino:初めてのRhino [#w4da3443]
JavaからJavaScriptを実行できる、Rhinoを使って見ました。
これから、Webページのスクレイピングで使おうとおもってます...
***環境設定 [#xcd50f48]
Rhinoのjarにクラスパスが通っているだけでOKです。
Rhinoのjarは以下のURLよりDLします。
-https://developer.mozilla.org/en-US/docs/Rhino/Download_...
※日本語ページもありますが、日本語の方はバイナリが古いです...
***ソースコード [#o1d4389f]
RhinoをつかってJavaScriptを読み込み、JavaScriptに定義され...
ファイルは以下の2つです。
-sample.js
-RhinoFirstSample.java
まず、JavaScriptのソースコード。
■sample.js
function sample(){
print("hello world");
print("This output is from JavaScript.");
return "Return value";
};
他愛もないjsです。
次にjavaのソースコード。大雑把に、以下の内容を実行してま...
-コンストラクタ:Rhinoの初期可処理をしてます。
--Rhinoのシェルにしかない関数(print等)を使用したいため...
-execScriptメソッド:引数に指定されたスクリプトを実行しま...
-execFunctionメソッド:引数に指定された関数名及び引数から...
まあ、ポイントはコードを読んでもらえればw
コンストラクタ→execScriptメソッド→execFunctionメソッド→co...
※mainの中身どおりw
■RhinoFirstSample.java
package rhinotest;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextFactory;
import org.mozilla.javascript.Script;
import org.mozilla.javascript.Scriptable;
import org.mozilla.javascript.tools.shell.Global;
public class RhinoFirstSample {
private Global global = null;
private Context cx = null;
private Scriptable scope = null;
/**
* コンストラクタ
* Rhinoの初期化処理を実行
*/
public RhinoFirstSample() {
// コンテキストの生成
cx = ContextFactory.getGlobal().enterContext();
// shellでしか使えない関数(print等)を使用するため、...
global = new Global();
global.init(cx);
// optimazationのレベルを指定。-1だと、Scriptを逐次解...
// 1-9だと、レベルに応じて適切にclassファイルを生成す...
cx.setOptimizationLevel(-1);
cx.setLanguageVersion(Context.VERSION_1_5);
// スタンダードオブジェクトを生成。
// Javadocには「return: the initialized scope」と記載...
scope = cx.initStandardObjects(global);
}
/**
* 指定されたパス、ファイル名のJavaScriptを実行する。
* @param path
* @param filename
* @throws IOException
*/
public void execScript(String path, String filename) th...
Reader scriptReader = new FileReader(path + File.separ...
Script script = cx.compileReader(scriptReader, filenam...
scriptReader.close();
script.exec(cx, scope);
}
/**
* 指定された関数を実行する。
* 以下の場合、実行行を以下のように組み立て、スクリプト...
* jsFuncName:testFunc
* args : ["test1","test2"]
* => testFunc("test1","test2");
* @param jsFuncName : 関数名を指定
* @param args : 引数をString配列で指定、引数がない...
* @return
*/
@SuppressWarnings("static-access")
public String execFunction(String jsFuncName,String[] a...
StringBuffer execLine = new StringBuffer();
execLine.append(jsFuncName + "(" );
if(args != null){
for(int i=0; i < args.length; i++){
execLine.append("\"");
execLine.append(args[i]);
execLine.append("\"");
if (i != args.length-1){
execLine.append(",");
}
}
}
execLine.append(");");
Object result = cx.evaluateString(scope, execLine.toSt...
1, null);
return cx.toString(result);
}
/**
* Rhinoのコンテキストをクローズする。
* RhinoのJavadocに、exit()しろってかいてあったので書い...
*/
public void contexExit(){
Context.exit();
}
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOExcepti...
RhinoFirstSample rhino = null;
try{
rhino = new RhinoFirstSample();
final String RESOURCE_PATH = "bin/resources";
rhino.execScript(RESOURCE_PATH, "sample.js");
System.out.println("This output is java(println) : "
+ rhino.execFunction("sample", null));
}finally{
rhino.contexExit();
}
}
}
***実行結果 [#c95baf48]
こんな感じです。
hello world
This output is from JavaScript.
This output is java(println) : Return value
うん、いい感じw
***参考 [#k00c664c]
-MOZILLA-japanのチュートリアル&BR;http://www.mozilla-japa...
Rhinoのjavadocがアーカイブに含まれているため、これをちゃ...
特に、以下のクラスについてはw
-ContextFactory
-Context
ページ名: