手寫乙個Tomcat

2021-08-31 09:47:21 字數 3324 閱讀 8508

1、工程截圖:

2、封裝請求物件:通過輸入流,對http協議進行解析,拿到了http請求頭的方法和url:

/**

* @author wangjie

* @version 2018/11/9

* 封裝請求物件

* 通過輸入流,對http協議進行解析,拿到http請求頭的方法和url

}

3、封裝響應物件:基於http協議的格式進行輸出寫入。

/**

* @author wangjie

* @version 2018/11/9

* 封裝響應物件

* 基於http協議的格式進行輸出寫入。

*/public class myresponse

public void write(string content)throws ioexception

}

4、servlet請求處理基類:tomcat是滿足servlet規範的容器,所以tomcat需要提供api:doget/dopost/service。

/**

* @author wangjie

* @version 2018/11/9

* servlet請求處理基類

*/public abstract class myservlet else if(myrequest.getmethod().equalsignorecase("get"))}}

5、servlet實現類:提供2個實現類,用於測試。

/**

* @author wangjie

* @version 2018/11/9

* servlet實現類

*/public class findgirlservlet extends myservletcatch (ioexception e)

}@override

public void dopost(myrequest myrequest,myresponse myresponse) catch (ioexception e)}}

/**

* @author wangjie

* @version 2018/11/9

*/public class helloworldservlet extends myservlet catch (ioexception e)

}@override

public void dopost(myrequest myrequest,myresponse myresponse)catch (ioexception e)}}

6、servlet配置:對比之前在web開發中,會在web.xml中通過和指定哪個url交給哪個servlet來處理。

/**

* @author wangjie

* @version 2018/11/9

* servlet配置

*/ private string servletname;

private string url;

private string clazz;

this.servletname=servletname;

this.url=url;

this.clazz=clazz;

}public string getservletname()

public void setservletname(string servletname)

public string geturl()

public void seturl(string url)

public string getclazz()

public void setclazz(string clazz)

}

/**

* @author wangjie

* @version 2018/11/9

*/ //制定哪個url交給哪個servlet來處理

static

}

7、啟動類:

tomcat的處理流程:把url對應處理的servlet關係形成,解析http協議,封裝請求/響應物件,利用反射例項化具體的servlet進行處理。

/**

* @author wangjie

* @version 2018/11/9

* tomcat啟動類

*/public class mytomcat

public void start()

}catch (ioexception e)finally catch (ioexception e)}}

}}}public void dispatch(myrequest myrequest,myresponse myresponse)catch (classnotfoundexception e)catch (instantiationexception e)catch (illegalacces***ception e)

}public static void main(string args)

}

8、測試:

執行專案後,在瀏覽器輸入:localhost:8088/girl

在瀏覽器輸入:localhost:8088/world

實踐完成。

手寫乙個簡化版Tomcat

我們啟動tomcat時雙擊的startup.bat檔案的主要作用是找到catalina.bat,並且把引數傳遞給它,而catalina.bat中有這樣一段話 bootstrap.class是整個tomcat 的入口,我們在tomcat原始碼裡找到這個類,其中就有我們經常使用的main方法 這個類有兩...

手寫乙個ajax

在我看來,寫乙個ajax就需要5步,也就是5個單詞,這就是乙個ajax的流程。這五個單詞分別為 new open setrequestheader onreadystatechange send。記住這五個單詞你就有了ajax的整體的框架了。以上是最麻煩的一步,後面的步驟就比較簡單了。ajax.op...

手寫乙個佇列

佇列具有先進先出的特點,從隊尾新增元素,從隊首刪除元素。對於佇列,通常有兩種實現方式 陣列和鍊錶。package basicknowledge.集合框架.queue 基本功能 利用陣列實現乙個迴圈佇列 program summary author peicc create 2019 07 24 10...