lunes, 22 de agosto de 2016

Poner la base de datos conectarse en ServletContextListener


ServletContextListener es útil para informar sobre el contexto Initilazation y la destrucción. En un sistema web de administración de contenido típico, normalmente hay una base de datos detrás. El ejemplo siguiente muestra cómo conectar base de datos MySQL durante la fase de inicialización de contexto. 

Herramientas y paquetes: eclipse y el conector de MySQL JDBC.
1. crear un proyecto web dinámico TestServlet, importar el archivo .jar de conector para el proyecto.
Será el archivo jar en el directorio lib. Crear una base de datos "testdb" y una tabla "user". Poner algunos registros dentro para probar la conexión más adelante.
2. poner un elemento de oyente en el web.xml Descriptor de despliegue y también poner la configuración de la base de datos en él.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>TestServlet</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <listener>
    <listener-class>com.programcreek.testservletlistener.myServletListener</listener-class>
  </listener>
  <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost/</param-value>
  </context-param>
  <context-param>
   <param-name>database</param-name>
   <param-value>testdb</param-value>
  </context-param>
  <context-param>
   <param-name>user_name</param-name>
   <param-value>xiaoran</param-value>
  </context-param>
  <context-param>
   <param-name>password</param-name>
   <param-value>xiaoran</param-value>
  </context-param>
  <servlet>
    <description></description>
    <display-name>testClass</display-name>
    <servlet-name>testClass</servlet-name>
    <servlet-class>edu.uams.testservlet.testClass</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>testClass</servlet-name>
    <url-pattern>/testClass</url-pattern>
  </servlet-mapping>
 
</web-app>
3. Cree una clase  "myServletListener"
package com.developer.testservletlistener; 
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
 
/**
 * Application Lifecycle Listener implementation class myServletListener
 *
 */
public class myServletListener implements ServletContextListener {
 
 /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    public void contextInitialized(ServletContextEvent event) {
 
     ServletContext sc = event.getServletContext();
 
     String url = sc.getInitParameter("url");
     String user_name = sc.getInitParameter("user_name");
     String password = sc.getInitParameter("password");
     String database = sc.getInitParameter("database");
     Database db = new Database(url + database, user_name, password);
     //System.out.println("estoy en el escuchador");
     sc.setAttribute("db", db);
 
    }
 
 /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    public void contextDestroyed(ServletContextEvent arg0) {
        // TODO Auto-generated method stub
    }
 
}
4. Escriba la clase de base de datos que es para conectar la base de datos y facilitando las operaciones de base de datos.
package com.developer.testservletlistener; 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
public class Database {
 
 private Connection conn = null;
 
 public Database(String url, String user_name, String password) {
  try {
   Class.forName("com.mysql.jdbc.Driver");
 
   this.conn = DriverManager.getConnection(url, user_name, password);
 
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 }
 
 public Connection getConnection() {
  return this.conn;
 }
 
 public ResultSet runSql(String sql) throws SQLException {
  Statement sta = conn.createStatement();
  return sta.executeQuery(sql);
 }
}
5. Escriba la clase de Servlet de prueba.
package com.developer.testservletlistener;
 
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
//import javax.servlet.ServletContext;
 
/**
 * Servlet implementation class testClass
 */
public class testClass extends HttpServlet {
 private static final long serialVersionUID = 1L;
 
 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  *      response)
  */
 protected void doGet(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
 
  response.setContentType("text/html");
 
  Database db = (Database) getServletContext().getAttribute("db");
  PrintWriter out = response.getWriter();
 
  String sql = "select * from user";
  ResultSet rs;
  try {
   rs = db.runSql(sql);
 
   while(rs.next()){
    out.println(rs.getString("user_name"));
   }
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
 
 }
 
 /**
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  *      response)
  */
 protected void doPost(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
 }
 
}
6. Generar el proyecto y desplegar en Tomcat 6,7,8.
Genere el proyecto y copiar los archivos al directorio de tomcat "webapps".

0 comentarios:

Publicar un comentario