通过web.xml访问数据库及实现方法

来源:互联网 发布:游戏充值系统源码 编辑:程序博客网 时间:2024/06/08 04:26
通过web.xml访问数据库及实现方法

 【关键字】web.xml
 【作者】lyilei
 【日期】2004-5-18

     项目开始的时候,由于自己的水平和能力的问题以及刚刚从asp转到jsp,项目中的许多问题都没有处理好。其中最严重的一个问题就是访问数据库的参数配置问题。

     由于项目的完成有时间的限制,一开始的数据库连接字符串是通过写固定字符串来解决的,也就是硬编码。情况大致是:写一个javaBean来封装数据库的操作,然后在这个bean对象中写下访问数据库的硬编码字符串,然后其他的部分利用该Bean来访问数据库。

     代码大致如下:
     ------------------------------------------------------
     String strClassName        = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
     String strConnUrl        = "jdbc:microsoft:sqlserver://192.168.2.203:1433;DatabaseName=herovod30";
     String strUserName        = "sa";
     String strUserPass        = "manager";
         
     Class.forName(strClassName);
     conn = DriverManager.getConnection(strConnUrl,strUserName,strUserPass);

     后来,项目基本上完成时,由于我们的项目比较特殊需要封装成产品,因此存在一个安装程序的问题。这样硬编码比较要改变,同样本着改变最少的原则,这里项目负责人选择了使用配置文件来解决数据库参数配置的方法。将数据库的各种配置信息放置到文本配置文件ini中,然后访问系统的时候从配置文件中读取配置信息。这种方法看似是一种比较好的方法,但是如果不给类传递目前所在的路径信息,系统无法从虚拟目录中得到该配置文件,并从其中得到文件的信息。

     最近,通过查看别人写的资料和有关jsp的书籍,发现了web.xml发布描述器是一个绝好的放置这些配置信息的地方。因为它和每一个虚拟目录相对应,服务器加载各个虚拟路径信息时,自动加载了该配置文件中的信息。这样就可以通过它来达到访问数据库的目的。下面时具体的实现过程。

 【实现思路】
     利用一个bean对象init来读取有关数据库配置参数的信息,读取完成之后将这些值放置到全局信息中,方便其他地方的引用。利用数据库访问dbConn对象来打开和关闭数据库的连接,它是一个基类。所有需要处理数据库数据的类从dbConn中派生,然后可以在其中任意的处理数据。

 【实现过程】
 1.web.xml文件内容的设置:

 web.xml
 -------------------------------------------------------------
 <?xml version="1.0" encoding="ISO-8859-1"?>

 <!DOCTYPE web-app
     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "::URL::
