Servlet(Server Applet),全稱Java Servlet,未有中文譯文。是用Java編寫的服務器端程序。其主要功能在於交互式地瀏覽和修改數據,生成動態Web內容。狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,通常狀況下,人們將Servlet理解爲後者。java
Servlet運行於支持Java的應用服務器中。從實現上講,Servlet能夠響應任何類型的請求,但絕大多數狀況下Servlet只用來擴展基於HTTP協議的Web服務器。數據庫
其實咱們能夠將servlet想簡單一點,不用考慮那麼多。
它就是用Java語言編寫的一套接口,介於瀏覽器(HTTP客戶端)和數據庫(HTTP服務器)之間(實際存在服務器上),用於處理HTTP請求。
代碼編寫好以後,還不能直接使用,須要部署到一個servlet容器(好比tomcat)。由這個容器接收請求,並分發給對應的servlet去處理,最後再由容器響應。瀏覽器
servlet部署在容器中,他的生命週期也是由容器管理的。須要注意的是容器啓動的時候,servlet不必定被加載,servlet只在收到請求的時候纔會被加載和實例化。而這以後,若是沒有特殊狀況(好比容器內存回收),那麼servlet實例會直到服務器關閉才被銷燬。tomcat
servlet能夠由 javax.servlet 和 javax.servlet.http 包建立,它裏面提供了五個方法:bash
咱們重點關注 一、三、5 三個方法。
init()是初始化方法,只在servlet第一次接受請求時執行一次,與之類似的是destroy()方法,只在servlet銷燬時執行才執行一次,這兩個方法在一個servlet實例中都只執行一次。服務器
service()方法就是處理HTTP請求的方法,每次請求的時候都會調用這個方法,這個方法能夠被執行屢次。ide
這裏講解三種建立servlet的方式ui
public class ServletDemo1 implements Servlet {
//public ServletDemo1(){}
//當Servlet第一次被建立對象時執行該方法,該方法在整個生命週期中只執行一次
public void init(ServletConfig arg0) throws ServletException {
System.out.println("=======init=========");
}
//對客戶端響應的方法,該方法會被執行屢次,每次請求該servlet都會執行該方法
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("hehe");
}
//當Servlet被銷燬時執行該方法
public void destroy() {
System.out.println("******destroy**********");
}
//當中止tomcat時銷燬的servlet。
public ServletConfig getServletConfig() {
return null;
}
public String getServletInfo() {
return null;
}
}
複製代碼
這種方法比較少用spa
public class ServletDemo2 extends GenericServlet {
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("heihei");
}
}
複製代碼
最經常使用的方法code
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("haha");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("ee");
doGet(req,resp);
}
}
複製代碼
關於HttpServlet、GenericServlet 和 Servlet 的關係是這樣的:
GenericServlet 是 Servlet 的一個子類抽象類,對其中的 init() 和 destroy() 提供了默認實現,能夠直接調用 ServletConfig 中的方法。繼承這個類必須重寫service()方法。
HttpServlet 也是一個抽象類,它進一步繼承並封裝了 GenericServlet,因爲這個類還擴展了HTTP的內容,所以還須要傳入HttpServletRequest 和 HttpServletResponse兩個參數。
這裏須要瞭解的是,JSP也是HttpServlet的擴展,只不過是使用了HTML的書寫格式,在其中加入Java代碼。也就是說JSP也是一個servlet。