Tomcat

 

手写代码演示

 

 

 

 

 

 

public class GPTomcat {
    private int port = 8080;
    private ServerSocket server;
    private Map<String,GPServlet> servletMapping = new HashMap<String,GPServlet>();

    private Properties webxml = new Properties();
    //J2EE标准
    //Servlet
    //Request
    //Response


    //1、配置好启动端口,默认8080  ServerSocket  IP:localhost
    //2、配置web.xml 自己写的Servlet继承HttpServlet
    //   servlet-name
    //   servlet-class
    //   url-pattern
    //3、读取配置,url-pattern  和 Servlet建立一个映射关系
    //   Map servletMapping


    private void init(){

        //加载web.xml文件,同时初始化 ServletMapping对象
        try{
            String WEB_INF = this.getClass().getResource("/").getPath();
            FileInputStream fis = new FileInputStream(WEB_INF + "web.properties");
            webxml.load(fis);
            for (Object k : webxml.keySet()) {

                String key = k.toString();
                if(key.endsWith(".url")){
                    String servletName = key.replaceAll("\\.url$", "");
                    String url = webxml.getProperty(key);
                    String className = webxml.getProperty(servletName + ".className");
                    //单实例,多线程
                    GPServlet obj = (GPServlet)Class.forName(className).newInstance();
                    servletMapping.put(url, obj);
                }
            }
        }catch(Exception e){
            e.printStackTrace();
        }
    }

    public void start(){

        //1、加载配置文件,初始化ServeltMapping
        init();

        try {
            server = new ServerSocket(this.port);

            System.out.println("GP Tomcat 已启动,监听的端口是:" + this.port);

            //2、等待用户请求,用一个死循环来等待用户请求
            while (true) {
                Socket client = server.accept();
                //4、HTTP请求,发送的数据就是字符串,有规律的字符串(HTTP协议)
                process(client);

            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void process(Socket client) throws Exception {

        InputStream is = client.getInputStream();
        OutputStream os = client.getOutputStream();

        //7、Request(InputStrean)/Response(OutputStrean)
        GPRequest request = new GPRequest(is);
        GPResponse response = new GPResponse(os);

        //5、从协议内容中拿到URL,把相应的Servlet用反射进行实例化
        String url = request.getUrl();

        if(servletMapping.containsKey(url)){
            //6、调用实例化对象的service()方法,执行具体的逻辑doGet/doPost方法
            servletMapping.get(url).service(request,response);
        }else{
            response.write("404 - Not Found");
        }
        os.flush();
        os.close();
        is.close();
        client.close();
    }

    public static void main(String[] args) {
        new GPTomcat().start();
    }

}

 

 

 

 

 

 

转载自<咕泡学院>

posted @ 2020-02-17 09:09  LPJのBLOG  Views(93)  Comments(0)    收藏  举报