我们希望在servlet中使用Nashorn。想法是使用ScriptEngine的单例实例,该实例在每个请求中被重复使用。每次请求时,都会创建一个新的EngineScope Binding,并使用该绑定运行eval。然后清除绑定。没有共享对象传递给绑定(仅传递来自servlet的请求/响应对象)。
在servlet内部,ScriptEngine的单例实例可以在不同的线程中并发地进行eval运算,这样做是否正常工作或者会遇到线程问题?以下是一些代码,以便理解:
在servlet内部,ScriptEngine的单例实例可以在不同的线程中并发地进行eval运算,这样做是否正常工作或者会遇到线程问题?以下是一些代码,以便理解:
ScriptEngine engine = getNashornSingleton();
ScriptContext newContext = new SimpleScriptContext();
newContext.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE);
Bindings engineScope =newContext.getBindings(ScriptContext.ENGINE_SCOPE);
engineScope.put("request", request);
engineScope.put("response", response);
engine.eval(jsCode, engineScope);
engineScope.clear();