レポートのダウンロードに役立つ Web アプリケーションがあります。ただし、レポートの生成には時間がかかる場合があり、Web 要求は中間プロキシ サーバーを介してタイムアウトします (タイムアウト: 90 秒)。レポートをダウンロードするワークフローは簡単です。クライアントはリクエストを Web サーバーに送信します。Web サーバーはレポートを生成し、Excel のダウンロードとしてクライアントが利用できるようにします。
Excel は POI を使用して生成され、ダウンロードは Spring の AbstractExcelView を使用して提供されます。
(もちろん、タイムアウトを増やさずに)Webリクエストを有効に保つための最良の方法は何ですか?
2 に答える
1 つの方法は、最初の要求で、「レポートを生成しています...」という保留画面を返すようにすることです。これには、要求トークンと JavaScript (通常は AJAX) が含まれており、その要求トークンを Web アプリケーションに定期的に渡して、レポートが作成され、そのときに表示されます。
レポートがどこまで到達したかを Web アプリ コード内に示す場合は、その進行状況を AJAX 経由で返すこともできます。
そうすれば、各リクエストはかなり短い期間で応答されますが、レポート生成の「セッション」はトークン ID によって維持されます。レポートがサーバー上で終了したら、要求されるまでどこかにキャッシュに保存し、ブラウザが閉じられた場合に備えて、しばらくすると期限切れになることをお勧めします。
ああ、これまで触れていなかった嬉しい副次的な効果があります。ユーザーは、Web アプリがまだ生きていて、まだネットワークに接続されていることを確認できます。カーソルを数分間回転させたままにしておくと、不安になる可能性があります:)
COMET 対応サーバーを使用してみましたか? COMET やロング ポーリングなどのさまざまな手法を使用することで、長時間実行されるリクエストを存続させることができます。または、サーバーへの単純な AJAX 生きている ping でうまくいくはずです。レポートが生成されたことがわかったら、Ajax を使用してページを再読み込みします。