XML文件
读取该文件使用dom4j进行读取
WEB-INF下的TOMCAT配置XML文件
该文件主要进行servlet,filter等tomcat相关容器配置
<?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_3_0.xsd" version="3.0">
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>com.houlu.drp.util.filter.CharsetEncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>com.houlu.drp.util.servlet.InitServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>ShowAddItemServlet</servlet-name>
<servlet-class>com.houlu.drp.basedata.web.ShowAddItemServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShowAddItemServlet</servlet-name>
<url-pattern>/servlet/item/ShowAddItemServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AddItemServlet</servlet-name>
<servlet-class>com.houlu.drp.basedata.web.AddItemServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AddItemServlet</servlet-name>
<url-pattern>/servlet/item/AddItemServlet</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SearchItemServlet</servlet-name>
<servlet-class>com.houlu.drp.basedata.web.SearchItemServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SearchItemServlet</servlet-name>
<url-pattern> /servlet/item/SearchItemServlet</url-pattern>
</servlet-mapping>
</web-app>
sys-config.xml文件
该文件是自己建立的,主要包含了jdbc相关信息
<?xml version="1.0" encoding="UTF-8"?>
<config>
<db-info>
<driver-name>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-name>
<url>jdbc:sqlserver://localhost:1433;databaseName=DRPManagement</url>
<username>a6697238</username>
<password>monkeyws</password>
</db-info>
</config>
beans-config.xml文件
该文件配置了项目使用的类名,是程序能够进行动态加载类
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<service-class>
<service id="com.houlu.drp.basedata.manager.ItemManager" class="com.houlu.drp.basedata.manager.ItemManagerImpl" />
</service-class>
<dao-class>
<dao id="com.houlu.drp.basedata.dao.ItemDao" class="com.houlu.drp.basedata.dao.ItemDao4SqlServerImpl" />
</dao-class>
</beans>
建立工厂,动态加载类
- 建立工具类BeanFactory,该类可以通过读取XML文件的类名,动态 创建对象 ,代替了 new instance() 操作
package com.houlu.drp.util;
import java.util.HashMap;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.houlu.drp.basedata.dao.ItemDao;
import com.houlu.drp.basedata.manager.ItemManager;
/**
* 抽象工厂,创建两个系列
* @author Administrator
*
*/
public class BeanFactory {
//系统配置文件
private String beansConfigFile = "beans-config.xml";
private static BeanFactory instance = null;
private BeanFactory(){
try {
doc = new SAXReader().read(Thread.currentThread().getContextClassLoader().getResourceAsStream(beansConfigFile));
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
throw new RuntimeException();
}
}
public static BeanFactory getInstance(){
if (instance == null) {
synchronized (BeanFactory.class) {
instance = new BeanFactory();
}
}
return instance;
}
//读取 xml文件的docunment
private Document doc = null;
//保存service相关对象
private Map serviceMap = new HashMap();
//保存dao相关对象
private Map daoMap = new HashMap();
/**
* 取得Service系列产品
* @param beanId
* @return
*/
public synchronized Object getServiveObject(Class c){
//如果存在实例,返回
if(serviceMap.containsKey(c.getName())){
return serviceMap.get(c.getName());
}
Element beanElt = (Element)doc.selectSingleNode("//service[@id=\""+c.getName()+"\"]");
String className = beanElt.attributeValue("class");
Object serviceBean = null;
try {
serviceBean = Class.forName(className).newInstance();
//将创建好的对象放到Map中
serviceMap.put(c.getName(), serviceBean);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
//System.out.println(className);
return serviceBean;
}
/**
* 取得Dao系列产品
* @param beanId
* @return
*/
public synchronized Object getDaoObject(Class c){
//如果存在实例,返回
if(daoMap.containsKey(c.getName())){
return daoMap.get(c.getName());
}
Element beanElt = (Element)doc.selectSingleNode("//dao[@id=\""+c.getName()+"\"]");
String className = beanElt.attributeValue("class");
Object daoBean = null;
try {
daoBean = Class.forName(className).newInstance();
//将创建好的对象放到Map中
daoMap.put(c.getName(), daoBean);
} catch (Exception e) {
throw new RuntimeException();
}
//System.out.println(className);
return daoBean;
}
public static void main(String[] args){
// ItemDao iteDao = (ItemDao)BeanFactory.getInstance().getDaoObject(ItemDao.class);
ItemManager itemManager = (ItemManager)BeanFactory.getInstance().getServiveObject(ItemManager.class);
// System.out.println(iteDao);
System.out.println(itemManager);
}
}
使用该方法,在需要创建对象的时候,可以通过反射机制装载对象
package com.houlu.drp.basedata.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import com.houlu.drp.basedata.dao.ItemDao;
import com.houlu.drp.basedata.manager.ItemManager;
import com.houlu.drp.basedata.manager.ItemManagerImpl;
import com.houlu.drp.util.BeanFactory;
/**
* 物料servlet抽象
* @author Administrator
*
*/
public abstract class AbstractItemServlet extends HttpServlet {
protected ItemManager itemManager;
public AbstractItemServlet(){
System.out.println("AbstractItemServlet-----------Construct");
}
@Override
public void init() throws ServletException{
// itemManager = (ItemManager)BeanFactory.getInstance().getServiveObject("itemManager");
BeanFactory beanFactory = (BeanFactory)this.getServletContext().getAttribute("beanFactory");
itemManager = (ItemManager)beanFactory.getServiveObject(ItemManager.class);
}
}