Java 8, Nashorn motoru ile mevcut Rhino motorunu değiştirmek için geliştirilmiş bir javascript motoru tanıtıldı. Nashorn, kodu doğrudan bellekte derlediği ve bayt kodunu JVM’ye geçirdiği için 2 ila 10 kat daha iyi performans sağlar. Nashorn, performansı geliştirmek için Java 7’de tanıtılan invoke dinamikleri özelliğini kullanıyor. Ayrıca Nashorn motoru, javascript kodlarını konsolda yürütmek için yeni bir komut satırı aracı olan jjs komutunu tanıttı.
JDK’nın olduğu klasöre gidip bin klasörüne bakarsanız jjs.exe‘yi göreceksiniz.
Örneğin aşağı gibi küçük bir kod yazıp sonuçları görelim.
1 |
<span class="kwd"><img class="wp-image-669 aligncenter" src="https://koraypeker.com/wp-content/uploads/2018/08/jjs2.png" alt="" width="1113" height="198" /></span> |
Java içerisinden javascript kodlarını çalıştırma
Script.js dosyasımızı oluşturuyoruz.
1 2 3 |
var sayHello = function(name) { print('Merhaba ' + name); }; |
Sonrasında Main sınıfımızdan javascript dosyasını çağırıyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public class deneme { public static void main(String[] args) throws FileNotFoundException, ScriptException, NoSuchMethodException { ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); engine.eval(new FileReader("script.js")); Invocable invocable = (Invocable) engine; Object result = invocable.invokeFunction("sayHello", "Koray PEKER"); } } |
Başka bir örnek
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class JavascriptTester { public static void main(String[] args) throws ScriptException { ScriptEngine nashornEngine = new ScriptEngineManager().getEngineByName("nashorn"); String name = "Koray PEKER"; nashornEngine.eval("print('" + name + "')"); Integer result = (Integer) nashornEngine.eval("15 + 2"); System.out.println(result.toString()); } } |
Javascript içerisinden java kodlarını çalıştırma
Java sınıfımızı oluşturuyoruz
1 2 3 4 5 6 7 8 |
package com.koray; public class JavaTest { static void sayHello(String name) { return "Merhaba " + name; } } |
Javascript dosyamızı düzenliyoruz.
1 2 3 4 |
var JavaTestClass = Java.type('com.koray.JavaTest'); var result = JavaTestClass.sayHello('Koray PEKER'); print(result); |