java調用javascript
㈠ 如何把java代碼嵌入到javascript中
1.取得腳本解釋器的管理器Manager
2.從管理器中取得js的解釋器實例ScriptEngine
3.取得存儲javascript變數的Bindings實例
4.把一個java.io.Reader流及Bindings傳遞給ScriptEngine的eval方法返回腳本運行結果,如果執行中發生錯誤,會拋出ScriptException異常。
例:運行javascript腳本的一個java程序
throwsIOException{=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){("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調用javascriptq
寫個form 把你的結果寫在里邊 像這樣 <input name=「canshu」 type="hidden" value="你用js把值放到這里 " /> 提交表單到後台的servlet 後台可以使用 String result = (String)request.getParameter ("canshu"); 來得到
<form action="xxx" method="get" >這里使用get 就可以在servlet的 doGet方法中取到參數
<input name=「canshu」 type="hidden" value="你用js把值放到這里 " />
</form>
㈢ java如何調用javascript的函數
[java] view plainprint?
<span style="font-size:18px;">package suggestion16;
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 ScriptText {
public static void main(String[] args) throws FileNotFoundException, ScriptException, Exception {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
Bindings bind = engine.createBindings();
bind.put("factor", 2); //這里綁定一個factor的值為2.
engine.setBindings(bind,ScriptContext.ENGINE_SCOPE);
Scanner input = new Scanner(System.in);
while(input.hasNext())
{
int first = input.nextInt();
int sec = input.nextInt();
System.out.println("輸入的參數為:"+ first+ " , " + sec);
engine.eval(new FileReader("E:/cal.js"));
if(engine instanceof Invocable)
{
Invocable in = (Invocable)engine;
Double result = (Double)in.invokeFunction("cal",first,sec);
System.out.println("運算結果為:" + result.intValue());
}
}
}
}
</span>
其中的「E:/cal.js」就是我們js文件的保存路徑。並且這個主函數可以循環的輸入。
我們運行一下這個程序得到的結果如下:
[html] view plainprint?
<span style="font-size:18px;">1
2
輸入的參數為:1 , 2
運算結果為:1
</span>
上面也就是 調用了 1 + 2 - 2 = 1 ,所以結果為1
我們將js文件中的function方法改變下,改編為下面的函數:
[javascript] view plainprint?
<span style="font-size:18px;">function cal(var1,var2)
{
return var1+var2*factor;
}</span>
㈣ Java 調用javascript 效率怎麼樣
題目有點問題,應該與javascript原生相比,比方說ie的JavaScript引擎效率比google的v8引擎效率低不少,java中提供的JavaScript引擎只是給我們玩玩用的,不介意使用這個
㈤ 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
JDK1.6版添加了新的ScriptEngine類,允許用戶直接執行js代碼。
在Java中直接調用js代碼
不能調用瀏覽器中定義的js函數,會拋出異常提示ReferenceError: 「alert」 is not defined。
package com.sinaapp.manjushri;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException; /** * 直接調用js代碼 */
public class ScriptEngineTest {
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
try{
engine.eval("var a=3; var b=4;print (a+b);");
// engine.eval("alert(\"js alert\");"); // 不能調用瀏覽器中定義的js函數 // 錯誤,會拋出alert引用不存在的異常
}catch(ScriptException e){
e.printStackTrace();
}
}
}
㈦ java調用請求頁面js方法有哪些
其實網上有很多方法
/** 載入腳本引擎,並在java中調用js方法 */
public void test2(){
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
try {
String str="2&1";
Double d = (Double) engine.eval(str);
Integer i=d.intValue();
System.out.println(i);
} catch (ScriptException ex) {
ex.printStackTrace();
} }
/*
* 在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中對象作為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中如何通過線程來啟動一個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 調用 js函數
function是屬於javascript裡面的語法,而<%%>裡面調用的是java的語法,所以想要用<%%>調用alert()是不行了,因為他們不是同一個東西。
不知道你的意思是不是頁面一載入就進行調用alert(),如果是這樣的話,建議使用onload事件,表示頁面載入的時候調用alert();
或者如果是點擊的時候調用,那麼久調用onclick()..總而言之可以使用事件完成。
㈨ java調用javascript安全嗎
javascript 一般是不會有安全問題的。因為是在客戶端解析的