欢迎来到天天文库
浏览记录
ID:36270163
大小:4.39 MB
页数:52页
时间:2019-05-07
《深入浅出web容器-tomcat原始码分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、深入淺出Web容器Tomcat原始碼分析林信良資深技術顧問http://openhome.cccaterpillar@openhome.cc主題Web容器與Servlet從HTTP請求到service()在service()的前後從JSP到Servlet自訂標籤處理Web容器與ServletWeb容器與Servlet容器(Container)…裝水的嗎?別鬧了…容器是個Java應用程式,介於Servlet與Web伺服器之間,我管很多事,你不用認識Web伺服器,你只要認得我!Web容器與Servlet管很多事?哪
2、些事啊?你沒想過HTTP那些麻煩的東西是怎麼變成Java物件的嗎?你以為Servlet中的Request與Response是怎麼來的?Web容器與Servlet看起來好像很複雜?要了解我的內在確實不容易,那…先從簡單的開始好了…知道一個Servlet是實作Servlet介面嗎?…..來個簡化版的…if(servlets.get(servletName)==null){servlet=(Servlet)myClass.newInstance();servlets.put(servletName,servlet);
3、servlet.init(newConfig(myClass));}else{servlet=servlets.get(servletName);}servlet.service((ServletRequest)requestFacade,(ServletResponse)responseFacade);publicvoiddestroy(){for(Servletservlet:servlets.values()){servlet.destroy();}}至少你要知道init()、service()與dest
4、roy()…RequestFacaderequestFacade=newRequestFacade(request);ResponseFacaderesponseFacade=newResponseFacade(response);Web容器與Servlet你管的就是這些?當然更多!不只ServletRequest、ServletResponse、ServletConfig、Servlet這些…對了!這個範例改寫自這邊…http://onjava.com/pub/a/onjava/2003/05/14/java
5、_webserver.html從HTTP請求到service()我實際上很強壯的啦….XD從HTTP請求到service()當請求來到時是WorkerThread模式publicvoidrun(){while(running){//AllocateanewworkerthreadMasterSlaveWorkerThreadworkerThread=createWorkerThread();//Acceptthenextincomingconnectionfromtheserversocket...Socket
6、socket=acceptSocket();workerThread.assign(socket);}..}沒原始碼沒真相...XD採用ThreadPool...XD從HTTP請求到service()接下來快轉一下…來到了Http11Processor…我應該說過我負責建立Request與Response物件吧…這個類別剖析HTTP並設定Request、Response從HTTP請求到service()在Http11Processor的process()中,呼叫adapter.service()adapter.
7、service(request,response);再來的話這邊的request、response會被org.apache.catalina.connector套件中的Request、Response包裹起來...WHY?從HTTP請求到service()packageorg.apache.catalina.connector;publicclassRequestimplementsHttpServletRequest{…}packageorg.apache.catalina.connector;publicc
8、lassResponseimplementsHttpServletResponse{…}從HTTP請求到service()再快轉一下…Request與Response送到容器ContainerBase,最後來到StandardWrapper…你要注意一下loadServlet()方法…回憶…Servlet第一次被請求時會被載入…建立ServletConfig…執行init()…呼叫se
此文档下载收益归作者所有