JDK1.6版添加了新的ScriptEngine類,允許用戶直接執行js代碼。

JDK1.6版添加了新的ScriptEngine類,允許用戶直接執行js代碼。

在Java中直接調用js代碼

不能調用瀏覽器中定義的js函數,會拋出異常提示ReferenceError:?“alert”?is?not?defined。

[java]?view plain?copy
  1. package?com.sinaapp.manjushri;???
  2. import?javax.script.ScriptEngine;???
  3. import?javax.script.ScriptEngineManager;??
  4. import?javax.script.ScriptException;???/**??*?直接調用js代碼??*/??
  5. ??????????
  6. ??public?class?ScriptEngineTest?{??????
  7. ????public?static?void?main(String[]?args)?{???
  8. ????????ScriptEngineManager?manager?=?new?ScriptEngineManager();??
  9. ????????ScriptEngine?engine?=?manager.getEngineByName("javascript");??
  10. ??????????try?{??????
  11. ????????????engine.eval("var?a=3;?var?b=4;print?(a+b);");??????
  12. ????????????//?不能調用瀏覽器中定義的js函數??????
  13. ????????????//?engine.eval("alert(\"js?alert\");");?????
  14. ????????????//?錯誤,會拋出alert引用不存在的異常?????
  15. ??????????}?catch?(ScriptException?e)?{??
  16. ??????????????e.printStackTrace();?????
  17. ??????????}????
  18. ??????}?????
  19. }??

輸出結果:7

在Java中綁定js變量


在調用engine.get(key);時,如果key沒有定義,則返回null

[java]?view plain?copy
  1. package?com.sinaapp.manjushri;?????
  2. import?javax.script.Bindings;???
  3. import?javax.script.ScriptContext;???
  4. import?javax.script.ScriptEngine;???
  5. import?javax.script.ScriptEngineManager;???
  6. import?javax.script.ScriptException;?????
  7. ????????????
  8. public?class?ScriptEngineTest2?{???
  9. ????public?static?void?main(String[]?args)?{?????
  10. ????????ScriptEngineManager?manager?=?new?ScriptEngineManager();?????
  11. ??????????ScriptEngine?engine?=?manager.getEngineByName("javascript");?????
  12. ??????????engine.put("a",?4);???engine.put("b",?3);?????
  13. ??????????Bindings?bindings?=?engine.getBindings(ScriptContext.ENGINE_SCOPE);??
  14. ??????????try?{??
  15. ??????????????//?只能為Double,使用Float和Integer會拋出異常??
  16. ??????????????Double?result?=?(Double)?engine.eval("a+b");??
  17. ??????????????System.out.println("result?=?"?+?result);??
  18. ??????????????engine.eval("c=a+b");??
  19. ??????????????Double?c?=?(Double)engine.get("c");??
  20. ??????????????System.out.println("c?=?"?+?c);??
  21. ??????????}?catch?(ScriptException?e)?{??
  22. ??????????????e.printStackTrace();?????
  23. ??????????}????
  24. ??????}???
  25. ??}??
輸出:
result?=?7.0
c?=?7.0

在Java中調用js文件中的function,傳入調用參數,并獲取返回值

js文件中的merge函數將兩個參數a,b相加,并返回c。
[javascript]?view plain?copy
  1. //?expression.js???
  2. function?merge(a,?b)?{???
  3. ?????c?=?a?*?b;???
  4. ?????return?c;???
  5. }??
