Put Database Connection to ServletContextListener
ServletContextListener is helpful in informing about context Initilazation and destruction. In a typical content management web system, there is always a database behind. The example demonstrate how to connect MySQL database during context initialization stage.
Tools and packages:
eclipse and JDBC MySQL Connector.
1. Create a dynamic web project TestServlet, import the connector .jar file to the project. The jar file will be in the lib directory.
Create a database “testdb” and a table “user”. Put some records inside for testing connection later.
2. Put a listener element in the web.xml Deployment Descriptor and also put the database configuration in it.
<?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. Create a listener class “myServletListener” as following:
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 } }
4. Write the Database class which is for connecting database and providing database operations.
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); } }
5. Write the testing Servlet class.
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 } }
6. Build the project and deploy to tomcat 6.
Build the project and copy the files to tomcat “webapps” directory.
The finally directory and files would look like the following directory:
-TestServlet
—index.html
—WEB-INF
—————classes
—————————com
————————————programcreek
——————————————————-testservletlistener
——————————————————————————————-Database.class
——————————————————————————————-myServletListener.class
——————————————————————————————-testClass.class
—————lib
—————————mysql-connector-java-5.1.7-bin.jar
That’s it. I did this just for fun, and not sure this is the correct way to connect database.
You may also like:
Leave a comment