私は別のJSPファイルを呼び出すためにajaxを使いたいと思います。 AjaxはJSPからの結果を待つことなく、次のページにリダイレクトします。私がajaxでPHPを呼び出している場合。 PHPファイルはignore_user_abort()を使用して、リダイレクトを実行しているJSが終了しないようにすることができます。同じことをするJSPに似たようなメソッドがありますか?jspにignore_user_abort()と同じPHP関数がありますか?
0
A
答えて
3
要求スレッドとは異なるスレッドでタスクを実行します。
JSPでこれを行う方法を尋ねているのは非常に奇妙です。 A JSPは、ビジネスロジックを実行するのではなくHTMLで結果を提示することを意図しています。あなたは通常servletを使用します。また、より簡単に粒度の細かいJavaの処理を行うこともできます。
まあ、サーブレットのこの基本的なキックオフの例を考えると、あなたはignore_user_abort(true)
とPHPと同じで達成することができなければなりません:
@WebServlet("/someurl")
public class SomeServlet extends HttpServlet {
private ExecutorService executor;
@Override
public void init() {
executor = Executors.newFixedThreadPool(10); // Create pool of 10 threads.
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// First collect necessary request data.
Map<String, String> params = request.getParameterMap();
// Task is your custom class which implements Callable<SomeResult> and does the job accordingly in call() method.
Task task = new Task(params);
// Task is now in a queue and will run in a separate thread of the pool as soon as possible.
Future<SomeResult> future = executor.submit(task);
// Current request will block until it's finished. If client aborts request, the task will still run in background until it's finished.
SomeResult someResult = future.get();
// Now do your thing with SomeResult the usual way. E.g. forwarding to JSP which presents it.
request.setAttribute("someResult", someResult);
request.getRequestDispatcher("/WEB-INF/someResult.jsp").forward(request, response);
}
@Override
public void destroy() {
executor.shutdownNow(); // Very important. Or your server may hang/leak on restart/hotdeploy.
}
}
はこれに注意してください。これをすべてのサーブレットに実装しないでください。この種の仕事が絶対に必要な人のみ。これにスレッドをこぼさないでください。
関連する問題
- 1. PHPのignore_user_abort()に相当するmod_perl2/Perl 5はありますか?
- 2. dynlmとdlmには同じ数式がありますか?
- 3. Coldfusionとphpは同じファイルにありますか?
- 4. 関数の変数と関数の変数に同じ名前があります。アクセスするには?
- 5. Magento:ULリストの高さが同じになるjs関数がありますか?
- 6. 同じAWS Cognitoユーザープールに複数のアプリがあると、同じユーザーのcognitoIDは同じになりますか?
- 7. extern宣言と関数定義が同じファイル内にあります
- 8. MatlabにJava関数String.split(デリミタ)と同様の関数がありますか?
- 9. JSPはサーブレットですが、JSPにdoGet()またはdoPost()という関数はありませんか?
- 10. @Idと@Fieldは同じ変数にありますか?
- 11. Heroku PHPとNode.jsは同じアプリケーションにあります
- 12. H2とPは同じ行にあります(HTML、CSS、PHP)
- 13. Apacheとiisは同じサーバーと同じポートにあります
- 14. php関数openssl_verify()の代わりにColdfusionがありますか?
- 15. mediaelement.js同じページに複数の動画がありますか?
- 16. SQL:同じテーブルに複数の一致がありますか?
- 17. 同じ領域に複数の断片がありますか?
- 18. Highcharts.js - 複数のテーマが同じページにありますか?
- 19. 複数のビューポートが同じJTextAreaにありますか?
- 20. 複数のNSFetchRequestControllerが同じビューにありますか?
- 21. 同じPIC32MZに複数のブートローダがありますか?
- 22. 同じテーブルに複数の外部キーがありますか?
- 23. 同じページに2つのHTML/PHPフォームがあります
- 24. php関数が別の関数の中にあります
- 25. 同じJspページにあるAjax
- 26. PHP/PDO "Notice:Undefined variable"しかし同じファイルにあります
- 27. is opencvにmatlab conv2と同等の関数があります
- 28. Bokeh - 同じページに複数の数字があります
- 29. 同じモデル間に2対1の関係があります
- 30. 2つのモジュールに同じ依存関係があります
ありがとうございました!実際には、JSPで別のURLを呼び出すためにJquery Ajaxを使用しています。結果を確認するためにJSPファイルのみを編集できます。 JSPで同じことをする方法はありますか? –
JSPからビジネスロジックをサーブレットに移動するだけです。結果に基づいてHTMLのみを動的に生成するようにJSPを設定します。 – BalusC