我想实现一个在运行系统命令时向用户显示的页面.一旦命令完成,用户应该被路由到另一个页面.
有哪些策略可以实现这一目标?
(没有javascript的解决方案将是理想的)
绝对可以做到。您想查看文档中的HTTP 异步编程,它解释了如何以非阻塞方式执行此操作。不过,您将需要一点 javascript 来完成重定向部分。
我不知道“系统命令”是什么意思,但您可能想为其创建一个作业,这样您就可以通过请求触发它。然后您可以轮询它直到完成,然后重定向用户。但事实上,文档在解释它方面比我现在所做的要好得多。
这是一个控制器操作的示例,我假设您的系统命令为用户返回某种字符串输出。当作业完成时,它将向用户发送响应,从而触发 javascript 示例中的成功处理程序。
public static void executeSystemCommand(String input) {
Promise<String> outputPromise = new SystemCommandJob(input).now();
String output = await(outputPromise);
renderText(output);
}
Run Code Online (Sandbox Code Playgroud)
基本上,如果您使用 jQuery,$.ajax您可以使用complete事件来轮询数据(如果在超时时间内未成功,只需再次执行请求),并在应用程序响应时使用success/done 事件重定向用户表明“系统命令”已完成运行。
您可以使用的函数示例:
function poll(){
$.ajax({
url: "/systemcommand",
success: function(data){
// redirect to next page here
document.location.href = '/output'
},
complete: poll,
timeout: 20000
});
};
Run Code Online (Sandbox Code Playgroud)
StackOverflow 上还有一个关于javascript长轮询的很好的例子。