如何在服务器端Java代码上运行JavaScript代码?

我想在服务器端运行JavaScript代码。 我想在我的Java代码中操纵JavaScript返回的结果。 如何做呢?

开始显然是要研究犀牛 。

我想你会发现这3个链接非常有用

  1. JavaScript EE,第1部分:在服务器端运行JavaScript文件
  2. JavaScript EE,第2部分:使用Ajax调用远程JavaScript函数
  3. JavaScript EE,第3部分:在JSP中使用Java脚本API

你也可以看看helma

Helma是一个服务器端Javascript环境和Web应用程序框架,用于快速高效地编写脚本并为您的网站和Internet应用程序提供服务。

Helma是用Java编写的,它使用Javascript作为服务器端脚本环境……

其他答案是正确的, 如果您想在服务器端执行Javascript,则需要在JS运行时的上下文中对其进行评估。

但是,我不相信这正是你所要求的。 我认为您可能希望运行一些“典型”JSfunction,这些function与页面在客户端计算机上的显示方式或客户端上的交互方式有关 – 而且无法在服务器端运行。

作为一个具体的例子:

  1. 如果你想在JS中运行某种算法而不将它移植到Java上 – 比如说,你有一些不透明的Javascript代码可以在给定种子的情况下生成一个特定的序列 – 如果你在服务器上的Rhino上运行它,它会正常工作。
  2. 如果你想在创建页面时调用Javascript函数,而不是在它运行时 – 比如说,为了获得用户的颜色深度/屏幕分辨率并改变页面的生成方式 – 那么这将无法从服务器进行,​​因为那里此时没有客户端进行查询。

从广义上讲,涉及documentnavigator任何Javascript甚至页面本身的任何元素都可能属于后一类。

如果您确实需要获取有关客户端环境的信息以控制页面的呈现方式,则必须从上一页的客户端中提取该信息,并将其编码到请求中(作为查询参数或表单数据)。 然后可以直接在服务器上读取这些参数并用于控制输出。

请记住,当您的代码在服务器端运行时,您正在创建一个页面(最终是一堆HTML,CSS和JS),一旦完成就会发送给客户端 – 此时还没有客户端,所以你无法与他们互动。

如果我在这个问题上得到错误的结论,我会道歉,但这类问题通常是由那些没有掌握客户/服务器分离的人提出的。

您需要Java运行时内部的JS运行时。 一种方法是Rhino

您可以使用Rhino (一个Java的JavaScript库)执行JavaScript。

您可以使用RHINO或NASHORN。

 public class RhinoApp { private String simpleAdd = "var z=9; z*=9"; public void runJavaScript() { Context jsCx = Context.enter(); Context.getCurrentContext().setOptimizationLevel(-1); ScriptableObject scope = jsCx.initStandardObjects(); Object result = jsCx.evaluateString(scope, simpleAdd , "formula", 0, null); Context.exit(); System.out.println(result); } 

如果要在服务器上从Java调用浏览器中的JavaScript,请查看FeRMI框架。 它通过WebSockets实现。