JAVA调用JS函数

今天在开发中使用到了js和Java的交互,平时我们用的比较多的就是js调用Java的方法,可以使用dwr、Ajax、jquery。突然发现要Java调用js的话还真没有见过,今天上网查询了下资料,顺便总结一下:

前提条件:jdk1.6才支持,1.6以前的就不行了。

js代码如下:

[javascript] view plain copy
print ?
  1. function convert (id,str)  
  2. {  
  3.     if (‘505041’==id)  
  4.     {  
  5.         return str;  
  6.     }  
  7.     else  
  8.     {  
  9.         return “A”;  
  10.     }  
  11. }  
function convert (id,str)
{
    if ('505041'==id)
    {
        return str;
    }
    else
    {
        return "A";
    }
}


 

Java代码如下:

[java] view plain copy
print ?
  1. package com.sc;  
  2.   
  3. import java.io.BufferedReader;  
  4. import java.io.File;  
  5. import java.io.FileReader;  
  6.   
  7. import javax.script.Invocable;  
  8. import javax.script.ScriptEngine;  
  9. import javax.script.ScriptEngineManager;  
  10.   
  11. public class JsTest {  
  12.   
  13.       
  14.     public static void main(String[] args) throws Exception {   
  15.         testJSFile();   
  16.     }   
  17.     
  18.     private static void testJSFile() throws Exception {   
  19.         ScriptEngineManager mgr = new ScriptEngineManager();   
  20.         ScriptEngine engine = mgr.getEngineByName(”javascript”);   
  21.         engine.eval(readJSFile());   
  22.         Invocable inv = (Invocable) engine;   
  23.         Object res = (Object) inv.invokeFunction(”convert”new String[] { “5050412”“D” });   
  24.         System.out.println(”res:” + res);   
  25.     }   
  26.     
  27.     private static String readJSFile() throws Exception {   
  28.         StringBuffer script = new StringBuffer();   
  29.         File file = new File(“E:\\workspace\\test4\\WebRoot\\test.js”);   
  30.         FileReader filereader = new FileReader(file);   
  31.         BufferedReader bufferreader = new BufferedReader(filereader);   
  32.         String tempString = null;   
  33.         while ((tempString = bufferreader.readLine()) != null) {   
  34.             script.append(tempString).append(”\n”);   
  35.         }   
  36.         bufferreader.close();   
  37.         filereader.close();   
  38.         return script.toString();   
  39.     }  
  40. }  
package com.sc;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

public class JsTest {


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

    private static void testJSFile() throws Exception { 
        ScriptEngineManager mgr = new ScriptEngineManager(); 
        ScriptEngine engine = mgr.getEngineByName("javascript"); 
        engine.eval(readJSFile()); 
        Invocable inv = (Invocable) engine; 
        Object res = (Object) inv.invokeFunction("convert", new String[] { "5050412", "D" }); 
        System.out.println("res:" + res); 
    } 

    private static String readJSFile() throws Exception { 
        StringBuffer script = new StringBuffer(); 
        File file = new File("E:\\workspace\\test4\\WebRoot\\test.js"); 
        FileReader filereader = new FileReader(file); 
        BufferedReader bufferreader = new BufferedReader(filereader); 
        String tempString = null; 
        while ((tempString = bufferreader.readLine()) != null) { 
            script.append(tempString).append("\n"); 
        } 
        bufferreader.close(); 
        filereader.close(); 
        return script.toString(); 
    }
}


 

在Java类中直接run就可以得到如下结果:

res:A

以此记录一下。

你可能感兴趣的:(小知识)