如何在Tomcat服务器上部署带有MySQL数据库的Java Web应用程序

3

我在Eclipse中创建了一个使用MySQL数据库的Java Web应用程序。但现在我需要在Tomcat服务器上部署该Web应用程序。我知道如何部署没有数据库的Web应用程序,但需要数据库方面的帮助。

谢谢您提前的帮助。

你是在代码中指定连接还是使用JNDI? - Kevin Bowersox
我正在使用代码进行连接...@kmb385 - rajG
请澄清以下问题,以便更好地回答您的疑问:1)您是否已经在生产环境中设置和部署了MySQL数据库?2)您的数据库中是否有正确的内容(表格、行等)?3)您能否连接到数据库?4)您能否访问数据?请告知您遇到的具体问题是哪一步? - ppeterka
  1. 是的,我已经设置了MySQL数据库。
  2. 是的,我在数据库中有所有正确的内容,如表等。
  3. 是的,我可以通过我的Web应用程序连接到它,并插入、更新和删除数据库数据。
  4. 我可以访问这些数据。现在我在创建部署的.war文件时遇到问题,如何将MySQL数据库文件添加到其中?
- rajG
3个回答

3

在Java Web应用程序中获取JDBC连接有两种主要方式。

  1. 从容器内注册的JNDI目录服务中的DataSource中检索连接。
  2. 在应用程序代码中手动创建一个连接。

JNDI

使用JNDI需要在tomcat中创建一个连接池。这可以在tomcat的config目录中的context.xml文件中完成。

示例Context.xml条目

  <Resource name="jdbc/EmployeeDB"
            auth="Container"
            type="javax.sql.DataSource"
            username="dbusername"
            password="dbpassword"
            driverClassName="org.hsql.jdbcDriver"
            url="jdbc:HypersonicSQL:database"
            maxActive="8"
            maxIdle="4"/>

这个连接可以在您的代码中按照以下方式检索:
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource)
  envCtx.lookup("jdbc/EmployeeDB");

Connection conn = ds.getConnection();
... use this connection to access the database ...
conn.close();

手动创建

在您的代码中手动创建连接更简单,但是出于可移植性考虑,建议使用JNDI。

手动示例

public class MysqlConnect{
   public static void main(String[] args) {

      Connection conn = null;
      String url = "jdbc:mysql://localhost:3306/";
      String dbName = "jdbctutorial";
      String driver = "com.mysql.jdbc.Driver";
      String userName = "root"; 
      String password = "root";

      try {
          Class.forName(driver).newInstance();
          conn = DriverManager.getConnection(url+dbName,userName,password);
          conn.close();
      } catch (Exception e) {
          e.printStackTrace();
      }
  }
}

在部署这些方案时,重要的是确保您的类路径中有适当的JDBC驱动程序。

我使用了第二个选项连接到MySQL数据库,你能告诉我如何部署我的Web应用程序吗? - rajG
部署没有什么特别的地方,只需确保在类路径中有驱动程序。你收到了具体的错误吗? - Kevin Bowersox
我想让我的MySQL数据库文件变得可移植,以便像MSSQL Server的.mdf文件一样将其添加到.war文件中。 - rajG

1
这里有两种情况:
  1. 您可以直接在代码中使用简单的JDBC和Class.forName()定义连接 - 在这种情况下,您只需要确保包含驱动程序的jar文件在类路径中即可。
  2. 这是首选方法 - 在服务器上定义数据源,并通过使用JNDI API在代码中调用它:

    InitialContext ic = new InitialContext();  
    DataSource ds = (DataSource)ic.lookup("jdbc/testDS");  
    conn = ds.getConnection();  
    

0
在contex.xml中使用--标签,我们可以连接到任何数据库。

这并没有提供问题的答案。如果要批评或请求作者澄清,请在他们的帖子下留言 - 您始终可以在自己的帖子上发表评论,并且一旦您拥有足够的声望,您将能够评论任何帖子 - Ankur
<Resource name="jdbc/yourchoicename" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="root" password="root" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/dbname?autoReconnect=true"/> - AnilHoney
我认为它非常适合任何可能是本地或远程的数据库。 - AnilHoney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接