0

デバイスをチェックインおよびチェックアウトするためのアプリケーションを作成しようとしています。これまでのところ成功しましたが、データベースとの接続が実際に確立されるまで「接続中」などのメッセージを表示し、実際のログインフォームを表示するというメインの index.jsp ページを表示しようとしています。だから何かの効果があります。

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

私が抱えている問題は、同じメッセージがWebページで何度も繰り返されることですが、一度表示して接続が見つかるまでそこにとどまり、削除してログインフォームに置き換えるだけです. 何かご意見は?

4

3 に答える 3

1

connection pooling接続の管理は非常に簡単で、オーバーヘッドが削減されてアプリが効率的になるため、使用することをお勧めします。

以下を参照してください

于 2012-04-22T08:58:55.973 に答える
0

何かご意見は?

はい。

ユーザーにどのように表示されるかを理解する必要があります。通常のモデルでは、ブラウザーが HTTP 要求をサーバーに送信し、サーバーが HTML ページで構成される応答を作成し、ブラウザーがそのページを表示します。このモデルでは、ユーザーに結果を見てもらいたい場合、サーバーは終了して応答を送信する必要があります。それまでは、ユーザーには空白の画面 (または以前に表示されていたページ) が表示されます。

したがって、更新するページを取得するには、次の 2 つのオプションがあります。

  • <meta>ブラウザが一定の遅延後にリクエストを再送信するように要求するタグを含むページを作成できます。http://en.wikipedia.org/wiki/Meta_refreshを参照

  • ページに JavaScript を埋め込んで、AJAX リクエストをサーバーに送信し、更新を求めることができます。応答を取得すると、JavaScriptは表示されたページの DOM を新しい情報で変更する必要があります。

ただし、どちらの場合も、1 つの JSP に対する 1 回の呼び出しでこれを実行できないことは明らかです。したがって、JSP 内、または JSP にディスパッチするコントローラー内で while ループは必要ありません。ループはブラウザ側で発生する必要があります。

于 2012-04-22T02:57:11.077 に答える
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
    }
}

したがって、エラー メッセージは最初の 1 回だけ表示されます。次に、試行と試行の間を待ちます。

ただし、ループは接続を管理する通常の方法ではありません。なぜこのソリューションを選択するのですか? どのような例外がありますか?

于 2012-04-22T02:58:36.677 に答える