通过web.xml访问数据库及实现方法
来源:互联网 发布:游戏充值系统源码 编辑:程序博客网 时间:2024/06/08 04:26
【关键字】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"
"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中。
- 通过web.xml访问数据库及实现方法
- 通过web服务器访问MySQL数据库,并把数据库中的某张表解析成xml格式输出到浏览器
- Spring AOP详解及通过XML配置实现的实现方法
- java证书及通过httpClient实现访问
- Web服务数据库访问中间件的实现
- Web服务数据库访问中间件的实现
- ACTIVEFORM+WebService+ACCESS,Web客户端通过WebService访问Access数据库
- 通过Web Service在本地访问远程数据库的数据
- 传统数据库访问方法及弊端
- 通过代理访问web
- 数组类型存入数据库字段及通过数组查询的实现方法(PHP)
- SpringMVC默认访问首页配置及web.xml配置
- SpringMVC默认访问首页配置及web.xml配置
- 基于NIO实现客户端通过HTTP协议访问WEB站点
- 通过一条sql语句访问不同数据库的方法
- 在ASP中通过SQL访问ACESS数据库的方法
- 通过ADO访问数据库
- 通过JDBC访问数据库
- 关于麻将和牌问题的一种便于算番的算法
- M
- 在Session失效时实现workArea的logout
- Tomcat下Session的使用与管理
- HttpSessionListener统计在线人数
- 通过web.xml访问数据库及实现方法
- asp之转换函数示例
- 主机名解析
- X86汇编语言学习手记(1)
- Java程序员的存储过程
- 软件项目管理问题分析
- 我的Struts书架
- 凤凰卫视“串串show”很有哲理
- 苏格拉底与失恋者