一、寫在前面的話
今天是2016年8月4日,距離我到這個新公司正好一個月,雖說是新公司,10個人的項目組9個我都認識。環境上和溝通上都沒有什么問題,最重要的問題是技術上的,做了將近三年的.net現在要轉向做java了,這一個月真是煎熬啊,離開老東家前每天在公司偷偷的花了一些時間熟悉了一下java語法,進組第一天簡單布置了一下位置和熟悉新公司的環境,第二天申請了SVN權限,下載了代碼並把環境配置了一下,第三天讓項目組長分配了幾個簡單的bug改了下,其實就java和C#而言兩者的語法還是蠻像的,JAVA中的SSM和之前做ASP.NET MVC中使用的Ninject、Dapper啥的思想上也都差不多,這些都不是讓我煩的事情(當然深入研究肯定會發現不一樣的東西,就實現業務邏輯區別不大),讓我受不了的是IDE呀,不知道.NETer在用IDEA或者Eclipse時候有沒有感覺不適應啊,反正我是超不適應。
不久前公司來了一些實習生,老板讓我們這些工作幾年的人帶帶他們,看着這些孩子天真且樂於學習,想起了三年前畢業時候的自己,每次他們問我java問題的時候,真的不好意思啊,扯來扯去總是扯到.net上(囧),所以呢為了不給新人帶跑偏了,我覺得我有必要把Java好好的學習下。於是給自己定了一個100天的計划(其實早就有這個計划了),就像當年高考一樣,突擊一下。至少在人家實習這個階段結合自己以前工作的經驗傳授一些有用的東西吧,不誤人子弟也算是對自己負責。
100天貌似社會上很多培訓班都能出師了吧,我這個人比較笨,估計能把Servlet、JSP弄明白就行了(主要是怕實現不了)。每天下班看一點,總結幾個問題,就以這樣的方式來學習,估計100天也能有不少收獲,嘿嘿~,想想還有點小激動呢!
二、正文
1.Servlet請求和響應
①web容器概念:顧名思義就像一個盒子,里面可以裝東西,這里的web容器(Tomcat,WebLogic,WebSphere)就是裝載Servlet和JSP的環境、負責管理它們的各種對象,並且負責它們的生命周期以及相關服務的鏈接。
②從瀏覽器請求到服務器響應

I.客戶端對Web服務器發出HTTP請求
II.HTTP服務器(Apache)收到HTTP請求以后,轉發給Web容器(Tomcat),此時Web容器會解析HTTP請求的內容,創建各種對象(例如HttpServletRequest、HttpServletResponse、HttpSession等)
III.web容器通過請求的URL來選擇需要用哪個Servlet來處理請求(這個就是web.xml中配置的或者@webServlet注解的作用了)
IV.Servlet根據請求對象(HttpServletRequest)來決定做什么樣的處理,然后通過響應對象(HttpServletResponse)來創建響應。
V.Web服務器將響應回傳到客戶端。
③web容器接收了Http請求做了什么事情?
以下這張時序圖,很好的說明了web容器都干了啥。

I.Web容器接收到web服務器發來的HTTP請求,就會先創建兩個對象,HttpServletRequest對象以及HttpServletResponse對象,將請求信息設置給HttpServletRequest,HttpServletResponse對象后面響應會用到
II.接着Web容器會讀取Web.xml或者@WebServlet的設置,選擇處理該請求的Servlet類,調用service()方法,將I創建的兩個對象作為它的參數,service()方法會根據請求的方式(GET、POST)來選擇調用doXXX()方法,這里使用的是Get方式。
III.這里在doGet()方法內分別調用的getParameter()方法取得請求的參數、setContentType()設置內容類型以及getWriter()方法,它會返回一個PrintWriter對象,向請求方輸出顯示字符串。
V.因為Http是無狀態的協議,所以用完之后就銷毀了上面創建的兩個對象。
這里請求響應對象的創建到銷毀涉及到了,Servlet的生命周期,可以參考這篇文章http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.html
因為內容都是整理了別人的智慧結晶,所以可能后續的文章就不會更新在首頁了,准備認真去代碼的搬運工~
參考資料:《JSP&Servlet學習筆記》
