2011-04-26 129 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和你的数据库实例之间的通信?

相关问题