用户输入的公式解析(eval)

时间:2010-11-21 01:11:56

标签: java google-app-engine jsr223

美好的一天,

我试图找出如何允许用户在某些指定数据上调用方法。

我想提供一组预定义的函数:

  • 移动平均线,moving_ave(x,5)..将是x上的5天移动平均线。
  • 3 * x + y ....依此类推......

基本上,我将为用户提供各种数据系列(x,y,z ....)和一组函数 moving_ave,+ - / * ....他们应该能够编写简单的公式(仅限于我提供的功能)。

怎么办呢?

我将在 App Engine for Java 上部署它。

所以我已经发现了JSR-223 ...但我不确定它是否合适?我在想我可以使用Eval函数。

谢谢,

3 个答案:

答案 0 :(得分:1)

听起来你想要的是一个简单语法的解释器。要非常警惕Aerosteak建议的方法;允许您的用户直接调用代码中的函数是危险的,并且很容易在沙箱中出错,从而导致安全漏洞。它还需要你编写自己的解析器。

最简单的方法可能是使用现有语言 - Javascript可能非常适合,您可以使用Rhino,一个用Java编写的Javascript解释器。

答案 1 :(得分:0)

您需要使用Reflection来调用unknow方法。看一下Apache BeanUtil。

您可以使用值为1,2,3的TextBox,将这些值转换为Object Array。

拥有另一个可以使用所有可能方法的ComBo Box。

然后使用Bean Util通过Object Array调用该方法。

例如:

类MyMathManager {

public void doCalculationType1(Object args ...){..} public void doCalculationType2(Object args ...){..} public void doCalculationType3(Object args ...){..}

然后查看Bean的Bean来调用这些方法。

祝你好运。

答案 2 :(得分:0)

这听起来像是可以在客户端而不是服务器上完成的事情。您可以编写一些方便的javascript函数,在服务器上调用一个restful API,以便为执行有用计算的一些更方便的javascript函数提供所需的数据。允许用户评估他们自己的客户端几乎总是安全的..他们无论如何都可以做到。