2012-04-22 65 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