本文目錄一覽:
java程序中運行js腳本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class ExecJs {
/**
* 記錄日誌類
*/
private Logger log = Logger.getLogger(ExecJs.class);
/**
* 後置處理,執行js腳本
* @param js
* @throws Exception
*/
public void execJs(String js, MapString,Object map) throws Exception {
if (log.isDebugEnabled()) {
log.debug(“execJs js : ” + js);
IteratorEntryString, Object it = map.entrySet().iterator();
while (it.hasNext()) {
EntryString, Object entry = (EntryString, Object) it.next();
log.info(“EXECJS MAP : ” + entry.getKey() + “—” + entry.getValue());
}// end while
}// end if
if (“”.equals(js) || js == null) {
log.info(“EXECJS ERROR : JAVASCRIPT CONTENT IS NULL”);
} else if(map == null || map.size()=0){
log.info(“EXECJS ERROR : MAP CONTENT IS NULL”);
} else {
// 獲取腳本引擎
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName(“javascript”);
// 綁定數據
ScriptContext newContext = new SimpleScriptContext();
Bindings bind = newContext.getBindings(ScriptContext.ENGINE_SCOPE);
bind.putAll(map);
try {
engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);
engine.eval(js);
} catch (Exception e) {
log.info(“EXECJS EXCEPTION : EXECUTE JAVASCRIPT EXCEPTION”, e);
throw (e);
}// end try
}// end if
}
}
java使用js處理邏輯
首先呢 js 是網絡腳本語言,可以進行運算
Java呢 是程序設計語言
首先,你js要運算的數據從哪裡來,頁面或是在js函數里直接寫死? 當然 都可以
Java呢,要輸出,輸出的內容從哪裡來?要輸出js運算的結果,對吧
那麼 你首先做的當然是寫js函數去運算,得到結果
那麼,如果你想用Java輸出,就要把你js運算的結果傳給Java .
js傳值給Java,目前最常用的就是ajax,手寫ajax費時費力,一般都會採用jquery的ajax.希望可以幫到你,雖然不知道你這樣做的目的是什麼,這樣做應該沒有問題.
如何在java中調用js方法
有時候因為需要,我們想在Java中調用js方法,不再是像頁面中一個事件觸發,該如何做到呢?今天下午沒事得時候小研究了下,現跟大家分享一下。不對之處,望大家指正,共同進步!
[java] view plain copy
/*
* 加載腳本引擎,並在java中調用js方法
*/
public void test2()
{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(“JavaScript”);
try {
String str=”21″;
Double d = (Double) engine.eval(str);
Integer i=d.intValue();
System.out.println(i);
} catch (ScriptException ex) {
ex.printStackTrace();
}
}
[java] view plain copy
/*
* 在java中調用js,jdk1.6中有加載js引擎類,然後由它來調用js方法。
* 並通過JDK平台給script的方法中的形參賦值
*/
public void test(String name)
{
ScriptEngineManager sem = new ScriptEngineManager();
/*
*sem.getEngineByExtension(String extension)參數為js
sem.getEngineByMimeType(String mimeType) 參數為application/javascript 或者text/javascript
sem.getEngineByName(String shortName)參數為js或javascript或JavaScript
*/
ScriptEngine se = sem.getEngineByName(“js”);
try
{
String script = “function say(){ return ‘hello,'”+name+”; }”;
se.eval(script);
Invocable inv2 = (Invocable) se;
String res=(String)inv2.invokeFunction(“say”,name);
System.out.println(res);
}
catch(Exception e)
{
e.printStackTrace();
}
}
[java] view plain copy
/*
* 演示如何將java中對象作為js中全局變量,同時演示將file類賦給腳本語言,並獲得其屬性。
*/
public void testScriptVariables()
{
ScriptEngineManager sem=new ScriptEngineManager();
ScriptEngine engine=sem.getEngineByName(“js”);
File file=new File(“c://1.txt”);
engine.put(“f”, file);
try {
engine.eval(“println(‘path:’+f.getPath())”);//無法使用alert方法
} catch (ScriptException e) {
e.printStackTrace();
}
}
[java] view plain copy
/*
* 演示如何在java中如何通過線程來啟動一個js方法
*/
public void testScriptInterface() throws ScriptException
{
ScriptEngineManager sem=new ScriptEngineManager();
ScriptEngine engine=sem.getEngineByName(“js”);
String script=”var obj=new Object();obj.run=function(){println(‘test thread’)}”;
engine.eval(script);
Object obj=engine.get(“obj”);//獲取js中對象
Invocable inv=(Invocable)engine;
Runnable r=inv.getInterface(obj,Runnable.class);
Thread t=new Thread(r);
t.start();
}
這樣java就可以執行動態語言了,不過注意是jdk1.6版本的哦~
這樣寫不知道你能不能看懂,這個問題遠標java就已經講過這個題目了,希望能幫到你!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/154925.html