求助,想在nodejs里面调用一个java程序的函数,并返回结果

求助,想在nodejs里面调用一个java程序的函数,并返回结果,第1张

egetItemSelectable 的返回类型是一个 ItemSelectable 接口。而JRadioButton类实现了ItemSelectable接口。这样一来转化就很合理啦。

至于为何转化才可以通过编译,是因为ItemSelectable接口中并没有定义getText()方法。而你调用了此方法。当然要转换成实现了上述接口同时又有此方法的类才可以啊。

同功能,有一下几种方法实现用JavaScripe调用javabean的业务处理

1基于servlet的javabean的业务处理,也就是jsp的model2模式

2使用SSH三层框架做 struts+spring+hibernate

3使用AJAX实现页面的局部刷新 DWR框架

以上3种情况请你确定下你下的程序是基于哪种方法,我才能具体告诉你怎么实现用javascript调用业务类

QQ:854129673

package comsinaappmanjushri;

import javaioFileReader;

import javaxscriptInvocable;

import javaxscriptScriptEngine;

import javaxscriptScriptEngineManager;

/

Java调用并执行js文件,传递参数,并活动返回值

@author manjushri

/

public class ScriptEngineTest {

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

ScriptEngineManager manager = new ScriptEngineManager();

ScriptEngine engine = managergetEngineByName("javascript");

String jsFileName = "expressionjs";

// 读取js文件

FileReader reader = new FileReader(jsFileName);

// 执行指定脚本

engineeval(reader);

if(engine instanceof Invocable) {

Invocable invoke = (Invocable)engine;

// 调用merge方法,并传入两个参数

// c = merge(2, 3);

Double c = (Double)invokeinvokeFunction("merge", 2, 3);

Systemoutprintln("c = " + c);

}

readerclose();

}

}

function test(){

var g = "${first_Name}";

alert(g);

}

"<%=first_Name%>"; 这种方式只能取道jsp页面上定义的变量

比如

ajsp:

<%@ page contentType="text/html;charset=GB2312" %>

<HTML>

<%! String a = "aaaaa";%>

<BODY BGCOLOR=cyan>

<FONT Size=1>

<P>这是一个简单的JSP页面

<BR>

</FONT>

<%=a %>

${a };

</BODY>

<HTML>

在跳转到该jsp页面的servlet中在request中设置了一个a

效果如下:

这是一个简单的JSP页面

aaaaa serveta;

原因很简单:

对于每个jsp,服务器(比如tomcat)都会将其转换成java文件(后缀java的文件),然后将其编译成class文件

"<%=%>"就是从这个java文件中去取变量值

而"${}"则是从容器中的四个区域去取值(page,request,session,application)

在Cocos2d-js 30beta中加入了一个新特性,在Android平台上我们可以通过反射直接在js中调用Java的静态方法。使用方法很简单:

在callStaticMethod方法中,通过传入Java的类名,方法名,方法签名,参数就可以直接调用Java的静态方法,并且可以获得Java方法的返回值。下面介绍的类名和方法签名可能会有一点奇怪,但是Java的规范就是如此的。

(1)类名

参数中的类名必须是包含Java包路径的完整类名,例如在orgcocos2dxJavaScript这个包下面写了一个Test类:

那么这个Test类的完整类名应该是org/cocos2dx/javascript/Test,注意这里必须是斜线/,而不是在Java代码中习惯的点。

(2)方法名

方法名很简单,就是方法本来的名字,例如sum方法的名字就是sum。

(3)方法签名

方法签名稍微有一点复杂,最简单的方法签名是()V,表示一个没有参数没有返回值的方法。其他一些例子:

(I)V表示参数为一个int,没有返回值的方法;

(I)I表示参数为一个int,返回值为int的方法;

(IF)Z表示参数为一个int和一个float,返回值为boolean的方法;

现在有一些理解了吧,括号内的符号表示参数类型,括号后面的符号表示返回值类型。因为Java是允许函数重载的,可以有多个方法名相同但是参数返回值不同的方法,方法签名正是用来帮助区分这些相同名字的方法的。

(4)参数

参数可以是0个或任意多个,直接使用js中的number,bool和string就可以。

(5)使用示例

将会调用上面的Test类中的静态方法:

//调用hello方法

jsbreflectioncallStaticMethod("org/cocos2dx/javascript/Test", "hello", "(Ljava/lang/String)V", "this is a message from js");

//调用第一个sum方法

var result = jsbreflectioncallStaticMethod("org/cocos2dx/javascript/Test", "sum", "(II)I", 3, 7);

cclog(result); //10

//调用第二个sum方法

var result = jsbreflectioncallStaticMethod("org/cocos2dx/javascript/Test", "sum", "(I)I", 3);

cclog(result); //5

(6)注意

另外有一点需要注意的就是,在android应用中,cocos的渲染和js的逻辑是在gl线程中进行的,而android本身的UI更新是在app的ui线程进行的,所以如果在js中调用的Java方法有任何刷新UI的 *** 作,都需要在ui线程进行。

例如,在下面的例子中会调用一个Java方法,d出一个android的Alert对话框。

//给我们熟悉的AppActivity类稍微加点东西

public class AppActivity extends Cocos2dxActivity {

private static AppActivity app = null;

@Override

public void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

app = this;

}

public static void showAlertDialog(final String title,final String message) {

//这里一定要使用runOnUiThread

apprunOnUiThread(new Runnable() {

@Override

public void run() {

AlertDialog alertDialog = new AlertDialogBuilder(app)create();

alertDialogsetTitle(title);

alertDialogsetMessage(message);

alertDialogsetIcon(Rdrawableicon);

alertDialogshow();

}

});

}

}

在js中调用

jsbreflectioncallStaticMethod("org/cocos2dx/javascript/AppActivity", "showAlertDialog", "(Ljava/lang/String;Ljava/lang/String;)V", "title", "hahahahha");

这样调用就可以看到一个android原生的Alert对话框了。

用DWR

它包含两个主要的部分:允许JavaScript从WEB服务器上一个遵循了AJAX原则的Servlet中获取数据另外一方面一个JavaScript库可以帮助网站开发人员轻松地利用获取的数据来动态改变网页的内容 

DWR采取了一个类似AJAX的新方法来动态生成基于JAVA类的JavaScript代码这样WEB开发人员就可以在JavaScript里使用Java代码就像它们是浏览器的本地代码(客户端代码)一样;但是Java代码运行在WEB服务器端而且可以自由访问WEB 服务器的资源出于安全的理由,WEB开发者必须适当地配置哪些Java类可以安全的被外部使用 

这个从JAVA到JavaScript的远程功能方法给DWR的用户带来非常像传统的RPC机制,就像RMI或者SOAP一样,而且拥有运行在WEB上但是不需要浏览器插件的好处 

DWR不认为浏览器/WEB服务器协议是重要的,而更乐于保证编程界面的简单自然对此最大的挑战就是把AJAX的异步特性和正常JAVA方法调用的同步特性相结合在异步模式下,结果数据在开始调用之后的一段时间之后才可以被异步访问获取到DWR允许WEB开发人员传递一个回调函数,来异步处理Java函数调用过程 

另处 dwr还是文件的一种格式: 比如以Dreamweaver软件里有查找和替换,经常用的查找和替换内容可以保存,保存的文件就是以 dwr结尾的文件。这种文件用记事本打开后可以看到它的内容。

通过使用 AJAX 技术 ,去完成 的,具体参考 jquery

~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~

~~~~~~~~~~

~~~~~~

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11676423.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存