2012-10-17 60 views
0

我使用servlet來創建基於java的網站。 我正在將計算數據發送到服務器,然後該服務器正在進行計算並將結果存儲在數據庫中。.forward()然後用servlet resp.sendRedirect()

我要的是顯示加載頁面,所以我應該得到 1 /表單提交 2 /加載頁面 3 /結果頁面

這樣做,我提交表單給我一個servlet至極顯示器上加載頁面,然後在數據庫中檢查數據是否存在,如果是,則將結果頁面重定向到我。

這是我的裝載servle

public class AffichageChargementServlet extends HttpServlet{ 

    public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
     //recuperation de la clé de l'entité qui contiadra les resultats 
     String key = req.getParameter("key"); 
     //affichage de la page de chargement 
     try { 
      getServletContext().getRequestDispatcher("/loading.html").forward(req, resp); 
     } catch (ServletException e) { 
      System.out.println("problemme dans la servlet AffichageChargementServlet lors du chargement de /loading.html"); 
      e.printStackTrace(); 
     } 
     //verification de la disponibilité de l'entité 
     Key resultatKey = KeyFactory.createKey("Resultat", key); 
     DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); 
     Entity result = null; 
     while(true){ 
      try { 
       result = datastore.get(resultatKey); 
      } catch (EntityNotFoundException e) { 
       System.out.println("pas encore prete"); 
       //ne rien faire, la data n'est pas encore disponible 
      } 
      if(result != null){ 
       System.out.println("redirection vers /affichageResults?key="+key); 
       resp.sendRedirect("/affichageResults?key="+key); 
      } 
     } 
    } 

} 

正如我剛纔瞭解到,這是不可能做到多重定向在Servlet,所以我得到一個java.lang.IllegalStateException:響應已經提交

是否有解決方法?

感謝

回答

2

Response already committed意味着你已經寫的東西上的反應和你試圖轉發或重定向。

您應該在響應中使用Forward或Redirect中的任意一個,而不是同時使用這兩個代碼。您需要首先決定是否轉發或重定向,然後根據您的決定提交響應

+0

我知道,我在問什麼如何才能獲得與2個servlet相同的行爲。 – Eildosa

+0

我想你的源代碼需要兩個獨立的servlet。一個將轉發到加載,然後你會發送來自該頁面的請求到另一個重定向的servlet。 –

+0

問題是一旦servlet已轉發到加載頁面,它不能重定向到其他servlet(在加載頁面上沒有用戶輸入) – Eildosa

相關問題