Образец кода для ответа @ attilla
var renderServer = function renderServer(server_data) {
//your js logic...
return html_string.
}
public static void main(String[] args) {
String jsFilePath = jsFilePath();
String jsonData = jsonData();
try (InputStreamReader isr = new InputStreamReader(new URL(jsFilePath).openStream())) {
NashornScriptEngine engine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn");
CompiledScript compiledScript = engine.compile(isr);
Bindings bindings = engine.createBindings();
compiledScript.eval(bindings);
ScriptObjectMirror renderServer = (ScriptObjectMirror) bindings.get("renderServer");
String html = (String) renderServer.call(null, jsonData);
System.out.println(html);
} catch (Exception e) {
e.printStackTrace();
}
}
будьте осторожны при использовании метода renderServer
в многопоточной среде, поскольку привязки не являются потокобезопасными. Одним из решений является использование нескольких экземпляров renderServer
с повторно используемыми пулами объектов. Я использую org.apache.commons.pool2.impl.SoftReferenceObjectPool
, который, кажется, хорошо работает для моего использования.