在Java代碼中讀取js文件,并參數兩個參數,然后回去返回值
[java]?view plain?copy
  1. package?com.sinaapp.manjushri;????
  2. ?import?java.io.FileReader;????
  3. ?import?javax.script.Invocable;??
  4. ?import?javax.script.ScriptEngine;??
  5. ?import?javax.script.ScriptEngineManager;????
  6. ?/**??*?Java調用并執行js文件,傳遞參數,并活動返回值??*???*?@author?manjushri??*/??
  7. ?public?class?ScriptEngineTest?{?????
  8. ?????public?static?void?main(String[]?args)?throws?Exception?{?????
  9. ????????ScriptEngineManager?manager?=?new?ScriptEngineManager();?????
  10. ????????ScriptEngine?engine?=?manager.getEngineByName("javascript");??????
  11. ?????????String?jsFileName?=?"expression.js";????
  12. ?????????//?讀取js文件?????
  13. ????????FileReader?reader?=?new?FileReader(jsFileName);?????
  14. ????????//?執行指定腳本????
  15. ?????????engine.eval(reader);?????
  16. ????????if(engine?instanceof?Invocable)?{?????
  17. ?????????????Invocable?invoke?=?(Invocable)engine;??????
  18. ????????????//?調用merge方法,并傳入兩個參數?????
  19. ?????????????//?c?=?merge(2,?3);?????
  20. ?????????????Double?c?=?(Double)invoke.invokeFunction("merge",?2,?3);?????
  21. ?????????????System.out.println("c?=?"?+?c);?????
  22. ????????}?????
  23. ????reader.close();???
  24. ?}???
  25. }??
輸出結果:
c?=?5.0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387210.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387210.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387210.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據結構05數組和廣義表

第五章 數組 和 廣義表 數組和廣義表可以看成是線性表在下述含義上的擴展:表中的數據元素本身也是一個數據結構。 5.1 數組的定義 n維數組中每個元素都受著n個關系的約束,每個元素都有一個直接后繼元素。 可以把二維數組看成是這樣一個定長線性表&…

k8s的ingress使用

ingress 可以配置一個入口來提供k8s上service從外部來訪問的url、負載平衡流量、終止SSL和提供基于名稱的虛擬主機。 配置ingress的yaml: 要求域名解析無誤 要求service對應的pod正常 一、test1.domain.com --> service1:8080 apiVersion: extensions/v1beta1…

JDK1.8中如何用ScriptEngine動態執行JS

JDK1.8中如何用ScriptEngine動態執行JS jdk1.6開始就提供了動態腳本語言諸如JavaScript動態的支持。這無疑是一個很好的功能,畢竟Java的語法不是適合成為動態語言。而JDK通過執行JavaScript腳本可以彌補這一不足。這也符合“Java虛擬機不僅僅是Java一種語言的虛擬機…

數據結構06樹和二叉樹

第六章 樹和二叉樹 6.1 樹的定義和基本術語 樹 Tree 是n個結點的有限集。 任意一棵非空樹中: (1)有且僅有一個特定的稱為根(root)的結點; (2)當n>1時,其余結點可…

2019.03.20 mvt,Django分頁

MVT模式 MVT各部分的功能: M全拼為Model,與MVC中的M功能相同,負責和數據庫交互,進行數據處理。 V全拼為View,與MVC中的C功能相同,接收請求,進行業務處理,返回響應。 T全拼為Tem…

CountDownLatch,CyclicBarrier和Semaphore

在java 1.5中,提供了一些非常有用的輔助類來幫助我們進行并發編程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我們就來學習一下這三個輔助類的用法。以下是本文目錄大綱:一.CountDownLatch用法二.CyclicBarrie…

數據結構07排序

第十章內部排序 10.1 概述 排序就是把一組數據按關鍵字的大小有規律地排列。經過排序的數據更易于查找。 排序前KiKj,且Ki在前: 排序方法是穩定的,若排序后Ki在前; 排序方法是不穩定的,如排序后Kj在前。 分類: 內…

數據結構08查找

第九章 查找 另一種在實際應用中大量使用的數據結構--查找表。 所謂查找,即為在一個含有眾多的數據元素的查找表中找出某個“特定的”數據元素。 查找表 search table 是由同一類型的數據元素構成的集合。集合中的數據元素之間存在著完全松散的關系,故…

下載Centos7 64位鏡像

下載Centos7 64位鏡像 1.打開Centos官網 打開Centos官方網站地址:https://www.centos.org/,點擊Get CentOS Now 2.點擊Minimal ISO鏡像 Minimal ISO鏡像,與DVD ISO鏡像的差別有很多,這里只說兩點 1.Minimal ISO類似于Windows的純凈…

[Objective-C語言教程]結構體(17)

