我需要从java类执行javascript方法(它执行一些报告并转储PDF文件)。
面对如何在java方法中加载上下文路径并直接从java调用js方法的问题。
EG。我需要像/webapp/js/orn/workflow/Engine.js这样的js文件的上下文路径,就像我从java类中的浏览器一样: - ocm \ src \ main \ java \ com \ interra \ orion \ util \ workflow \ ScriptEngineUtil.java
关于如何继续的任何想法,我尝试使用Rhino但是对如何上下文路径感到震惊。
答案 0 :(得分:0)
可用的答案提供了足够的信息来使用Nashorn调用javascript代码,特别是在第一条评论中建议31piy的重复代码。
然后我假设您的真正问题是到达包含您的代码的javascript文件,该文件存在于您的webapp文件夹中。我可以看到一些可能的答案:
这里的一些研究员建议使用Spring方法访问文件的可能方法:Accessing files/directories in webapp folder in Spring您应该考虑是否有可用于特定框架的方法
但是:该文件是否存在于您的webapp文件夹中?它的逻辑在客户端是否必要?由于您需要服务器端的逻辑,我不会(即使是谨慎)将它暴露给您的应用程序的客户端。如果在客户端没有必要,请不要暴露它。请保留它,比如说,在你的应用程序的src / main / resources目录中(假设你用maven或gradle构建它)并从你的类加载器中干净地访问它:
// Access the resource from the classloader
try {
reader = new InputStreamReader(
YourServletOrWhateverClass.class.getClassLoader().
getResourceAsStream("your_javascript_file.js"),
Charset.forName("UTF-8"));
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval(reader);
Invocable inv = (Invocable) engine;
inv.invokeFunction("your_function");
}
catch(NoSuchMethodException nsme) {
nsme.printStackTrace();
}
catch(ScriptException se) {
se.printStackTrace();
}
finally {
try {
reader.close();
}
catch(IOException ioe) {
ioe.printStackTrace();
}
}