我是 servlet 和数据库的新手。我有一个 core.java
文件,其中有 JDBC 连接代码。在同一目录中,我有 coreServlet.java
从 HTML 页面获取表单值的文件。我的问题是:
- 如何在两个 java 类之间进行交互,例如如何使用从 servlet(coreServlet.java) 中的 HTML 表单获取的变量到 core.java 文件,以便将其存储在数据库中?里>
- 将 jdbc 连接代码放在 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 Database Connection Pool configuration 对此进行了很好的解释。和 JBoss 7 Database Connection Pool configuration (在 GlassFish 和其他 Web 应用服务器上还有其他步骤来配置数据库连接池,请注意,这在每个服务器上都不同)。
从这两个示例中,您可以看到您将有一个 XML 文件,用于放置连接属性:数据库 URL、用户、密码、最小和最大池连接大小(将打开多少个数据库连接)
Tomcat方式:
<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"/>
JBoss 方式:
<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 资源名称恢复资源。
了解了这一点,在配置 JNDI 资源以连接到名称为“jdbc/ProjectX”的 MySQL 数据库后,您可以拥有一个恢复 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...)
关于java - 将 jdbc 连接代码放在 servlet 类中是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15981244/