无法在 jsp 文件中建立 jdbc 连接

Posted

技术标签:

【中文标题】无法在 jsp 文件中建立 jdbc 连接【英文标题】:unable to have jdbc connection in jsp file 【发布时间】:2011-04-08 07:32:00 【问题描述】:

嘿,我想在我的 jsp 文件中建立简单的 jdbc 连接,文件如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@page import="java.sql.DriverManager"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
hello world.
<% 

try
    Class.forName("com.mysql.jdbc.Driver");
    DriverManager.getConnection("jdbc:mysql://localhost:3306/saurabh","root","");
    System.out.println("Connection successful");
catch(Exception e)
    e.printStackTrace();


%>
</body>
</html>

每当我尝试运行此代码时,我都会在 Eclipse 中得到以下控制台输出:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:128)
    at org.apache.jasper.servlet.JasperLoader.loadClass(JasperLoader.java:66)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:169)
    at org.apache.jsp.myJspDemo_jsp._jspService(myJspDemo_jsp.java:68)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Thread.java:619)

当我尝试从一个简单的 java 文件建立相同类型的连接时,最后一件事是这样的。那么jsp文件有什么问题。

PS:我正在使用 Ubuntu 10.10 发行版和 Eclipse 3.5。而且我还将jar文件添加到项目的java构建路径中。这在 Windows 上运行良好。

那该怎么办??

在此先感谢 :)

【问题讨论】:

在 JSP 中获得连接是个非常糟糕的主意。 您应该只将代码放在.java 文件中,而仅将演示文稿放在.jsp 文件中。混合它们会导致以后的维护噩梦。 @user:没有业务逻辑应该驻留在 JSP 中。它们应该用于产生输出。任何业务逻辑(包括数据库连接)都应该在 Servlets/Actions 中完成(取决于您对任何 Web 框架的使用)。或者更好的是:在从 Servlets/Actions 调用的专用类中。 问题是JSP应该只是视图层,不应该包含任何业务逻辑。 关于 MVC 的链接:en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller 你也应该看看这个:springsource.org 【参考方案1】:

您需要将 mysql 驱动程序部署到您的 servlet 容器(Tomcat / Jetty),以便 JSP 可以找到它们。

但正如@crafstman 在评论中所说,将与数据库相关的内容放在显示代码中是非常糟糕的做法。无论是出于安全原因,还是出于性能考虑。

【讨论】:

我是 jsp 和 servlet 的新手,请您详细说明一下。还是谢谢你的回复 由于即使从JSP中提取逻辑也需要将JDBC驱动添加到webapp,所以第一行仍然适用。【参考方案2】:

在将其部署到服务器之前,您的 mysql 驱动程序 JAR 应放在项目的 WEB-INF/lib 目录中。

【讨论】:

【参考方案3】:

把你的MySQL driver放到tomcat/lib或者你可以把MySQL驱动放到yourapplicationproject/WebContent/WEB-INF/lib

将数据库连接放入jsp不是一个好习惯。 如果你把数据库连接放到Servlet code我会更好

【讨论】:

以上是关于无法在 jsp 文件中建立 jdbc 连接的主要内容,如果未能解决你的问题,请参考以下文章

在jsp编程中如何连接数据库

使用JDBC

尝试通过 JDBC 与 Postgres 建立 SSL 连接时出现 PSQLException“无法打开 SSL 根证书文件”

Java中如何与数据库建立连接?

无法在 Spring MVC 中建立 JDBC 连接

在JSP中使用jdbc操作数据库