Soruyu şöyle daha detaylı açıklayacak olursam; kullanıcıdan bir dosya alıp o dosya üzerinden bazı hesaplamalar yapmam gerekiyor. Bu hesaplama işlemi dosyaya göre 15 20 dk civarında zaman alabiliyor. Bu işlemi servlet üzerinde nasıl yaparım diye araştırırken Asyn Servlet olayını öğrendim. Kodda gördüğünüz gibi bir formdan dosyayı alıp bu servlete gönderiyorum sonra Async ayarlayıp contextten executor nesnesi aldıktan sonra execute metodu ile zaman alan işlemi başlatıyorum. Ayrı bi thread olduğu için işlem bitmeden bir alt satırdan devam edip ekrana istek tamamlandı yazıyor fakat hemen bir alt satırdada bu servletten başka bir sayfaya yönlendirme yapmak istediğimde illaki başlattığım threadın bitmesini bekliyor. Bu soruyu sormaktaki amacım işlemin devam ettiğine yönelik kullanıcıya bilgi vermek. Ajax hiç kullanmadım. Bu işlemi nasıl yapabilirim ?
@WebServlet(urlPatterns="/FileUploadServlet", asyncSupported = true)
@MultipartConfig()
public class FileUploadServlets extends HttpServlet{
private static final String UPLOAD_DIR = "exports";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
....
....
....
//Async ayarlanıyor
req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
AsyncContext asyncContext = req.startAsync();
asyncContext.addListener(new AppAsyncListener());
asyncContext.setTimeout(900000000);
//Context den executor alınıyor.
ThreadPoolExecutor executor = (ThreadPoolExecutor)req.getServletContext().getAttribute("executor");
//Executor çalıştırılıyor.
executor.execute(new opt(new File(uploadFilePath+File.separator+fileName), uploadFilePath));
System.out.println("İstek tamamlandı");
resp.sendRedirect("secondPage.html");
}
}