一、web服務器
相信大家都聽過說web服務器,常用的J2EE開發(fā)--Tomcat,.NET開發(fā)--IIS等。HTTP服務器是web服務器的一種,也是開發(fā)中最常見的,除此之外,還有FTP文件服務器。簡單來說,客戶端發(fā)起HTTP請求至服務器。服務器接收到請求之后,再對HTTP響應結果進行封裝,然后再返回給客戶端。
1、關于Tomcat
? ? Tomcat包含了核心服務模塊:Connector連接模塊 和 Container 容器。Tomcat Server 核心是一個Servlet/JSP Container。對每一個HTTP請求,過程如下:
? --獲取連接 --- Tomcat來分析請求(HttpServletRequest)--- 調用servlet的service()方法,進行業(yè)務處理 ---? 產生相應的響應(HttpServletResponse) --- 關閉連接。以下是關于Tomcat 架構的一張圖

二、servlet 是什么
1、到底什么是servlet,打開idea,ctrl + shift + n,搜索servlet。就可以看到如下圖,servlet其實就是一個java的接口interface,這個接口一共有五個方法。servlet接口就是定義了一套處理網路請求的規(guī)范,所有實現(xiàn)servlet的類,都需要實現(xiàn)它的五個方法。

servlet是一個規(guī)范,那實現(xiàn)了servlet的類,就能處理請求了嗎?答案當然是否定的,servlet不會直接和客戶端打交道。那請求怎么來到servlet呢?答案是servlet容器,就是web服務器,比如我們最常用的Tomcat。接下來的實例,我們會講到將servlet部署到Tomcat容器中。
Tomcat才是與客戶端直接打交道的家伙,他監(jiān)聽了端口,請求過來后,根據url等信息,確定要將請求交給哪個servlet去處理,然后調用那個servlet的service方法,service方法返回一個response對象,tomcat再把這個response返回給客戶端。
2、servlet 的生命周期
?通過調用?init ()?方法 servlet 被初始化。它在第一次創(chuàng)建 servlet 時被調用,該方法只會被執(zhí)行一次
?Servlet 調用?service()?方法來處理客戶端的請求。每次服務器接收到一個 servlet 請求時,服務器會產生一個新的線程并調用服務。service() 方法由容器調用即Tomcat調用,且 service 方法在適當?shù)臅r候調用 doGet、doPost、doPut、doDelete 等。所以對 service() 方法你什么都不需要做,只是根據你接收到的來自客戶端的請求類型來重寫 doGet() 或 doPost()。
? 通過調用?destroy()?方法 servlet 終止。整個過程也會只進行一次。
? ?最后,servlet 是由 JVM 的垃圾回收器進行垃圾回收的。
三、servlet 配置
要用Servlet就需要在web.xml中進行配置,解釋下Servlet最基本的配置信息。

Servlet的配置包括兩部分:
1、<servlet>配置Servlet的名字和完整類路徑:
servlet-name是自定義的,就是給Servlet取個名字。
servlet-class是Servlet完整的類,就是從一開始的包一直“.”到該Servlet。
2、<servlet-mapping>是用來截獲請求的,包括servlet-name和url-pattern。
servlet-name跟<servlet>中的servlet-name是對應的,兩個servlet-name一定要一致,否則會找不到對應的Servlet。
url-pattern是截獲請求的規(guī)則,當表單提交的時候,會根據特定的規(guī)則調用相應的Servlet
3、url-pattern大致分為以下幾種方式
????完全匹配? ? 如:<url-pattern>/servlet/MyServlet.do</url-pattern>
? ? 目錄匹配? ? 如:<url-pattern>/servlet/*</url-pattern>
????擴展名匹配? 如:<url-pattern>*.do</url-pattern>
4、容器查找規(guī)則:
????容器會首先查找完全匹配,如果找不到,再查找目錄匹配,如果也找不到,就查找擴展名匹配。
????如果一個請求匹配多個“目錄匹配”,容器會選擇最長的匹配。
例如:servletA的url-pattern為/test/*,而servletB的url-pattern為/test/b/*,此 時訪問http://localhost/test/b時,容器會選擇路徑最長的servlet來匹配,也就是這里的servletB。
注意:”/*.action”這樣一個看起來很正常的匹配會錯。因為這個匹配即屬于路徑映射,也屬于擴展映射,會導致容器無法判斷。
四、servlet 實例
創(chuàng)建一個javaWeb項目。具體參考:java Web 環(huán)境搭建與配置
IDE會幫我們自動生成src、web、web-inf這些文件目錄,還有配置文件web.xml。我們的后端java代碼一般放在src下面,JSP文件放在web目錄下,jar包這些額外的庫文件放在WEB-INF/lib目錄下(lib目錄是我自己新建的,然后右鍵add as library),web.xml直接放在WEB-INF下面。
在src目下,New 一個?servlet 類,取名為TestServlet。

如圖所示,TestServlet默認有doGet,doPost是HttpServlet的方法。
在doGet里面輸入:response.getWriter().println("Sucess!!!");
啟動TomcaT服務,在瀏覽器端輸入http://localhost:8888/Test
出現(xiàn)如下,即成功
