2011-04-26 208 views
1

我已經嘗試了以下用於連接數據庫的jsp代碼。javax.servlet.ServletException:通信鏈接失敗

Connection conn=null; 
       Class.forName("com.mysql.jdbc.Driver").newInstance(); 
       conn = DriverManager.getConnection("jdbc:mysql://localhost/TestDB?user=root&password=123"); 

       if (conn != null) { 
        out.println("connected"); 
       } 
       else 
        { 
        out.println("connection failed"); 
       } 

當我將該文件上傳到一個文件夾時,數據庫連接正常。

但我想用在哪裏,我收到以下錯誤

Stacktrace: 
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:355) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
java.lang.reflect.Method.invoke(Method.java:597) 
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) 
java.security.AccessController.doPrivileged(Native Method) 
javax.security.auth.Subject.doAsPrivileged(Subject.java:517) 
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162) 
java.security.AccessController.doPrivileged(Native Method) 
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738) 
sun.reflect.GeneratedMethodAccessor152.invoke(Unknown Source) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
java.lang.reflect.Method.invoke(Method.java:597) 
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) 
java.security.AccessController.doPrivileged(Native Method) 
javax.security.auth.Subject.doAsPrivileged(Subject.java:517) 
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) 
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218) 

root cause 

javax.servlet.ServletException: Communications link failure 

Last packet sent to the server was 0 ms ago. 
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:841) 
    org.apache.jasper.runtime.PageContextImpl.access$1100(PageContextImpl.java:64) 
    org.apache.jasper.runtime.PageContextImpl$12.run(PageContextImpl.java:761) 
    java.security.AccessController.doPrivileged(Native Method) 
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:759) 
    org.apache.jsp.test_jsp._jspService(test_jsp.java:71) 
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331) 
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329) 
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
    sun.reflect.GeneratedMethodAccessor62.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) 
    java.security.AccessController.doPrivileged(Native Method) 
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517) 
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) 
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:162) 
    java.security.AccessController.doPrivileged(Native Method) 
    org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738) 
    sun.reflect.GeneratedMethodAccessor152.invoke(Unknown Source) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    java.lang.reflect.Method.invoke(Method.java:597) 
    org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:244) 
    java.security.AccessController.doPrivileged(Native Method) 
    javax.security.auth.Subject.doAsPrivileged(Subject.java:517) 
    org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:276) 
    org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:218) 

任何可以幫助我在糾正問題的另一個test文件夾相同的文件。

+0

你能直接連接到本地主機上的mysql服務器嗎? – Pushkar 2011-04-26 06:16:14

回答

0

因此,您要直接在JSP中創建數據庫連接,包括在視圖中對憑證進行硬編碼 - 您絕不應這樣做!然後你沒有在任何異常處理中包裝你的代碼,這就是爲什麼你有一個ServletException作爲一般錯誤消息,真正的原因是未知的 - Servlet容器包裝在try ... catch塊中的JSP,捕獲任何錯誤發生並拋出一個ServletException。

我也無法看到你關閉連接的位置,但你確實關閉了,不是嗎?

首先在視圖中放置證書是非常糟糕的主意,其次你永遠不知道有多少人會訪問你的頁面,所以你可能會溢出你的數據庫連接。因此,首先將您的數據庫連接詳細信息放入JNDI中,使用連接池而不是自己創建連接(仍然需要關閉池中的連接,以便除非使用單個共享連接時連接返回到池中,否則不會關閉連接沒有那麼錯),並控制你的錯誤,這樣你就可以看到發生了什麼事情,如果事情出錯了。

Tomcat(您可以看到我們使用的)包括連接池和JNDI,只需使用它們即可。在這裏您可以找到更多:Tomcat JNDI HowTo

+0

但是相同的代碼在另一個文件夾中正常工作,數據庫連接正常。我也得到異常爲「com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信鏈接失敗發送到服務器的最後一個數據包是0毫秒前。」 – ashu 2011-04-26 09:22:22

0

鏈路故障通常表示嘗試與服務通信時出現問題。這就是說,看起來你的jsp無法連接到你的數據庫連接級別。你有你的數據庫實例在本地主機上監聽嗎?你有防火牆是否阻止了你的jsp和你的數據庫實例之間的通信?

相關問題