1 package my.tomcat2;
2
3 import org.xml.sax.SAXException;
4
5 import javax.xml.parsers.ParserConfigurationException;
6 import javax.xml.parsers.SAXParser;
7 import javax.xml.parsers.SAXParserFactory;
8 import java.io.IOException;
9 import java.util.List;
10 import java.util.Map;
11
12 public class WebApp {
13 private static ServletContext servletContext;
14
15 static {
16 try {
17 //创建一个 解析工厂
18 SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
19 //生产出一个 解析器
20 SAXParser saxParser = saxParserFactory.newSAXParser();
21 //获得一个 文档处理器
22 WebHandler webHandler = new WebHandler();
23 //需要解析哪个文件,并且用什么 文档处理器 来进行处理
24 saxParser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("web.xml"), webHandler);
25
26 //这里就不需要我们手动的将 信息 存入 Map中去
27 //将 webHandler 中的 Entitys 存入到 servlet 中去
28 servletContext = new ServletContext();
29 Map<String, String> servlet = servletContext.getServlet();
30 for(Entity temp : webHandler.getEntities()){
31 servlet.put(temp.getServletName(), temp.getServletClass());
32 }
33 //将 WebHandler 中的 Mappings 存入到 mapping 中去
34 Map<String, String> mapping = servletContext.getMapping();
35 for(Mapping temp : webHandler.getMappings()){
36 List<String> urls = temp.getUrlList();
37 for(String str : urls){
38 mapping.put(str, temp.getServletName());
39 }
40 }
41 } catch (SAXException e) {
42 e.printStackTrace();
43 } catch (IOException e) {
44 e.printStackTrace();
45 } catch (ParserConfigurationException e) {
46 e.printStackTrace();
47 }
48
49 }
50
51 //通过 URL 获取 Servlet,这里用到了 多态,反射
52 public static Servlet getServlet(String url) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
53 if (url == null || url.trim().equals("")) {
54 return null;
55 } else {
56 String reflect = servletContext.getServlet().get(servletContext.getMapping().get(url));
57 return (Servlet) Class.forName(reflect).newInstance();
58 }
59 }
60 }