ServletContextListener es útil para informar sobre la iniciación y destrucción del contexto. En un sistema web de gestión de contenido típico, normalmente hay una base de datos detrás. El siguiente ejemplo demuestra cómo conectar la base de datos MySQL durante la etapa de inicialización del contexto.
Herramientas y paquetes: eclipse y Conector JDBC MySQL.
1. Cree un proyecto web dinámico TestServlet, importe el archivo .jar del conector al proyecto.
El archivo jar estará en el directorio lib. Cree una base de datos «testdb» y una tabla «usuario». Ponga algunos registros adentro para probar la conexión más tarde.
2. Coloque un elemento de escucha en el descriptor de implementación web.xml y también coloque 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>
|
xml version = "1.0" encoding = "UTF-8"?> TestServlet display -nombre> index.html index.htm index.jsp welcome- file> default.html default.htm default.jsp welcome-file- list> com.programcreek.testservletlistener.myServletListener url jdbc : mysql: // localhost / base de datos testdb contexto-param> nombre_usuario xiaoran contraseña < param-value> xiaoran testClass testClass servlet-name > edu.uams.testservlet.testClass testClass / testClass url -patrón>
3. Cree una clase de escucha «myServletListener»
package com.programcreek.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("in the listener!!");
sc.setAttribute("db", db);
}
/**
* @see ServletContextListener#contextDestroyed(ServletContextEvent)
*/
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
}
|
paquete com.programcreek.testservletlistener; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; / ** * Clase de implementación de Application Lifecycle Listener myServletListener * * / public class myServletListener implementa ServletContextListener {/ ** * @see ServletContextListener # contextInitialized (ServletContextEvent) * / public void contextInitialized (ServletContextEvent event) {Servlet event.getContextEvent; String url = sc.getInitParameter («url»); String nombre_usuario = sc.getInitParameter («nombre_usuario»); String password = sc.getInitParameter («contraseña»); String database = sc.getInitParameter («base de datos»); Base de datos db = nueva base de datos (url + base de datos, nombre de usuario, contraseña); //System.out.println(«en el oyente !! «); sc.setAttribute («base de datos», base de datos); } / ** * @see ServletContextListener # contextDestroyed (ServletContextEvent) * / public void contextDestroyed (ServletContextEvent arg0) {// TODO Apéndice de método generado automáticamente}}
4. Escriba la clase Base de datos que sirve para conectar la base de datos y proporcionar operaciones de base de datos.
package com.programcreek.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);
}
}
|
paquete com.programcreek.testservletlistener; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; Base de datos de clase pública {conexión privada conn = null; Base de datos pública (URL de cadena, nombre de usuario de cadena, contraseña de cadena) {try {Class.forName («com.mysql.jdbc.Driver»); this.conn = DriverManager.getConnection (url, nombre de usuario, contraseña); } catch (ClassNotFoundException e) {// TODO Bloque de captura generado automáticamente e.printStackTrace (); } catch (SQLException e) {// TODO Bloque de captura generado automáticamente e.printStackTrace (); }} conexión pública getConnection () {return this.conn; } public ResultSet runSql (String sql) lanza SQLException {Statement sta = conn.createStatement (); return sta.executeQuery (sql); }}
5. Escriba la clase de Servlet de prueba.
package com.programcreek.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
}
}
|
paquete com.programcreek.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; // importar javax.servlet.ServletContext; / ** * Clase de implementación de servlet testClass * / clase pública testClass extiende HttpServlet {private static final long serialVersionUID = 1L; / ** * @see HttpServlet # doGet (solicitud HttpServletRequest, HttpServletResponse * respuesta) * / protected void doGet (solicitud HttpServletRequest, respuesta HttpServletResponse) lanza ServletException, IOException {response.setContenttype («) texto / html; Base de datos db = (Base de datos) getServletContext (). GetAttribute («db»); PrintWriter out = response.getWriter (); String sql = «seleccionar * del usuario»; ResultSet rs; intente {rs = db.runSql (sql); while (rs.next ()) {out.println (rs.getString («nombre_usuario»)); }} catch (SQLException e) {// TODO Bloque de captura generado automáticamente e.printStackTrace (); }} / ** * @see HttpServlet # doPost (solicitud HttpServletRequest, HttpServletResponse * respuesta) * / protected void doPost (solicitud HttpServletRequest, respuesta HttpServletResponse) lanza ServletException, IOException {// TODO Método generado automáticamente}
6. Compile el proyecto e impleméntelo en tomcat 6.
Cree el proyecto y copie los archivos en el directorio «webapps» de tomcat.
El directorio y los archivos finalmente se verían como el siguiente directorio:
-TestServlet
— index.html
— WEB-INF
————— clases
————————— com
———————————— programcreek
————————————————– —– testservletlistener
————————————————– —————————————– Database.class
————————————————– —————————————– myServletListener.class
————————————————– —————————————– testClass.class
————— lib
————————— conector-mysql-java-5.1.7-bin.jar
Eso es. Hice esto solo por diversión, y no estoy seguro de que sea la forma correcta de conectar la base de datos.