java裡面引用js腳本(用js寫腳本)

本文目錄一覽:

java中怎麼調用js代碼

這是一個腳本框架,提供了讓腳本語言來訪問Java內部的方法。你可以在運行的時候找到腳本引擎,然後調用這個引擎去執行腳本。這個腳本API允許你為腳本語言提供Java支持。

如何把java代碼嵌入到javascript中

1.取得腳本解釋器的管理器Manager

2.從管理器中取得js的解釋器實例ScriptEngine

3.取得存儲javascript變數的Bindings實例

4.把一個java.io.Reader流及Bindings傳遞給ScriptEngine的eval方法返回腳本運行結果,如果執行中發生錯誤,會拋出ScriptException異常。

例:運行javascript腳本的一個java程序

throwsIOException{ScriptEngineManagerscriptManager=newScriptEngineManager;//從管理器中獲取js的解釋器//定義我們要運行的腳本文件Stringfilename=null;//通過解釋器來獲得存儲javascript變數的Bindings的實例,使它們提供給腳本。Bindingsbindings=js.createBindings;//在map中獲取和設置值的方法publicObjectget;//使用我們的name/value對(即javascript變數)Bindingsbindings=newSimpleBindings(defaults);//創建一個變數,用於存放腳本執行的內容ScriptContextcontext=newSimpleScriptContext();//設置那些Bindings在Context中,使它們可讀。但這樣的變數定義的腳本不要放入我們的Map中context.setBindings(bindings,ScriptContext.GLOBAL_SCOPE);BufferedReaderin=newBufferedReader(newFileReader(filename));Stringline;while((line=in.readLine())!=null){line=line.trim();if(line.length()==0)continue;//跳過空行if(line.charAt(0)==『#『)continue;//跳過命令intpos=line.indexOf(“:”);if(pos==-1){thrownewIllegalArgumentException(“syntax:”+line);}Stringname=line.substring(0,pos).trim();Stringvalue=line.substring(pos+1).trim();charfirstchar=value.charAt(0);intlen=value.length();charlastchar=value.charAt(len-1);if(firstchar==『”『lastchar==『”『){//雙引號引用的值為字元串defaults.put(name,value.substring(1,len-1));}elseif(Character.isDigit(firstchar)){//如果開始是一個數字try{doubled=Double.parseDouble(value);defaults.put(name,value);}catch(NumberFormatExceptione){//沒有數字,是一個stringdefaults.put(name,value);}}elseif(“true”.equals(value)){//處理布爾值defaults.put(name,Boolean.TRUE);}elseif(“false”.equals(value)){defaults.put(name,Boolean.FALSE);}elseif(“null”.equals(value)){//處理null值defaults.put(name,null);}elseif(firstchar==『{『lastchar==『}『){//如果值是在一對大括弧之內,則執行javascript代碼Stringscript=value.substring(1,len-1);Objectresult=engine.eval(script,context);defaults.put(name,result);}else{//其它情況,剛好是一個字元串defaults.put(name,value);}}}//一個簡單的類的測試程序publicstaticvoidmain(String[]args)throwsIOException,ScriptException{Configurationdefaults=newConfiguration();defaults.load(args[0]);Set

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怎麼調用javascript

可參考:

package javaIjs;

/**

* @param args

*/

import java.io.FileReader;

import javax.script.Invocable;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

/**

* Java調用並執行js文件,傳遞參數,並活動返回值

*

* @author manjushri

*/

public class ScriptEngineTest {

public static void main(String[] args) throws Exception {

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = manager.getEngineByName(“javascript”);

String jsFileName = System.getProperty(“user.dir”)+”/src/javaIjs/expression.js”;

// 讀取js文件

FileReader reader = new FileReader(jsFileName);

// 執行指定腳本

System.out.println(engine.getContext().getReader());

engine.eval(reader);

if (engine instanceof Invocable) {

Invocable invoke = (Invocable) engine;

// 調用merge方法,並傳入兩個參數

// c = merge(2, 3);

Double c = (Double) invoke.invokeFunction(“merge1”, 21, 3);

System.out.println(“c = ” + c);

}

reader.close();

}

}

如何在java中調用js方法

js代碼如下:

[javascript] view plain copy

function formula(var1,var2){

return var1+var2-factor;

}

java代碼如下:

[java] view plain copy

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.util.Scanner;

import javax.script.Bindings;

import javax.script.Invocable;

import javax.script.ScriptContext;

import javax.script.ScriptEngine;

import javax.script.ScriptEngineManager;

import javax.script.ScriptException;

public class AboutJavaScript {

public static void main(String[] args) throws Exception {

ScriptEngine engine=new ScriptEngineManager().getEngineByName(“javascript”);

Bindings bind = engine.createBindings();

bind.put(“factor”, 1);

engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);

Scanner input=new Scanner(System.in);

while (input.hasNextInt()) {

int first= input.nextInt();

int sec=input.nextInt();

System.out.println(“輸入參數是:”+first+”,”+sec);

engine.eval(new FileReader(“F:/model.js”));

if(engine instanceof Invocable){

Invocable in =(Invocable) engine;

Double result=(Double) in.invokeFunction(“formula”, first,sec);

System.out.println(“運行結果:”+result.intValue());

}

}

}

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/196893.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-03 13:26
下一篇 2024-12-03 13:26

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • JS Proxy(array)用法介紹

    JS Proxy(array)可以說是ES6中非常重要的一個特性,它可以代理一個數組,監聽數據變化並進行攔截、處理。在實際開發中,使用Proxy(array)可以方便地實現數據的監…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python腳本控制其他軟體

    Python作為一種簡單易學、功能強大的腳本語言,具有廣泛的應用領域,在自動化測試、Web開發、數據挖掘等領域都得到了廣泛的應用。其中,Python腳本控制其他軟體也是Python…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29

發表回復

登錄後才能評論