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

我遇到的问题是相同的消息会在网页上一遍又一遍地重复,但我只想让它显示一次并留在那里直到找到连接,然后将其删除并替换为登录表单。有什么想法吗?

4

3 回答 3

1

我建议您使用connection pooling.... 管理连接非常容易,并且会减少开销,从而使您的应用程序高效。

请参阅以下内容

于 2012-04-22T08:58:55.973 回答
0

有什么想法吗?

是的。

您需要了解如何向用户显示内容。正常的模型是浏览器向服务器发送一个 HTTP 请求,服务器创建一个由 HTML 页面组成的响应,然后浏览器显示该页面。在此模型中,如果您希望用户看到结果,服务器必须完成并发送响应。在此之前,用户会看到一个空白屏幕(或他/她之前所在的页面)。

因此,要获得更新的页面,您有两种选择:

  • 您可以创建一个页面,其中包含一个<meta>请求浏览器在固定延迟后重新发送请求的标签;见http://en.wikipedia.org/wiki/Meta_refresh

  • 您可以在页面中嵌入 javascript 以向服务器发送 AJAX 请求,请求更新。收到响应后,javascript 需要使用新信息修改显示页面的 DOM。

但无论哪种情况,您都应该清楚,您不能在对单个 JSP 的单个调用中执行此操作。因此,您不希望在 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
    }
}

所以你只在第一次显示错误信息。然后在一次尝试和另一次尝试之间等待。

然而,循环不是管理连接的常用方法。为什么选择这个解决方案?你收到什么样的例外?

于 2012-04-22T02:58:36.677 回答