質問: 現在プロキシサーバのFWセッションタイムアウトの影響により、 長時間掛かるリクエストが強制修了してしまいます。 これを解決するために、長時間掛かるリクエスト実行後、 処理中画面を表示して、裏でAjaxを使った非同期処理を実行し、 処理が修了した段階で処理中画面に処理結果を出力することで対応しようと考えています。 しかし、多々うまく動きません。 Servletにリクエスト送信後、JSPファイルをincludeして、 その結果を処理中画面に表示しようとしたところ、 includeの際に IllegalArgumentException: Response cannot be null が発生します。 また、AsyncContextで最後にJSPに対してdispatchしてみましたが、何も変化がありませんでした。 非同期処理後JSPにリクエストを渡して、その結果を処理中画面に表示する方法はあるのでしょうか? そもそも、長時間掛かる処理では、一般的にどのように設計するものなのでしょうか? ご指導のほど、よろしくお願いいたします。
回答: エラー内容からすると、dispatch時にレスポンスにnullを渡したのだろうか。 リクエストとレスポンスは常に対になり、nullということはない。 最初のリクエストは、非同期処理をキックした後セッションでもファイルでも何でもいいが、その状況が後で分かる形にして「処理中」のレスポンスを返す(ここを理解していない気がする)。 次にインターバルを付けて状況確認のリクエストをあげる。このリクエストでは最初のリクエストで設定したセッションなりを確認して、「処理中」または「完了」のレスポンスを返す。 クライアントは「完了」のレスポンスが返ったら、完了画面を表示または遷移する。