mysql - 在 servlet 中使用 JDBC

标签 mysql tomcat servlets

我对 servlet 概念真的很陌生。只是用谷歌搜索了一些理论,进行了研究,现在我想要一个实践经验。我想要做的就是创建一个可以访问 mysql 数据库的 servlet。一个简单的 JSP 页面,它接受“名称”和“标记”,然后点击 servlet,后者依次访问数据库并将名称和标记输入数据库。

我已经创建了一个数据库和一个 JSP 页面。我也创建了一个 servlet。我的库中有 mysql 连接器,我用 Class.forname() 概念引用它。但是当我在我的服务器(Tomcat v6.0)上运行它时,它给出了一个类未找到'com.mysql.jdbc.Driver'的异常。但是当我在另一个不是 servlet 的项目(它只是一个简单的 java 项目)中运行这个 mysql 部分时,它会正确执行并且数据库也会更新。

只有当我在带有 servlet 的服务器上使用那段代码时才会出现问题。我尝试谷歌搜索,它说我必须在 tomcat 的 WEB-INF/lib 中包含 mysql 连接器。但我根本找不到这条路。关于这方面的任何建议都会对我有所帮助。提前致谢。 :) 这是我的 mysql 部分代码, protected void doGet(HttpServletRequest 请求,HttpServletResponse 响应)抛出 ServletException,IOException {

    PrintWriter out = response.getWriter();
    String name = request.getParameter("name");

    int marks = Integer.parseInt(request.getParameter("marks"));

    try {
        System.out.println("0");
        Class.forName("com.mysql.jdbc.Driver");

        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/testdb123","root","root");

        String qr= "INSERT INTO stuinfo " +
                   "VALUES ('"+name+"',10)";
        System.out.println(qr);

        System.out.println("1");
        Statement stmt = conn.createStatement();
        System.out.println("2");
        stmt.executeUpdate(qr);
        System.out.println("3");

    } catch (Exception e) {
        e.printStackTrace();
    }

}

最佳答案

像 Tomcat 这样的 Servlet 容器运行 WAR(Web ARchive)文件或文件夹。 WAR 的标准文件夹结构是:

(ROOT)
|
+- (content files and folders)
|
+- META-INF (optional)
|  |
|  +- MANIFEST.MF (standard Java manifest file, optional)
|  |
|  +- (other files and folders, optional)
|
+- WEB-INF (Tomcat considers it optional for ease of use)
   |
   +- web.xml (the deployment descriptor)
   |
   +- classes (folder that contains all the classes for this web application)
   |
   +- lib (contains all library JARs for this application THIS IS WHAT YOU WANT)
   |
   +- (other files and folders, optional)

WEB-INF/classes 中的内容和 WEB-INF/lib 中的 JAR 会自动包含在应用程序的类路径中。

在你的应用程序文件夹中,你应该创建一个WEB-INF文件夹,里面有一个lib文件夹,并放置mysql-connector-XXX.jar 在那里。这将解决您的类路径 问题。 servlet 容器不会自动创建文件夹结构。

或者,您可以将mysql-connector-XXX.jar 驱动程序复制到Tomcat 的lib 文件夹中。这将使它对所有应用程序可用。


话虽如此,请同时考虑以下几点:

  1. 总是在 finally block 中关闭连接:

    Connection conn = null;
    try {
        ...
        conn = // get it somehow
    }
    catch( /* any exception you can handle, throw or let go of the rest */ ) {
        ...
    }
    finally {
        // close other JDBC resources (e.g. Statements, ResultSets etc) in a similar way
        if( conn != null ) {
            try { conn.close(); }
            catch(Exception(ignore) {}
        }
    }
    
  2. 一直使用 DriverManager.getConnection 会损害现实生活中的性能。在您对自己的基础知识充满信心之后,请查看连接池和 javax.sql.DataSource以后,不是现在!

关于mysql - 在 servlet 中使用 JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18957317/

相关文章:

java - 使用servlet将图像路径插入数据库

php - Unix 时间戳与日期时间

php - mysql 数据库中的复选框值

java - 无法在 netbeans 中添加 apache tomcat 服务器

Java Servlet/如何将服务器控制台中写入的日志(log.debug 和 log.error 条目)写入单独的 txt 文件?

java - Tomcat session cookie 不会过期

php 检查 mysql 时间戳

mysql - 如何访问MySql数据字典?

java - 如何获取我的 WSDL 的 URL?

tomcat - 在远程服务器上安装 Tomcat