2010-01-04 243 views

回答

2

您可以使用Rhino这个用于Java的JavaScript库执行JavaScript。

3

您需要一个Java运行库内部的JS运行时。要做到这一点的方法之一是Rhino

8

其他的答案是正确的,如果要在服务器端执行JavaScript,你需要在JS运行的情况下对其进行评估。

但是,我不相信这正是你所问的。我认为你可能会希望运行一些“典型的”JS功能,这些功能与页面在客户端机器上的显示方式或在客户端上的交互方式有关,并且而不是可以在服务器上运行侧。

举一个具体的例子:

  1. 如果你想运行某种在JS算法没有将它移植到Java的 - 比如,你有一个生成给予一个种子特定序列的一些不透明的Javascript代码 - 这如果你在服务器上的Rhino上运行它,它会正常工作。
  2. 如果要调用一个JavaScript函数,而创建的页面,而不是同时它的运行 - 比如,要获得用户的颜色深度/屏幕分辨率和改变是如何产生的页面 - 那么这将是可能从服务器,因为那里没有客户端在这一点上查询。

从广义上来说,涉及documentnavigator或页面本身的甚至任何元素任何JavaScript,很可能属于后一类。

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

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

道歉,如果我的棒上有错误的结束,但这种类型的问题通常是由没有掌握客户端/服务器分离的人提出的。

15

开始显然是看看rhino

我想你会发现这3个环节非常有用

  1. JavaScript EE, Part 1: Run JavaScript files on the server side
  2. JavaScript EE, Part 2: Call remote JavaScript functions with Ajax
  3. JavaScript EE, Part 3: Use Java scripting API with JSP

你也可以看看到helma

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

Helma是用Java编写,并使用JavaScript来它的服务器端脚本环境...

-3

如果你想在服务器上从Java调用JavaScript的浏览器,看看Fermi架构。它通过WebSockets完成。

0

您可以使用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); 
}