Objective-C數組可定義包含多個相同類型的數據項的變量類型,但結構體是Objective-C編程中的另一個用戶定義數據類型,它可組合不同類型的數據項。 結構體用于表示記錄,假設要圖書館中跟蹤書籍信息。可能希望跟蹤每本書的以下屬性 - 標題作者學…

Scala01入門

第1章 可伸展的語言 Scala應用范圍廣,從編寫腳本,到建立大型系統。 運行在標準Java平臺上,與Java庫無縫交互。 更能發揮力量的地方:建立大型系統或可重用控件的架構。 將面向對象和函數式編程加入到靜態類型語言。 在Scala中&a…

架構師之路17年精選80篇

【架構必備】 《互聯網架構如何實現“高并發”》4W 《TCP接入層的負載均衡、高可用、擴展性架構設計》2.2W 《配置中心架構設計演進》1.7W 《跨公網調用的大坑與架構優化》1.4W 《DNS在架構設計中的巧用》1.9W 《消息如何在網絡上安全傳輸》1.2W 《10W定時任務,如何…

iphone手機型號獲取

#import <sys/utsname.h> //手機型號 NSString *device [self iphoneType]; (NSString *)iphoneType { struct utsname systemInfo; uname(&systemInfo); NSString *platform [NSString stringWithCString:systemInfo.machine encoding:NSUTF8StringEncoding]; if…

Java網絡01基本網絡概念

協議 Protocol&#xff1a;明確規則 &#xff08;1&#xff09;地址格式&#xff1b; &#xff08;2&#xff09;數據如何分包&#xff1b; ... TCP/IP四層模型&#xff1a; 應用層 HTTP SMTP POP IMAP 傳輸層 TCP UDP 網際層 IP 主機網絡層 host to host layer 數模、…

apache的產品分類說明

分類 項目名 說明 開發語言 服務器&#xff08;共20&#xff09; Apache HTTP Server全球第一HTTP服務器C/CTomcatJava的Web服務器JavaJames郵件服務器JavaSpamAssassin反垃圾郵件C/CPerlApache的Perl編程語言支持C/CTclTCL腳本語言C/CDirectory Server超級目錄服務器JavaAxisW…

Java網絡02基本Web概念

URI Uniform Resource Identifier 同一資源標識符 以特定語法標識一個資源的字符串 絕對URI&#xff1a;URI模式模式特有部分 scheme:scheme-specific-part scheme分為&#xff1a; data file本地文件系統 ftp http telnet urn 統一資源名 scheme-specific-part為&am…

解決自建ca認證后瀏覽器警告

前一篇講解了基本的建立證書的過程&#xff0c;但是建立后總是會在瀏覽器那里警告&#xff1a; 此鏈接不是私密鏈接 --谷歌瀏覽器 此證書頒發機構不可信 此證書不是這個網站的 --ie瀏覽器 總之證書是生成成功了&#xff0c;但是其中的內容填寫錯誤了&a…

設計模式學習(三)——單例模式

在Java開發過程中&#xff0c;很多場景下都會碰到或要用到單例模式&#xff0c;在設計模式里也是經常作為指導學習的熱門模式之一&#xff0c;相信每位開發童鞋都用到過。我們總是沿著前輩的足跡去做設定好的思路&#xff0c;往往沒去探究為何這么做&#xff0c;所以這篇文章對…

Java網絡03流

網絡程序所做的很大一部分工作只是輸入和輸出&#xff1a;從一個系統向另一個系統移動數據。 輸出流 Java的基本輸出流類是java.io.OutputStream: public abstract class OutputStream 這個類提供了寫入數據所需的基本方法&#xff0c;包括&#xff1a; public abstract vo…

基于微信小程序開發的仿微信demo

(本文參考自github/liujians,地址:https://github.com/liujians/weApp) 作者聲明&#xff1a; 基于微信小程序開發的仿微信demo 整合了ionic的樣式庫和weui的樣式庫 使用請查看使用必讀! 更新日志請點擊這里 目前功能 查看消息 網絡請求獲取數據&#xff08;download示例server…