无浏览器的JavaScript

时间:2009-01-25 07:14:18

标签: javascript

我曾与Snap-On Tools的团队负责人进行过一次交谈,并告诉他们使用“JavaScript实现”进行服务器端编码。已经有一段时间了,但我在想,WTF在谈论什么?除了那些在浏览器中实现的解释器之外,还有JavaScript解释器

如何使用不在浏览器上下文中执行的JavaScript创建程序或代码,尤其是服务器端?如果JavaScript在浏览器加载后没有生成内容,那么服务器端到底是什么呢? “服务器端”JavaScript可以在HTTP响应传递之前生成内容 - 如果是,那么它是如何工作的?

我在JavaScript方面遇到很多问题,但是一流的功能非常性感。 JavaScript Object Notation非常纯粹;我无法想象一种更简单的方法来定义数据结构。另外,如果你没有编写任务关键的东西,你可以通过动态类型很快地破解一些代码。

作为一个附带问题,鉴于最后一段,对于学好语言有什么建议(评论就足够了)?

12 个答案:

答案 0 :(得分:13)

如果使用ECMAScript引擎,则不必在浏览器中运行JavaScript。实际上,SpiderMonkeyRhino都是ECMAScript engines

Flash的ActionScript是另一种不必在浏览器中运行的ECMAScript派生语言。

编辑 - 哇,三年来发生了很多变化。为了满足您的服务器需求,我现在推荐使用node.js。

答案 1 :(得分:5)

我所知道的JS解释器列表,它可以独立运行或嵌入其他代码:

答案 2 :(得分:4)

供参考,node.js

答案 3 :(得分:2)

我听说过有关Jaxer的好消息。

到目前为止,这些服务器端javascript解决方案中最受欢迎/最具吸引力的部分是关于数据验证。您可以使用与服务器上再次验证表单客户端相同的代码来确保其完整性。这非常有用,只需简单地进行DRY,并且在发生变化时不会使规则失去同步。

答案 4 :(得分:2)

与VBScript一样,经典ASP页面可以使用JScript作为底层脚本语言。您可以使用CSCRIPT.EXE在Windows命令行上运行JScr​​ipt程序。实际上,它是相同的脚本引擎,并且可以扩展以支持任意数量的语言。

答案 5 :(得分:1)

SpiderMonkeyRhino似乎非常相关。 SpiderMonkey似乎是一个用于执行JS的C库,而Rhino是一个Java-ditto。

答案 6 :(得分:1)

是的,JavaScript虚拟机存在于浏览器之外。以下是经过特别定制的server side改编的列表。

我个人在命令行上使用Spidermonkey来尝试代码输出。 Rhino与ECMAScript一样适用于Spidermonkey(相同的语言实现),但是Rhino在Java VM上运行,而Spidermonkey是用C语言编写的。

答案 7 :(得分:0)

如前所述,Rhino是一个用Java编写的JavaScript引擎。

Java 6有一个新的脚本引擎工具,在Java Scripting API包中称为javax.script,基于Rhino的引擎可以直接使用。我不确定它是否可用于Java EE,但它是Java SE的标准功能。

使用Scripting API非常简单,允许Java应用程序很容易地运行用Javascript编写的脚本。如果您需要在应用程序中编写脚本,则无需编写自己的解释器 - 只需使用Scripting API即可。此外,脚本引擎可以访问Java类库,因此它可以很好地集成以在您的应用程序中执行任务。

例如,使用Scripting API计算4的平方根非常简单:

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval("var x = java.lang.Math.sqrt(4);");
engine.eval("println(x);");

在服务器端使用它的上下文中,我可以设想由Rhino执行的外部Jaavscript,然后将结果嵌入到正在提供的动态生成的HTML页面中。这样,可以添加或修改功能,而无需更改Web应用程序本身。 Javascipt脚本本身可以或多或少地像主应用程序的插件一样。

Java Scripting Programmer's Guide有几个示例,这些示例逐步构建,以介绍Java Scripting API的功能。

Javascript不一定要限于浏览器。与任何脚本语言一样,它实际上取决于脚本引擎的托管位置。

答案 8 :(得分:0)

还有HTTPUnit,它更像是一个浏览器模拟器,因此,它允许您与DOM进行交互。

http://httpunit.sourceforge.net/

答案 9 :(得分:0)

你有没有看过关于用Rhino创建服务器端Javascript引擎的John Resig帖子?

http://ejohn.org/projects/bringing-the-browser-to-the-server/

答案 10 :(得分:0)

选择引擎

其他答案已经提到了几个JS引擎。决定使用哪个语言的一个非常重要的因素应该是实现它的语言(C,C ++或Java是选择),因为这个“宿主语言”将是你很容易访问的那个。

例如,如果你使用rhino,你可以从javascript代码easily access整个java standardlib(通常你会在JS中编写包装器,所以你没有把所有那些java-lib调用放在你的JS代码中)

选择框架

有几个人提到了。我最喜欢helma。老了,试过了。很多大型网站都在它上面运行。在github还有一个性感但非常alpha版的helma:http://github.com/hns/helma-ng/

serverside JS

您可能也对这个群体感兴趣,他们试图统一JS如何在服务器端工作(提供标准库等)。刚开始这个小组,但有很多聪明的人在服务器上工作多年:

https://wiki.mozilla.org/ServerJS

答案 11 :(得分:0)

jslibs是一个很好的无浏览器JavaScript运行时(基于Firefox的JS引擎)