Posted on 2008-10-17 14:50
橡皮人 閱讀(243)
評(píng)論(0) 編輯 收藏
使用JDom做一個(gè)數(shù)據(jù)屏蔽的例子
XML代碼如下:
<?xml version="1.0" encoding="UTF-8"?>
<sys-info>
<sqlinfo>
<driver>com.mysql.jdbc.Driver</driver>
<url>jdbc:mysql://localhost:3306/address</url>
<username>root</username>
<password>nicholas</password>
</sqlinfo>
<programeinfo>
<beans>
<bean id="com.nicholas.inter.IUserDAO" class="com.nicholas.inter.imple.UserDAO"/>
</beans>
</programeinfo>
</sys-info>
其中bean的信息使用屬性來(lái)封裝,這樣做比多個(gè)XML對(duì)象要靈活一些,我的意圖是用Util下的Map裝載這些信息,實(shí)現(xiàn)父類引用指向子類對(duì)象。
寫一個(gè)JDBC訪問對(duì)象的Bean
public class SysInfo {
private String driver;
private String url;
private String username;
private String password;
public SysInfo() {
}
public String getDriver() {
return driver;
}
public void setDriver(String driver) {
this.driver = driver;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
現(xiàn)在開始使用JDom解析XML的數(shù)據(jù)
public class ParseMessage {
SAXBuilder builder = null;
Document doc = null;
Element el_root = null;
//創(chuàng)建單列模式
private static ParseMessage instance;
private ParseMessage() {
builder = new SAXBuilder();
try {
doc = builder.build("config.xml");
el_root = doc.getRootElement();
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static ParseMessage getInstance() {
if (instance == null) {
instance = new ParseMessage();
}
return instance;
}
public SysInfo getSysInfo() {
SysInfo si = null;
try {
Element el_driver = (Element)
XPath.selectSingleNode(el_root,
"//driver");
Element el_url = (Element)
XPath.selectSingleNode(el_root, "//url");
Element el_username = (Element)
XPath.selectSingleNode(el_root,
"//username");
Element el_password = (Element)
XPath.selectSingleNode(el_root,
"//password");
String driver = el_driver.getText();
String url = el_url.getText();
String username = el_username.getText();
String password = el_password.getText();
si = new SysInfo();
si.setDriver(driver);
si.setUrl(url);
si.setUsername(username);
si.setPassword(password);
} catch (JDOMException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return si;
}
public Map initBeans() {
List list = null;
Map map = new HashMap();
try {
list = XPath.selectNodes(el_root, "//bean");
} catch (JDOMException e) {
e.printStackTrace();
}
int index = list.size();
for (int i = 0; i < index; i++) {
Element el_parameter = (Element) list.get(i);
Attribute att_inter =
el_parameter.getAttribute("id");
Attribute att_imple =
el_parameter.getAttribute("class");
String inter = att_inter.getValue();
String imple = att_imple.getValue();
map.put(inter, imple);
}
return map;
}
public UserDAO getUserDAO(Class c) {
UserDAO userdao=null; //用戶數(shù)據(jù)訪問層
Map map=this.initBeans();
try {
userdao=(UserDAO)Class.forName(map.get
(c.getName()).toString()).newInstance();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return userdao;
}
}
DB層依靠ParseMessage類解析出來(lái)的數(shù)據(jù)獲得Driver等等
static SysInfo si=ParseMessage.getInstance().getSysInfo();
public static Connection getConn() throws Exception {
//1 裝驅(qū)動(dòng)
Class.forName(si.getDriver());
Connection conn = DriverManager.getConnection(si.getUrl(), si.getUsername(), si.getPassword());
return conn;
}
Servlet依靠JSP頁(yè)面?zhèn)鬟f過來(lái)的Username Password進(jìn)行判斷
response.setContentType("text/html;charset=gbk");
String username=request.getParameter("username");
String password=request.getParameter("password");
User user=new User(); //User bean
user.setUsername(username);
user.setPassword(password);
UserDAO userdao=ParseMessage.getInstance().getUserDAO
(IUserDAO.class); //傳遞UserDAO父接口
if(userdao.isRight(user)) {
System.out.println("登錄成功!");
} else {
System.out.println("登錄失敗!");
}
其中應(yīng)該注意的是XML的路徑問題,使用Tomcat配置項(xiàng)目的時(shí)候并沒有把XML文件導(dǎo)入到項(xiàng)目的子文件中,根據(jù)需要可以把XMl文件放到SRC中,修改ParseMessage中的路徑即可,因?yàn)槭菍懶±樱抑苯影裍ML文件放到Tomcat目錄下的Bin文件夾中,Tomcat默認(rèn)會(huì)查找Bin文件夾。
初次寫Java單列和JDom,剛寫的時(shí)候非常不習(xí)慣,但是要達(dá)到屏蔽數(shù)據(jù)的效果,可以考慮使用。