¿Es una buena idea poner el código de conexión jdbc en la clase servlet?

Soy nuevo en el servlet y la base de datos. Tengo un archivo core.java en el que tengo un código de conexión JDBC. En el mismo directorio tengo un archivo coreServlet.java que toma el valor del formulario de la página HTML. Mis preguntas son:

  1. ¿Cómo puedo hacer la interacción entre dos clases Java, por ejemplo, cómo puedo usar las variables que obtuve del formulario HTML en servlet (coreServlet.java) en mi archivo core.java para poder almacenar eso en mi base de datos?
  2. ¿Es una mejor Idea poner mi código de conexión jdbc en coreServlet.java?

Mi estructura de proyecto es como:

  - 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 

Los datos de conexión de la base de datos deben estar en su fuente de datos JNDI y sería mejor si usa un grupo de conexiones pero nunca en una clase. Como la suya es una aplicación web, tenga en cuenta que la configuración del grupo de conexiones depende en gran medida del servidor de aplicaciones web.

Como ejemplos, esto está muy bien explicado en Tomcat 7 Database Pool Pool configuration y JBoss 7 Database Connection Pool configuration (hay otros pasos para configurar el grupo de conexiones de la base de datos en GlassFish y otro servidor de aplicaciones web, tenga en cuenta que esto es diferente en cada servidor) .

En ambos ejemplos, puede ver que tendrá un archivo XML donde coloca los atributos de conexión: URL de base de datos, usuario, contraseña, tamaño de conexión mínimo y máximo de la agrupación (cuántas conexiones a la base de datos se abrirán)

  • Manera de Tomcat:

      
  • JBoss manera:

      jdbc:mysql://localhost:3306/projectx com.mysql TRANSACTION_READ_COMMITTED  10 100 true   user password   32      com.mysql.jdbc.jdbc2.optional.MysqlXADataSource   

Al final, si ha configurado su grupo de conexiones de base de datos y funciona, todo lo que tiene que hacer en su código para recuperar la conexión es llamar a InitialContext#lookup para recuperar el recurso utilizando su nombre de recurso JNDI.

Sabiendo esto, después de configurar un recurso JNDI para conectarse a la base de datos MySQL con el nombre “jdbc / ProjectX”, puede tener una clase que recupere la Connection esta manera:

 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(); } } 

Por cierto, usaría diferentes nombres para paquetes para conocer el grupo de funcionalidad de las clases. Por ejemplo:

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