2012-03-23 13 views
0

私は別のJSPファイルを呼び出すためにajaxを使いたいと思います。 AjaxはJSPからの結果を待つことなく、次のページにリダイレクトします。私がajaxでPHPを呼び出している場合。 PHPファイルはignore_user_abort()を使用して、リダイレクトを実行しているJSが終了しないようにすることができます。同じことをするJSPに似たようなメソッドがありますか?jspにignore_user_abort()と同じPHP関数がありますか?

答えて

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. 
    } 

} 

はこれに注意してください。これをすべてのサーブレットに実装しないでください。この種の仕事が絶対に必要な人のみ。これにスレッドをこぼさないでください。

+0

ありがとうございました!実際には、JSPで別のURLを呼び出すためにJquery Ajaxを使用しています。結果を確認するためにJSPファイルのみを編集できます。 JSPで同じことをする方法はありますか? –

+0

JSPからビジネスロジックをサーブレットに移動するだけです。結果に基づいてHTMLのみを動的に生成するようにJSPを設定します。 – BalusC

関連する問題