javax.servlet.ServletException:通信链接失败
我已经尝试了以下用于连接数据库的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文件夹相同的文件。
因此,您要直接在JSP中创建数据库连接,包括在视图中对凭证进行硬编码 - 您绝不应这样做!然后你没有在任何异常处理中包装你的代码,这就是为什么你有一个ServletException作为一般错误消息,真正的原因是未知的 - Servlet容器包装在try ... catch块中的JSP,捕获任何错误发生并抛出一个ServletException。
我也无法看到你关闭连接的位置,但你确实关闭了,不是吗?
首先在视图中放置证书是非常糟糕的主意,其次你永远不知道有多少人会访问你的页面,所以你可能会溢出你的数据库连接。因此,首先将您的数据库连接详细信息放入JNDI中,使用连接池而不是自己创建连接(仍然需要关闭池中的连接,以便除非使用单个共享连接时连接返回到池中,否则不会关闭连接没有那么错),并控制你的错误,这样你就可以看到发生了什么事情,如果事情出错了。
Tomcat(您可以看到我们使用的)包括连接池和JNDI,只需使用它们即可。在这里您可以找到更多:Tomcat JNDI HowTo
但是相同的代码在另一个文件夹中正常工作,数据库连接正常。我也得到异常为“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败发送到服务器的最后一个数据包是0毫秒前。” – ashu 2011-04-26 09:22:22
链路故障通常表示尝试与服务通信时出现问题。这就是说,看起来你的jsp无法连接到你的数据库连接级别。你有你的数据库实例在本地主机上监听吗?你有防火墙是否阻止了你的jsp和你的数据库实例之间的通信?
你能直接连接到本地主机上的mysql服务器吗? – Pushkar 2011-04-26 06:16:14