web容器做的事情就是,建立Servlet執行個體,并完成Servlet的名稱注冊及URL模式的對應。在請求來到時,web容器會轉發給正确的Servlet來處理請求。
當請求來到http伺服器時,而http伺服器轉交請求給容器時,容器會建立一個代表檔次請求的HttpServletRequest對象,并将請求相關資訊設定給該對象。同時,容器會建立一個HttpServletResponse對象,作為稍後要對用戶端進行相應的java對象。

接着,容器會根據讀取的@webServlet标注或者xml的設定,找出處理該請求的servlet,調用它的service()方法,将建立的HttpServletRequest對象、HttpServletResponse對象傳入作為參數,service()方法中會根據HTTP請求的方式,調用對應的doXXX()方法。接着再doXXX()方法中,可以使用request、resposne對象,如:getParameter()取得請求參數,使用getWriter()取得輸出用的PrintWriter對象,并進行各項響應處理。對PrintWriter做的輸出操作,最後由容器轉換為HTTP響應,再由HTTP伺服器對浏覽器響應。之後容器将對象銷毀。
String username = request.getParameter("name");指定請求參數名稱來取得對應的值。如果傳來的是"123"這樣的字元串值,必須使用Integer.parseInt()這類方法剖析為基本類型。
String[] values = request.getParameterValues("param");就像param=10&param=20&param=30,此時用getParameterValues()取得一個String數組。
如果想要知道請求中有多少請求參數,則可以使用getParameterNames()方法,會傳回一個Enumeration對象。
Enumeration<String> e = request.getParameterNames();
while(e.hasMoreElements()){
String param = e.nextElement();
...
}
對于HTTP标頭的資訊(Header),可以通過以下方法取得:
1、getHeader():使用方式與getParameter類似。
2、getHeaders():與getParameterValues類似。
3、getHeaderNames():與getParameterNames類似。
以下的執行個體如何取得并顯示浏覽器送出的标頭資訊。
HeaderServlet
運作結果:
getReader()方法,可以取得一個BufferedReader對象,可以讀取Body資料。
例子1:讀取請求Body内容
BodyServlet
form.html
在名稱字段上輸入“良葛格”,密碼上輸入“123456”,單機送出按鈕,得到:
Servlet3.0中,新增了Part接口,可以友善進行檔案上傳處理。可以通過request對象的getPart()方法取得Part對象。
例1:上傳檔案到指定目錄。
UploadServlet.java
upload.html
在Tomcat中必須設定@MultipartConfig标注才能使用getPart()相關API。@MultipartConfig也可以設定屬性,比如location。@MultipartConfig(location="c:/workspace"),則上例子就可以修改為:
如果有多個檔案要上傳,可以使用getParts方法,這回傳回一個Collection<Part>,其中是每個上傳檔案的part對象。
例子2:上傳多個檔案
UploadServlet2.java
multi-upload.html
在web應用程式中,經常需要多個Servlet來完成請求。例如,将另一個Servlet的請求處理流程包含進來,或者将請求轉發forward給别的servlet處理。可以使用:
RequestDispatcher dispatcher = request.getRequestDispatcher("some.do");
(1)、使用include()方法
将另一個servlet的操作流程包括至目前的servlet操作之中。
例1:include方法
some.java
othersome.java
運作結果:網頁上看到響應順序是Some do one ... Other do one... Some do two.. .
(2)、使用forward()方法
将處理請求轉發給别的Servlet。
例2:forwod方法
HelloController.java
HelloModel.java
HelloView.java
運作結果:(Model2架構)
當神已無能為力,那便是魔渡衆生