JAVA调用JS函数

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

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

js代码如下:

function convert (id,str)
{
	if ('505041'==id)
	{
		return str;
	}
	else
	{
		return "A";
	}
}

Java代码如下:

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

以此记录一下。

JAVA调用JS函数

时间: 08-05

JAVA调用JS函数的相关文章

Java中通过脚本引擎调用js函数

1 import java.io.*; 2 import javax.script.Invocable; 3 import javax.script.ScriptEngine; 4 import javax.script.ScriptEngineManager; 5 import javax.script.ScriptException; 6 import org.slf4j.Logger; 7 import org.slf4j.LoggerFactory; 8 import com.ppcre

Android使用JNI(从java调用本地函数)

当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本地函数. 在Java端,开发者所需要做的仅仅是在连接本地函数的方法之前加上native关键字.这样VM就会去寻找这个本地函数. 1.从Java调用本地函数 从Java调用本地函数时,需要在类中定义一个带有native关键字的特有方法,作为连接本地代码的桥梁.通过这个定义,尝试调用本地方法时JVM会找

VC与JavaScript交互(二) ———— 调用JS函数

这一章,我们来动手实践VC调用JS函数. 我们动手写一个HTML,其中包含这样一段JS代码: [html] view plaincopy <script type="text/javascript"> function Add(value1, value2) { return value1 + value2; } </script> 然后我们用WebBrowser加载这个HTML后,在VC中这样来调用这个函数名为Add的JS函数: [cpp] view plai

服务器控件调用JS函数

是服务器端控件,不能在JS里直接调用,但可以在aspx.cs 里写方法可以调用JS函数,比如JS方法名称是check(), function check() {   alert(document.getElementById("ltr1").value); } 在a.aspx  <asp:Literal ID="ltr1" runat="server" > </asp:Literal> <asp:Button ID=

在COM组件中调用JS函数

要求是很简单的,即有COM组件A在IE中运行,使用JavaScript(JS)调用A的方法longCalc(),该方法是一个耗时的操作,要求通知IE当前的进度.这就要求使用回调函数,设其名称为scriptCallbackFunc.实现这个技术很简单: 1 .组件方(C++) 组件A 的方法在IDL中定义: [id(2)] HRESULT longCalc([in] DOUBLE v1, [in] DOUBLE v2, [in, optional] VARIANT scriptCallback);

JavaScript基础 超链接调用js函数

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"

C++通过V8调用js函数

现在写个函数,在C++中调用js函数, int V8_Manager::js_load_player_data(Block_Buffer *buf) { //执行V8代码前,必须先进入V8的Isolate,初始化V8运行环境 Isolate::Scope isolate_scope(isolate_); HandleScope handle_scope(isolate_); Local<Context> context = Local<Context>::New(isolate_,

V8系列之C++调用js函数

下面写个程序,用来演示在C++中通过V8调用js函数 int js_load_data(char *buf) { //声明v8虚拟机 Isolate* isolate; //进入v8虚拟机内部,初始化v8运行环境 Isolate::Scope isolate_scope(isolate); //创建句柄集合 HandleScope handle_scope(isolate); //创建v8运行上下文 Local<ObjectTemplate> global = ObjectTemplate::

java调用matlab函数接口的两种方案

Java 调用matlab 函数接口 Java调用matlab函数接口有两种方式: l 一种是通过matlab把函数打成jar包: l 一种是把matlab编译成dll后,用C++再封装成java能支持的数据类型的dll. 注意:不论用这两种方式中的哪一种,最终部署时都需要matlab环境(MCR,在matlab安装路径下有). 1. 方式一:matlab直接打jar包 1.1. 利用matlab自带工具打jar包 1.1.1. 建立jar包 在matlab的Commond Window中输入d