开发者社区> 问答> 正文

java与javascript有没有沟通的方法

用java写的界面,中途要调用百度地图api,相应的开发有javascript的不知道怎么在这两种语言建立数据沟通

展开
收起
云栖技术 2016-06-02 13:13:31 2508 0
2 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    JDK6.0支持JAVA与JAVASCRIPT之间的互相调用,下面的实例将演示几种JAVA代码调用执行JAVASCRIPT代码的方法。

      view plaincopy to clipboardprint?
      import javax.script.Invocable; 
      import javax.script.ScriptEngine; 
      import javax.script.ScriptEngineManager; 
      import javax.script.ScriptException; 
       
      public class Test { 
       
       public static void main(String[] args) { 
       ScriptEngineManager sem = new ScriptEngineManager(); 
       ScriptEngine se = sem.getEngineByName("javascript"); 
       try { 
       //调用直接JAVASCRIPT语句 
       se.eval("println('111');"); 
       String tmpstr = "test string"; 
       se.eval(("println('" + tmpstr + "');")); 
       
       //调用无参数方法JAVASCRIPT函数 
       se.eval("function sayHello() {" 
       + " print('Hello '+strname+'!');return 'my name is '+strname;" + "}"); 
       Invocable invocableEngine = (Invocable) se; 
       se.put("strname", "testname"); 
       String callbackvalue=(String) invocableEngine.invokeFunction("sayHello"); 
       System.out.println(callbackvalue); 
       
       //调用有参数JAVASCRIPT函数 
       se.eval("function sayHello2(strname2) {" 
       + " print('Hello '+strname+'!');return 'my name is '+strname2;" + "}"); 
       callbackvalue=(String)invocableEngine.invokeFunction("sayHello2", "testname2"); 
       System.out.println(callbackvalue); 
       
       } catch (ScriptException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       } catch (NoSuchMethodException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
       } 
       } 
      } 
      public class Test {
       public static void main(String[] args) {
       ScriptEngineManager sem = new ScriptEngineManager();
       ScriptEngine se = sem.getEngineByName("javascript");
       try {
       //调用直接JAVASCRIPT语句
       se.eval("println('111');");
       String tmpstr = "test string";
       se.eval(("println('" + tmpstr + "');"));
       //调用无参数方法JAVASCRIPT函数
       se.eval("function sayHello() {"
       + " print('Hello '+strname+'!');return 'my name is '+strname;" + "}");
       Invocable invocableEngine = (Invocable) se;
       se.put("strname", "testname");
       String callbackvalue=(String) invocableEngine.invokeFunction("sayHello");
       System.out.println(callbackvalue);
       
       //调用有参数JAVASCRIPT函数
       se.eval("function sayHello2(strname2) {"
       + " print('Hello '+strname+'!');return 'my name is '+strname2;" + "}");
       callbackvalue=(String)invocableEngine.invokeFunction("sayHello2", "testname2");
       System.out.println(callbackvalue);
       
       } catch (ScriptException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       } catch (NoSuchMethodException e) {
       // TODO Auto-generated catch block
       e.printStackTrace();
       }
       }
      } 

      执行后,输出结果如下:
      111
      test string
      Hello testname!my name is testname
      Hello testname!my name is testname2
       javax.script包为我们提供了不少用得上的类和方法,这样调用增加了前、后台之间的交互性,JAVASCRIPT函数可写在前台页面中,实现内容的变更对后台无影响,不用重新编译、发布即可生效。

    2019-07-17 19:24:38
    赞同 展开评论 打赏
  • 社区爱好者,专为云栖社区服务!

    需要使用http或者websocket进行沟通;
    http可以发起get和post请求,可以ajax,也可以正常提交;

    websocket可以建立长连接。

    具体看你们的业务怎么实现了。

    2019-07-17 19:24:38
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
JavaScript面向对象的程序设计 立即下载
Delivering Javascript to World 立即下载
编程语言如何演化-以JS的private为例 立即下载