一、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è)務處理 ---? 產(chǎn)生相應的響應(HttpServletResponse) --- 關閉連接悔据。以下是關于Tomcat 架構的一張圖
二、servlet 是什么
1俗壹、到底什么是servlet科汗,打開idea,ctrl + shift + n策肝,搜索servlet肛捍。就可以看到如下圖,servlet其實就是一個java的接口interface之众,這個接口一共有五個方法拙毫。servlet接口就是定義了一套處理網(wǎng)路請求的規(guī)范,所有實現(xiàn)servlet的類棺禾,都需要實現(xiàn)它的五個方法缀蹄。
servlet是一個規(guī)范,那實現(xiàn)了servlet的類膘婶,就能處理請求了嗎缺前?答案當然是否定的,servlet不會直接和客戶端打交道悬襟。那請求怎么來到servlet呢衅码?答案是servlet容器,就是web服務器脊岳,比如我們最常用的Tomcat逝段。接下來的實例垛玻,我們會講到將servlet部署到Tomcat容器中。
Tomcat才是與客戶端直接打交道的家伙奶躯,他監(jiān)聽了端口帚桩,請求過來后,根據(jù)url等信息嘹黔,確定要將請求交給哪個servlet去處理账嚎,然后調用那個servlet的service方法,service方法返回一個response對象儡蔓,tomcat再把這個response返回給客戶端郭蕉。
2、servlet 的生命周期
?通過調用?init ()?方法 servlet 被初始化浙值。它在第一次創(chuàng)建 servlet 時被調用恳不,該方法只會被執(zhí)行一次
?Servlet 調用?service()?方法來處理客戶端的請求。每次服務器接收到一個 servlet 請求時开呐,服務器會產(chǎn)生一個新的線程并調用服務烟勋。service() 方法由容器調用即Tomcat調用,且 service 方法在適當?shù)臅r候調用 doGet筐付、doPost卵惦、doPut、doDelete 等瓦戚。所以對 service() 方法你什么都不需要做沮尿,只是根據(jù)你接收到的來自客戶端的請求類型來重寫 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ī)則贮喧,當表單提交的時候筒狠,會根據(jù)特定的規(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)如下十籍,即成功