相关疑难解决方法(0)

在Servlet中重用Nashorn ScriptEngine

我想在servlet中执行JavaScript.是否可以在所有servlet调用中重用相同的Scripting Engine?Servlet实例由多个线程共享.这是否需要为每个请求创建一个新的Scripting Engine?这将是一个令人无法接受的性能损失.例如,以下代码是否保存?

public class MyServlet extends HttpServlet {

private ScriptEngineManager factory;
private ScriptEngine engine;

@Override
public void init() throws ServletException {
    factory = new ScriptEngineManager();
    engine = factory.getEngineByName("nashorn");
}

@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException {
    try (PrintWriter writer = res.getWriter()) {
        ScriptContext newContext = new SimpleScriptContext();
        newContext.setBindings(engine.createBindings(), ScriptContext.ENGINE_SCOPE);
        Bindings engineScope = newContext.getBindings(ScriptContext.ENGINE_SCOPE);
        engineScope.put("writer", writer);
        Object value = engine.eval("writer.print('Hello, World!');", engineScope);
        writer.close();
    } catch (IOException | ScriptException ex) {
        Logger.getLogger(AsyncServlet.class.getName()).log(Level.SEVERE, null, ex);
    }
}
Run Code Online (Sandbox Code Playgroud)

}

如果这不安全,那么避免每个请求创建引擎的最佳方法是什么?使用引擎池? …

java servlets nashorn

13
推荐指数
1
解决办法
4036
查看次数

NashornScriptEngine线程安全吗?

任何人都可以澄清NashornScriptEngine是否是线程安全的吗?如果不是线程安全的,那么如何处理多个脚本?

java java-8 nashorn

5
推荐指数
1
解决办法
2399
查看次数

Nashorn MultiThread编程

如果以下代码可以在多线程应用程序中运行,您能帮我解决吗?

这是我的Java脚本,将由Nashorn评估

var Thread = Java.type("java.lang.Thread");
var referenceNumberValid = "0000";
var referenceNumberInvalid = "0001";

function validate (parameters) {
    var isValid = false;
    var statusCode;
    var referenceNumber = parameters.referenceNumber;
    var validateNumber = referenceNumber.substr(0, 7);
    var sum = 0;

    for (ctr = 0; ctr < validateNumber.length; ctr++) {
        sum += parseInt(validateNumber.substr(ctr, 1));
    }

    var checkDigit = sum % 10;
    isValid = parseInt(referenceNumber.substr(7, 1)) == checkDigit;
    statusCode = isValid ? referenceNumberValid : referenceNumberInvalid;

    print("Thread: " + Thread.currentThread().getId() + ", isValid: " + isValid …
Run Code Online (Sandbox Code Playgroud)

javascript java testng multithreading nashorn

2
推荐指数
1
解决办法
1731
查看次数

标签 统计

java ×3

nashorn ×3

java-8 ×1

javascript ×1

multithreading ×1

servlets ×1

testng ×1