我是servlet和数据库的新手core.java,我有一个包含JDBC连接代码的coreServlet.java文件,在同一个目录中,我有一个文件,该文件的格式来自HTML页面。我的问题是:
core.java
coreServlet.java
我的项目结构如下:
- aarya(project name) | - WEB-INF | | -web.xml -src | -pkg | -CoreServlet.java(servlet to interact HTML form) -Main.java -Core.java(jdbc code is here to interact database) | -html | - core.html | - css | -core.css | -javascript | -core.js | - lib | -index.html
数据库连接的数据应该在你的JNDI数据源,如果你使用一个连接池,但它会更好, 从来没有 在一个班。由于您的服务器是Web应用程序,因此请注意,连接池配置在很大程度上取决于Web应用程序服务器。
作为示例,这在Tomcat 7数据库连接池配置和JBoss 7数据库连接池配置中得到了很好的解释(还有其他步骤可以在GlassFish和其他Web应用程序服务器上配置数据库连接池,请注意,这在每个服务器上都是不同的) 。
从两个示例中,您都将看到一个XML文件,其中放置了连接属性:数据库URL,用户,密码,最小和最大池连接大小(将打开多少个数据库连接)
<Resource name="jdbc/ProjectX" auth="Container" type="javax.sql.DataSource" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/projectx" username="user" password="password" maxActive="20" maxIdle="10" maxWait="-1"/>
<datasource jndi-name="jdbc/ProjectX" pool-name="MySqlDS"> <connection-url>jdbc:mysql://localhost:3306/projectx</connection-url> <driver>com.mysql</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>10</min-pool-size> <max-pool-size>100</max-pool-size> <prefill>true</prefill> </pool> <security> <user-name>user</user-name> <password>password</password> </security> <statement> <prepared-statement-cache-size>32</prepared-statement-cache-size> <share-prepared-statements/> </statement> </datasource> <drivers> <driver name="com.mysql" module="com.mysql"> <xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class> </driver> </drivers>
最后,如果您已经配置了数据库连接池并且可以使用,则在代码中恢复连接所需要做的就是调用InitialContext#lookup使用其JNDI资源名称恢复资源。
InitialContext#lookup
知道了这一点,在将JNDI资源配置为以名称“ jdbc / ProjectX”连接到MySQL数据库之后,您可以拥有一个可以Connection像下面这样恢复的类:
Connection
public class DatabaseConnectivity { public static Connection getConnection() throws NamingException, SQLException { InitialContext cxt = new InitialContext(); DataSource ds = (DataSource) cxt.lookup("java:/comp/env/jdbc/ProjectX" ); return ds.getConnection(); } }
顺便说一下,我将对包使用不同的名称来了解类的功能组。例如:
src - edu.home.controller.servlet + CoreServlet.java - edu.home.controller.filter + SessionFilter.java - edu.home.model.entity + AnEntity.java + AnotherEntity.java - edu.home.model.database + DatabaseConnectivity.java - edu.home.model.service + AnEntityService.java + AnotherEntityService.java (and on and on...)