6

テキスト出力をブラウザーのページにストリーミングして、約 15 ~ 20 秒かかる操作の進行状況を表示するにはどうすればよいですか? の出力ストリームに直接書き込もうとしましたが、プロセス全体が終了したHttpServletResponseも、ユーザーには完全な出力が表示されます。

これは私がこれまでに試したことです

 @RequestMapping(value = "/test")
 public void test(HttpServletResponse response)
            throws IOException, InterruptedException {
    response.getOutputStream().println("Hello");
    response.getOutputStream().flush();
    Thread.sleep(2000);
    response.getOutputStream().println("How");
    response.getOutputStream().flush();
    Thread.sleep(2000);
    response.getOutputStream().println("are");
    response.getOutputStream().flush();
    Thread.sleep(2000);
    response.getOutputStream().println("you");
    response.getOutputStream().flush();
}
4

4 に答える 4

2

私は Spring MVC の専門家ではありませんが、「accepted」という 202 応答コードを送信するようなことをすると思います。これは、サーバーが要求を受け取り、非同期処理を行うことを示します。通常、サーバーは URL を提供して、クライアントが操作のステータスに関する要求を発行できるようにします。あなたがやろうとしていることは、サーバー/クライアント関係が機能する通常の方法に違反しています。クライアントがサーバーを呼び出し、サーバーが応答すると、接続が閉じられます。どのような状況で、どのような理由でこれを行おうとしていますか? おそらく、もう少し洞察を提供したり、それを行う別の方法を考えたりできますか?

于 2012-07-05T17:01:12.467 に答える
1

使用してみてください:

response.flushBuffer();

JavaDocが言うように:

バッファ内のすべてのコンテンツをクライアントに強制的に書き込みます。このメソッドを呼び出すと、応答が自動的にコミットされます。つまり、ステータス コードとヘッダーが書き込まれます。

于 2012-08-29T09:12:57.860 に答える
-5
@Controller
public class MyController{

    @RequestMapping(value = "/test", method = RequestMethod.GET)
    public @ResponseBody String getTest() {
      return "hello how are you";
    }
}

スプリングコントローラーを使用している場合は、応答本文の注釈を使用して上記を実行できます。

于 2012-07-05T15:19:56.287 に答える