|
@@ -0,0 +1,63 @@
|
|
|
+package com.sf.tomcat;
|
|
|
+
|
|
|
+import com.sf.tomcat.my.MyHttpServlet;
|
|
|
+import org.dom4j.Document;
|
|
|
+import org.dom4j.Element;
|
|
|
+import org.dom4j.io.SAXReader;
|
|
|
+
|
|
|
+import java.io.File;
|
|
|
+import java.net.ServerSocket;
|
|
|
+import java.net.Socket;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+public class MyTomcat {
|
|
|
+
|
|
|
+ public static void main(String[] args) throws Exception {
|
|
|
+ // 数据初始化
|
|
|
+ init();
|
|
|
+
|
|
|
+ ServerSocket serverSocket = new ServerSocket(8080);
|
|
|
+ // 检测服务是否关闭
|
|
|
+ while (!serverSocket.isClosed()) {
|
|
|
+ Socket socket = serverSocket.accept();
|
|
|
+ MyRequestHandler handler = new MyRequestHandler(socket);
|
|
|
+ new Thread(handler).start();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 记录servlet名字和servlet具体对象的映射关系
|
|
|
+ public static HashMap<String, MyHttpServlet> servletMapping = new HashMap<>();
|
|
|
+ // 记录servlet名字和路径的映射关系
|
|
|
+ public static HashMap<String,String> urlMapping = new HashMap<>();
|
|
|
+
|
|
|
+ private static void init() throws Exception {
|
|
|
+ // 先获取类路径
|
|
|
+ String path = MyTomcat.class.getResource("/").getPath();
|
|
|
+ SAXReader reader = new SAXReader();
|
|
|
+ Document document = reader.read(new File(path + "web.xml"));
|
|
|
+ // 获取根标签
|
|
|
+ Element root = document.getRootElement();
|
|
|
+ // 获取servlet配置
|
|
|
+ List<Element> elements = root.elements();
|
|
|
+ // 所有元素 要么是servlet 要么是servlet-mapping
|
|
|
+ for (Element element : elements) {
|
|
|
+ if("servlet".equalsIgnoreCase(element.getName())) {
|
|
|
+ // 获取指定名字的元素
|
|
|
+ Element servletName = element.element("servlet-name");
|
|
|
+ Element servletCls = element.element("servlet-class");
|
|
|
+ String clsName = servletCls.getText();
|
|
|
+ MyHttpServlet myHttpServlet = (MyHttpServlet)Class.forName(clsName).newInstance();
|
|
|
+ servletMapping.put(servletName.getText(),myHttpServlet);
|
|
|
+ }else if("servlet-mapping".equalsIgnoreCase(element.getName())) {
|
|
|
+ Element servletName = element.element("servlet-name");
|
|
|
+ Element urlPattern = element.element("url-pattern");
|
|
|
+ urlMapping.put(urlPattern.getText(),servletName.getText());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 打印一下初始化的结果
|
|
|
+ System.out.println(servletMapping);
|
|
|
+ System.out.println(urlMapping);
|
|
|
+ }
|
|
|
+}
|