2012-04-22 63 views
0

我正試圖創建一個應用程序來檢查進出設備。到目前爲止,我已經取得了成功,但我試圖讓主要的index.jsp頁面顯示一條消息,如「連接」,直到與數據庫建立連接,然後顯示實際的登錄表單。所以有些影響。循環嘗試連接到JDBC

Connection con = null; 
String driver = "com.mysql.jdbc.Driver"; 
Class.forName(driver).newInstance(); 
boolean connected = false; 

while(!connected) { 
    try{ 
     String url = "jdbc:mysql://localhost:3306/test"; 
     con = DriverManager.getConnection(url,"username","password"); 
     connected = true; 

     //Display form allowing user to authenticate login 

    } catch(Exception e) { 
     //Display Message "Attempting to connect to database" 
    } 
} 

我的問題是同樣的信息會得到反反覆覆地在網頁上,但我只是希望它顯示一次,呆在那裏,直到連接被發現,隨後被移除,並與登錄替代形成。有什麼想法嗎?

+0

你可能在你的錯誤應用邏輯。 – 2012-04-22 02:56:34

回答

0

有什麼想法?

是的。

你需要弄清楚你的頭部是如何顯示給用戶的。普通模式是瀏覽器向服務器發送HTTP請求,服務器創建一個由HTML頁面組成的響應,瀏覽器顯示該頁面。在此模型中,如果您希望用戶查看結果,則服務器必須完成併發送響應。在此之前,用戶會看到一個空白屏幕(或之前的頁面)。

因此,要獲得一個網頁,更新你有兩個選擇:

  • 您可以創建一個包含<meta>標籤請求,瀏覽器重新發送一個固定的延時後請求的頁面;請參閱http://en.wikipedia.org/wiki/Meta_refresh

  • 您可以在頁面中嵌入JavaScript以向服務器發送AJAX請求以請求更新。在獲得響應時,javascript需要修改顯示頁面的DOM與新信息。

但無論哪種情況,您都應該清楚,您無法在單個JSP調用中執行此操作。因此,您不需要在JSP中或在分派給JSP的控制器中使用while循環。循環必須發生在瀏覽器端。

0

這樣

Connection con = null; 
String driver = "com.mysql.jdbc.Driver"; 
Class.forName(driver).newInstance(); 
boolean connected = false; 
int errors = 0; 

while(!connected) { 
    try{ 
     String url = "jdbc:mysql://localhost:3306/test"; 
     con = DriverManager.getConnection(url,"root","ikkakumon"); 
     connected = true; 

     //Display form allowing user to authenticate login 

    } catch(Exception e) { 

     if (errors == 0) { 
      //Display Message "Attempting to connect to database" 
     } 
     ++errors; 

     Thread.sleep(1000); // wait a little before the next attempts 
    } 
} 

所以你顯示錯誤消息僅在第一次更改您的密碼。 然後在一次嘗試和另一次嘗試之間等待。

但是,循環不是管理連接的常用方法。你爲什麼選擇這個解決方案?你收到什麼樣的例外?

+0

只要數據庫運行良好,我就不會收到任何實際的異常情況。但我基本上試圖使錯誤檢查更好一點。目前登錄表單首先顯示,如果數據庫尚未提交,那麼當他們提交時,它會直接跳到錯誤的sql頁面,該錯誤顯示tomcat顯示發生了異常等...非常醜陋我寧願只顯示他們的連接對話框,直到數據庫已啓動,然後向他們顯示要登錄的表單 – johnsoga 2012-04-22 23:09:24