import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import com.webserver.servlet.HttpServlet;
服务器所有配置信息
public class ServerContext {
/**
* 所有Servlet
* key:请求路径
* value:具体处理对应业务的Servlet实例
*/
private static Map<String,HttpServlet>SERVLET_MAPPING=new HashMap<>();
static {
//初始化所有的Servlet
initServletMapping();
}
private static void initServletMapping() {
/*
* 加载conf/servlets.xml
* 将根标签下所有的servlet标签获取到,
* 并将其path属性到值作为key
* 将className属性到值取出并利用反射实例化
* 对应的Servlet实例作为value
* 保存到SERVLET_MAPPING这个Map中完成初始化
*
* 注:利用反射加载每个Servlet并实例化后,返回的
* 都是Object,但是这些Servlet都继承自HttpServlet
* 所以将他们造成HttpServlet即可,然后以value
* 形式存入Map。
*/
try {
SAXReader reader=new SAXReader();
Document doc=reader.read(new File("conf/servlets.xml"));
Element root=doc.getRootElement();
List<Element>servletList=root.elements();
for(Element servletEle:servletList) {
String key=servletEle.attributeValue("path");
String className=servletEle.attributeValue("className");
Class cls=Class.forName(className);
HttpServlet value=(HttpServlet)cls.newInstance();
SERVLET_MAPPING.put(key,value);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取请求路径获取对应的Servlet实例
* @param path
* @return
*/
public static HttpServlet getServlet(String path) {
return SERVLET_MAPPING.get(path);
}
public static void main(String[] args) {
HttpServlet servlet=getServlet("/myweb/login");
System.out.println(servlet);
}
}