http://java.sun.com/dtd/web-app_2_3.dtd">
 <web-app>
     <context-param>
         <param-name>dbDriverClassName</param-name>
         <param-value>oracle.jdbc.driver.OracleDriver</param-value>
     </context-param>

     <context-param>
         <param-name>dbDriverName</param-name>
         <param-value>jdbc:oracle:thin:@192.168.2.204:1521:vod30</param-value>
     </context-param>

     <context-param>
         <param-name>dbUserName</param-name>
         <param-value>system</param-value>
     </context-param>

     <context-param>
         <param-name>dbUserPassword</param-name>
         <param-value>manager</param-value>
     </context-param>
     <servlet>
         <servlet-name>hello</servlet-name>
         <servlet-class>hello</servlet-class>
     </servlet>

     <servlet-mapping>
         <servlet-name>hello</servlet-name>
         <url-pattern>/hello</url-pattern>
     </servlet-mapping>

     <servlet-mapping>
         <servlet-name>hello</servlet-name>
         <url-pattern>/servlet/*</url-pattern>
     </servlet-mapping>
 </web-app>

 2.init类的生成

 initinit.java
 --------------------------------------------------------
 /****
  * 从web.xml文档中得到系统的初始化参数变量,这里得到的是数据库的初始化参数。
  * @Author:liu yilei
  * @Date:2004-5-18
  * @Version:1.00
  */
 package init;

 import java.io.*;
 import javax.servlet.*;
 import javax.servlet.http.*;

 public class init
 {
     public void getApplicationVar (ServletConfig config)
     {
         String dbConnClass             = null;
         String dbConnDriver             = null;
         String dbConnUserName         = null;
         String dbConnUserPassword     = null;

         ServletContext context = config.getServletContext();

         dbConnClass             = (String) context.getAttribute("dbConnClass";
         dbConnDriver         = (String) context.getAttribute("dbConnDriver";
         dbConnUserName         = (String) context.getAttribute("dbConnUserName";
         dbConnUserPassword     = (String) context.getAttribute("dbConnUserPassword";

         if (dbConnClass == null || dbConnDriver == null || dbConnUserName == null || dbConnUserPassword == null)
         {
         
             dbConnClass             = context.getInitParameter("dbDriverClassName";
             dbConnDriver         = context.getInitParameter("dbDriverName";
             dbConnUserName         = context.getInitParameter("dbUserName";
             dbConnUserPassword     = context.getInitParameter("dbUserPassword";
             
             context.setAttribute("dbConnClass",dbConnClass);
             context.setAttribute("dbConnDriver",dbConnDriver);
             context.setAttribute("dbConnUserName",dbConnUserName);
             context.setAttribute("dbConnUserPassword",dbConnUserPassword);
         }
     }
 }

 3.dbConn.java的设计

 dbConn/dbConn.java
 --------------------------------------------------------------
 /****
  * 访问数据库的通用类库文件,其中包括导入数据库驱动和访问数据库的通用方法。
  * @Author:liu yilei
  * @Date:2004-5-14
  * @Version:1.00
  */

 package dbConn;

 import java.io.*;
 import java.sql.*;
 import javax.servlet.*;
 import javax.servlet.http.*;

 public class dbConn
 {
     private String dbConnClassName     = null;
     private String dbConnDriver         = null;
     private String dbUserName         = null;
     private String dbUserPassword     = null;

     Connection    conn = null;
     Statement    stmt = null;
     ResultSet    rs     = null;

     public dbConn()
     {

     }

     public void openDbConn()
     {
         try
         {
             Class.forName(dbConnClassName);
         }
         catch (ClassNotFoundException e)
         {
             System.err.println("dbConn.openDbConn()注册数据库驱动:" + dbConnClassName + e.getMessage());
         }

         try
         {
             conn = DriverManager.getConnection(dbConnDriver,dbUserName,dbUserPassword);
         }
         catch (SQLException e)
         {
             System.err.println("dbConn.openDbConn()建立数据连接:" + dbConnDriver + e.getMessage());
         }    
     }

     public void closeDbConn()
     {
         if (conn != null)
         {
             try
             {
                 conn.close();
             }
             catch (SQLException e)
             {
                 System.err.println("dbConn.closeDbConn()关闭数据连接:" + e.getMessage());
             }
             finally
             {
                 conn = null;
             }
         }
     }

     /**
     * 设置常规信息
     */
     public void setDbConnClassName(String dbConnClassName)
     {
         this.dbConnClassName = dbConnClassName;
     }

     public String getDbConnClassName()
     {
         return dbConnClassName;
     }

     public void setDbConnDriver(String dbConnDriver)
     {
         this.dbConnDriver = dbConnDriver;
     }

     public String getDbConnDriver()
     {
         return dbConnDriver;
     }

     public void setDbUserName(String dbUserName)
     {
         this.dbUserName = dbUserName;
     }

     public String getDbUserName()
     {
         return dbUserName;
     }

     public void setDbUserPassword(String dbUserPassword)
     {
         this.dbUserPassword = dbUserPassword;
     }

     public String getDbUserPassword()
     {
         return dbUserPassword;
     }
 };

 4.其他访问和操作数据库的类

 dbConn/prog.java
 -----------------------------------------------------------
 package dbConn;

 import java.io.*;
 import java.sql.*;
 import javax.servlet.*;
 import javax.servlet.http.*;

 public class prog extends dbConn
 {
     public String getStrProgInfo()
     {
         String strReturn = null;
         String sql = "select sg_name from sys_group";

         openDbConn();

         try
         {
             stmt = conn.createStatement();
             rs = stmt.executeQuery(sql);

             if (rs.next())
             {
                 strReturn = rs.getString(1);
             }
             
             rs.close();
             stmt.close();
         }
         catch (Exception e)
         {
             System.err.println("prog.getStrProgInfo():" + e.getMessage());
         }

         closeDbConn();
         return strReturn;
     }
 };    

 5.具体的使用和操作方法:

 index.jsp
 -------------------------------------------------------
 <%@ page language="java"%>
 <%@ page contentType="text/html;charset=gb2312"%>

 <jsp:useBean id="init" class="init.init" scope="page">
 <%init.getApplicationVar(config);%>
 </jsp:useBean>

 <jsp:useBean id="prog" class="dbConn.prog" scope="page">
 <%
     prog.setDbConnClassName((String) application.getAttribute("dbConnClass");
     prog.setDbConnDriver((String) application.getAttribute("dbConnDriver");
     prog.setDbUserName((String) application.getAttribute("dbConnUserName");
     prog.setDbUserPassword((String) application.getAttribute("dbConnUserPassword");
     String retn = prog.getStrProgInfo();
     out.println(retn);
 %>
 </jsp:useBean>

 【备注】
     可以通过将数据库配置参数封装的方法来达到封装的目的,也就是将配置信息放入到一个bean对象中,然后将该对象放置到application中。