java中怎么调用js代码 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 java 1.6 可以执行动态语言,包括 JavaScript。楼主可以找找相关资料。 不太明白,你用java调用js打算怎么用?如果是jsp页面include就可以了 首先,请装下jdk6的版本。6的刚刚支持。如果你用集成环境,那么请选择你装的jdk6,请不要用工具自带的jdk。ok?package com.hy.testScript;import java.io.FileNotFoundException;import java.io.FileReader;import javax.script.Compilable;import javax.script.CompiledScript;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineFactory;import javax.script.ScriptEngineManager;import javax.script.ScriptException;import org.junit.Assert;public class Test { /** * @param args * @throws ScriptException * @throws FileNotFoundException * @throws InterruptedException * @throws NoSuchMethodException */ public static void main(String[] args) throws ScriptException, FileNotFoundException, InterruptedException, NoSuchMethodException { // TODO Auto-generated method stub // ScriptEngineManager factory = new ScriptEngineManager(); // for (ScriptEngineFactory available : factory.getEngineFactories()) { // System.out.println(available.getEngineName()); // } ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"); engine.eval("print('Hello World!\\n')"); // /engine.eval("if(true){println ('hello')"); int i = 0; System.out.println("开始循环执行hello.js文件:"); while (i < 5) { // 寻找文件从工程根开始。 engine.eval(new FileReader("src/com/hy/testScript/hello.js")); Thread.sleep(1000); i++; } System.out.println("开始调用类HelloWorld的对象hello的方法:sayHello"); HelloWorld hello = new HelloWorld(); engine.put("script_hello", hello); engine.eval("script_hello.sayHello()"); System.out.println("开始调用js脚本方法say:"); String script = "function say(first,second){ print(first +' '+ second+'\\n'); }"; engine.eval(script); Invocable inv = (Invocable) engine; inv.invokeFunction("say", "Hello", "Tony"); script = "function max(first,second) " + "{ return (first > second) ?first:second;}"; engine.eval(script); Object obj = inv.invokeFunction("max", "1", "0"); Assert.assertEquals("1", obj.toString()); System.out.println(obj.toString()); //接口调用,用js实现java接口,呵呵~~~ script = "function max(first,second) " + "{ return (first > second) ?first:second;}"; script += "function min(first,second) { return (first < second) ?first:second;}"; engine.eval(script); MaxMin maxMin = inv.getInterface(MaxMin.class); Assert.assertEquals(1, maxMin.max(1, 0)); Assert.assertEquals(0, maxMin.min(1, 0)); //脚本的编译执行 script = "var email=/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]" + "+(\\.[a-zA-Z0-9_-]+)+$/;"; script += "var ip = /^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])" +"(\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])){3}$/;"; script += "if(email.test(str)){println('it is an email')}" + "else if(ip.test(str)){println('it is an ip address')}" + "else{println('I don\\'t know')}"; engine.put("str", "[email protected]"); Compilable compilable = (Compilable) engine; CompiledScript compiled = compilable.compile(script); compiled.eval(); }} package com.hy.testScript;public interface MaxMin { public int max(int a, int b); public int min(int a, int b);} package com.hy.testScript;public class HelloWorld { String s = "Hello World!我爱苏小雨~~~"; public void sayHello(){ System.out.println(s); }} 发的快说我恶意灌水,晕死我了,我只有重新申请号发了呀。你加我qq吧,152850325,有什么不明白的发我邮箱[email protected]或[email protected]你按照我说的做就可以实现java调js了,另外,js调java在mozilar的那个主站上有写好的包用的,但配置好烦的~~呵呵,你可以试试的。java调js可以在公网上使用,而不用担心客户端时候开启了js。其实,即使客户关掉了js,我们也可以强制开启的。另外,js调java的部分可以在客户端实现更加强大的功能。呵呵~不说了,又要封我号了,郁闷死了 哦,忘了说了,你最好用myeclipse编译运行,需要载入junit4的包。 Rhino: JavaScript for Javahttp://www.mozilla.org/rhino/ 其实我不太理解,开发用MVC模式的话,为什么要在代码中调用JS?为什么不写成java方法?有什么实际应用的意义? 请看一下我上面提供的 Rhino 项目,在首页上开宗明义:Rhino is an open-source implementation of JavaScript written entirely in Java. It is typically embedded into Java applications to provide scripting to end users. 首先在这里非常感谢各位我其实也不想在java调用jsmaquan 问我为什么要问这个问题实际上是我们在项目中用到Ext+Dwr+struts2+spring而用ext做项目时生成表格GridPanel时会产生好几百行的js代码因为这些代码有好多重复的所以我想把它封装成java类而让其它用的人简单的传参数进去就能够得到他想要的了最终目的其实就是让用的人少写点js代码而已 这个帖子http://topic.csdn.net/u/20080528/16/c177af14-0512-4648-b506-587a4223634e.html 那你看看Gwt-ext吧是用java生成ext的。 请问楼上的sunnysin:这是我下面写的一函数我想通过dwr来调用的话怎么在页面上返回一个Point 还有我返回这样一个对象应该怎么用呢?public Object getPonit(){ Object result = null; String obj = "function Point(x,y){this.x = x;this.y = y}"; String method = "Point.prototype.area = function(){"+ " return this.x*this.y;}"; String point = "function getPoint(x,y){return new Point(x,y)}"; try { engine.eval(obj+method); engine.eval(point); } catch (ScriptException e) { e.printStackTrace(); } Invocable invo = (Invocable)engine; try { result = invo.invokeFunction("getPoint", new Object[]{new Double(234),new Double(345)}); } catch (ScriptException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } return result; }在页面上调用className.getPoint(function(data){ //这里的data不是我想用的});thanks...................... 麻烦高手帮忙看一下是哪里的问题, 求助:java中http网络延时问题,为什么一直跳不出去 关于 bat文件的操作 怎么使JTable双击弹出对话框,读取该行的每个单元格的数据到该对话框中进行修改,然后存入数据库 命令行下面不能运行.class程序了?? 如何实现这个简单的布局效果?哪些开发工具能自动布局啊? 求助httpclient4.X登录百度 java好在何处 毕业设计中的一部分,请帮忙!! 用JCreator开发Java项目到底怎样? 一个关于匿名类实现接口的奇怪现象 java序列化的问题
如果是jsp页面include就可以了
package com.hy.testScript;import java.io.FileNotFoundException;
import java.io.FileReader;import javax.script.Compilable;
import javax.script.CompiledScript;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;import org.junit.Assert;public class Test { /**
* @param args
* @throws ScriptException
* @throws FileNotFoundException
* @throws InterruptedException
* @throws NoSuchMethodException
*/
public static void main(String[] args) throws ScriptException,
FileNotFoundException, InterruptedException, NoSuchMethodException {
// TODO Auto-generated method stub
// ScriptEngineManager factory = new ScriptEngineManager();
// for (ScriptEngineFactory available : factory.getEngineFactories()) {
// System.out.println(available.getEngineName());
// } ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval("print('Hello World!\\n')");
// /engine.eval("if(true){println ('hello')");
int i = 0;
System.out.println("开始循环执行hello.js文件:");
while (i < 5) {
// 寻找文件从工程根开始。
engine.eval(new FileReader("src/com/hy/testScript/hello.js"));
Thread.sleep(1000);
i++;
}
System.out.println("开始调用类HelloWorld的对象hello的方法:sayHello");
HelloWorld hello = new HelloWorld();
engine.put("script_hello", hello);
engine.eval("script_hello.sayHello()");
System.out.println("开始调用js脚本方法say:");
String script = "function say(first,second){ print(first +' '+ second+'\\n'); }";
engine.eval(script);
Invocable inv = (Invocable) engine;
inv.invokeFunction("say", "Hello", "Tony");
script = "function max(first,second) "
+ "{ return (first > second) ?first:second;}";
engine.eval(script);
Object obj = inv.invokeFunction("max", "1", "0");
Assert.assertEquals("1", obj.toString());
System.out.println(obj.toString());
//接口调用,用js实现java接口,呵呵~~~
script = "function max(first,second) "
+ "{ return (first > second) ?first:second;}";
script += "function min(first,second) { return (first < second) ?first:second;}";
engine.eval(script);
MaxMin maxMin = inv.getInterface(MaxMin.class);
Assert.assertEquals(1, maxMin.max(1, 0));
Assert.assertEquals(0, maxMin.min(1, 0));
//脚本的编译执行
script = "var email=/^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]"
+ "+(\\.[a-zA-Z0-9_-]+)+$/;";
script += "var ip = /^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])"
+"(\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])){3}$/;";
script += "if(email.test(str)){println('it is an email')}"
+ "else if(ip.test(str)){println('it is an ip address')}"
+ "else{println('I don\\'t know')}";
engine.put("str", "[email protected]");
Compilable compilable = (Compilable) engine;
CompiledScript compiled = compilable.compile(script);
compiled.eval(); }}
public int max(int a, int b);
public int min(int a, int b);
}
String s = "Hello World!我爱苏小雨~~~";
public void sayHello(){
System.out.println(s);
}
}
你加我qq吧,152850325,有什么不明白的发我邮箱[email protected]或[email protected]
你按照我说的做就可以实现java调js了,
另外,js调java在mozilar的那个主站上有写好的包用的,但配置好烦的~~
呵呵,你可以试试的。
java调js可以在公网上使用,而不用担心客户端时候开启了js。其实,即使客户关掉了js,我们也可以强制开启的。
另外,js调java的部分可以在客户端实现更加强大的功能。
呵呵~
不说了,又要封我号了,郁闷死了
http://www.mozilla.org/rhino/
maquan
问我为什么要问这个问题
实际上是我们在项目中用到Ext+Dwr+struts2+spring
而用ext做项目时生成表格GridPanel时会产生
好几百行的js代码
因为这些代码有好多重复的
所以我想把它封装成java类
而让其它用的人简单的传参数进去就能够得到他想要的了最终目的其实就是让用的人少写点js代码而已
http://topic.csdn.net/u/20080528/16/c177af14-0512-4648-b506-587a4223634e.html
是用java生成ext的。
这是我下面写的一函数
我想通过dwr来调用的话怎么在页面上返回一个Point
还有我返回这样一个对象应该怎么用呢?
public Object getPonit(){
Object result = null;
String obj = "function Point(x,y){this.x = x;this.y = y}";
String method = "Point.prototype.area = function(){"+
" return this.x*this.y;}";
String point = "function getPoint(x,y){return new Point(x,y)}";
try {
engine.eval(obj+method);
engine.eval(point);
} catch (ScriptException e) {
e.printStackTrace();
}
Invocable invo = (Invocable)engine;
try {
result = invo.invokeFunction("getPoint", new Object[]{new Double(234),new Double(345)});
} catch (ScriptException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
return result;
}在页面上调用className.getPoint(function(data){
//这里的data不是我想用的
});thanks......................