Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以在java中使用服务器回调的javascript函数吗?_Javascript_Java_Eclipse - Fatal编程技术网

我可以在java中使用服务器回调的javascript函数吗?

我可以在java中使用服务器回调的javascript函数吗?,javascript,java,eclipse,Javascript,Java,Eclipse,我正在做一些关于不使用浏览器服务的java项目 所以,我想使用一些来自服务器的JavaScript函数(这是我文章中的回调) 我看到了很多关于在java中使用JavaScript的代码,但这些代码都来自本地文件 我认为有一个解决方案: 当回调到来时,保存此代码并再次使用。但我认为这对我们的项目来说并不理想 你能给我其他的解决办法吗 提前感谢您。这当然是可能的,但它会让您面临巨大的安全风险 没有什么可以阻止您直接从字符串运行JavaScript代码。不要求将其保存在文件中。您可以获取发送到您的服务

我正在做一些关于不使用浏览器服务的java项目

所以,我想使用一些来自服务器的JavaScript函数(这是我文章中的回调)

我看到了很多关于在java中使用JavaScript的代码,但这些代码都来自本地文件

我认为有一个解决方案:

当回调到来时,保存此代码并再次使用。但我认为这对我们的项目来说并不理想

你能给我其他的解决办法吗


提前感谢您。

这当然是可能的,但它会让您面临巨大的安全风险

没有什么可以阻止您直接从字符串运行JavaScript代码。不要求将其保存在文件中。您可以获取发送到您的服务器的帖子正文,并按照如下方式执行:

 package example;

        import jdk.nashorn.api.scripting.JSObject;
        import jdk.nashorn.api.scripting.NashornScriptEngine;    
        import javax.script.ScriptEngineManager;
        import javax.script.ScriptException;

        public class Example {
            private final ThreadLocal<NashornScriptEngine> engineHolder;

            public Example() {
                // You don't need to run code from files. The code can be a string which was posted to your server.
                String jsCodeToRun = "function helloWorld(name) { return { value: 'Hello' + name } }"

                this.engineHolder = ThreadLocal.withInitial(() -> {
                    NashornScriptEngine nashornScriptEngine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn");
                    try {
                        nashornScriptEngine.eval(jsCodeToRun);
                    } catch (ScriptException e) {
                        throw new RuntimeException(e);
                    }
                    return nashornScriptEngine;
                });
            }

           public JSObject runTheCode(String name) {
              try {
                JSObject result = (JSObject) engineHolder.get().invokeFunction("helloWorld", name);

                // The result will be an object returned by our helloWorld function.
                return result;
            } catch (Exception e) {
                throw new IllegalStateException(e);
            }
        }
        }
包示例;
导入jdk.nashorn.api.scripting.JSObject;
导入jdk.nashorn.api.scripting.NashornScriptEngine;
导入javax.script.ScriptEngineManager;
导入javax.script.ScriptException;
公开课范例{
私人最终线程本地引擎管理员;
公共示例(){
//您不需要从文件运行代码。代码可以是发布到服务器的字符串。
String jsCodeToRun=“函数helloWorld(name){return{value:'Hello'+name}”
this.engineHolder=ThreadLocal.withInitial(()->{
NashornScriptEngine NashornScriptEngine=(NashornScriptEngine)new ScriptEngineManager().getEngineByName(“nashorn”);
试一试{
nashornScriptEngine.eval(jsCodeToRun);
}捕获(脚本异常){
抛出新的运行时异常(e);
}
返回引擎;
});
}
公共JSObject运行代码(字符串名称){
试一试{
JSObject结果=(JSObject)engineHolder.get().invokeFunction(“helloWorld”,名称);
//结果将是helloWorld函数返回的对象。
返回结果;
}捕获(例外e){
抛出新的非法状态异常(e);
}
}
}

是的,你可以,正如上面@Daniel Baranowski所建议的那样。
不,你绝对不应该这样做。
运行客户提交的任何代码都会给您带来极大的风险。
它可以访问您的文件系统吗?那你就有麻烦了。
它能执行网络呼叫吗?那你也有麻烦了。

即使您阻止了这些选项,您是否检查此用户代码是否及时终止?

什么是不使用的浏览器服务,您只是在不使用浏览器的情况下发送http请求?如何将请求发送到服务器?你说的“什么时候”是什么意思