1

我对 servlet 概念真的很陌生。刚刚搜索了一些理论,研究了,现在我想要一个实践经验。我要做的就是创建一个可以访问 mysql 数据库的 servlet。一个简单的 JSP 页面,它接受“名称”和“标记”,然后点击 servlet,该 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 request, HttpServletResponse response) throws 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();
    }

}
4

1 回答 1

0

像 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)

Stuff inWEB-INF/classes和 JARs inWEB-INF/lib会自动包含在应用程序的类路径中。

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

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


话虽如此,请考虑以下事项:

  1. 始终在 finally 块中关闭连接:

    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. 以后,不是现在!

于 2013-09-23T11:08:18.213 回答