0
我想用ajax調用另一個JSP文件。 Ajax不會等待來自JSP的結果並重定向到下一頁。如果我通過ajax調用PHP。當JS運行重定向時,PHP文件可以使用ignore_user_abort()來避免終止。 JSP中有沒有類似的方法來做同樣的事情?jsp中有ignore_user_abort()函數嗎?
我想用ajax調用另一個JSP文件。 Ajax不會等待來自JSP的結果並重定向到下一頁。如果我通過ajax調用PHP。當JS運行重定向時,PHP文件可以使用ignore_user_abort()來避免終止。 JSP中有沒有類似的方法來做同樣的事情?jsp中有ignore_user_abort()函數嗎?
在與請求線程不同的線程中執行任務。
你問的如何在JSP中做到這一點很奇怪。 A JSP的目的是以HTML呈現結果,而不是執行一些業務邏輯。在那裏你通常使用servlet。它還允許您更輕鬆地完成細粒度的Java任務。
好了,給一個servlet的這個基本開球例如,你必須能夠與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.
}
}
注意這一點。不要在所有的servlet上實現這個。只有那些需要這種工作的人才是絕對必要的。不要讓線程泄露給這個。
感謝您的幫助!實際上,我正在使用Jquery Ajax在JSP中調用另一個URL,並且我只能編輯JSP文件以獲得結果。有什麼方法可以在JSP中做同樣的事情? – 2012-03-23 03:51:40
只需將業務邏輯移出JSP到servlet即可。讓JSP根據結果動態生成HTML。 – BalusC 2012-03-23 03:57:03