1. 什么是Serlvet?
處理請求和發(fā)送響應(yīng)的過程是由一種叫做Servlet的程序來完成的傻丝,并且Servlet是為了解決實現(xiàn)動態(tài)頁面而衍生的東西础米。
Serlvet是由服務(wù)器調(diào)用的,運行在服務(wù)器端。
2. tomcat與servlet
-
Tomcat 是Web應(yīng)用服務(wù)器,是一個Servlet/JSP容器.
3.HTTP協(xié)議
- 請求頭
- 響應(yīng)頭
4.編寫Servlet程序
1)實現(xiàn)Servlet有三種方式:
- 實現(xiàn) javax.servlet.Servlet 接口草则;
- 繼承 javax.servlet.GenericServlet類;
- 繼承 javax.servlet.http.HttpServlet類蟹漓;
實際開發(fā)中炕横,我們通常會選擇繼承HttpServlet類來完成我們的Servlet
2) 實現(xiàn)Serlvet接口
- 建一個自定義類,實現(xiàn)Serlvet接口
- 5個方法需要重寫葡粒,有init【初始化】份殿,destroy【銷毀】,service【服務(wù)】,getServletConfig【Servlet配置】,getServletInfo【Serlvet信息】
- service()方法:寫邏輯代碼
public class myClass implements Servlet{
ServletConfig config=null;
@Override
public void init(ServletConfig config){
this.config=config;
System.out.println("Initialization complete");
}
@Override
public void service(ServletRequest req,ServletResponse res)
throws IOException,ServletException{
res.setContentType("text/html");
PrintWriter pwriter=res.getWriter();
pwriter.print("<html>");
pwriter.print("<body>");
pwriter.print("<h1>Servlet Example Program</h1>");
pwriter.print("</body>");
pwriter.print("</html>");
//調(diào)用ServletResponse對象的方法向瀏覽器輸出HelloWorld
res.getWriter().write("Hello World");
}
@Override
public void destroy(){
System.out.println("servlet life cycle finished");
}
@Override
public ServletConfig getServletConfig(){
return config;
}
@Override
public String getServletInfo(){
return "A Demo program written by Chaitanya";
}
}
3)HttpServlet 類
HttpServlet類已經(jīng)實現(xiàn)了Servlet接口的所有方法,編寫Servlet時嗽交,只需要繼承HttpServlet卿嘲,重寫你需要的方法即可,并且它提供了對HTTP請求的特殊支持夫壁,更加強大
service()方法
在 HttpServlet 的 service(ServletRequest,ServletResponse)方法中會把 ServletRequest 和ServletResponse 強轉(zhuǎn)成 HttpServletRequest 和 HttpServletResponse
doGet() 和 doPost()
在HttpServlet的service(HttpServletRequest,HttpServletResponse) 方法會去判斷這個請求是GET還是POST拾枣,如果是GET請求,就去調(diào)用類中的doGet()方法盒让,如果是POST請求梅肤,就去調(diào)用doPost()方法,這說明我們在子類中去覆蓋doGet()或doPost()方法就可以了
5.Servlet的生命周期
- 加載Servlet邑茄。當Tomcat第一次訪問Servlet的時候姨蝴,Tomcat會負責(zé)創(chuàng)建Servlet的實例
- 初始化。當Servlet被實例化后肺缕,Tomcat會調(diào)用init()方法初始化這個對象
- 處理服務(wù)左医。當瀏覽器訪問Servlet的時候,Servlet 會調(diào)用service()方法處理請求
- 銷毀同木。當Tomcat關(guān)閉時或者檢測到Servlet要從Tomcat刪除的時候會自動調(diào)用destroy()方法浮梢,讓該實例釋放掉所占的資源。一個Servlet如果長時間不被使用的話泉手,也會被Tomcat自動銷毀
- 卸載黔寇。當Servlet調(diào)用完destroy()方法后偶器,等待垃圾回收斩萌。如果有需要再次使用這個Servlet,會重新調(diào)用init()方法進行初始化操作屏轰。
簡單總結(jié):只要訪問Servlet颊郎,service()就會被調(diào)用。init()只有第一次訪問Servlet的時候才會被調(diào)用霎苗。
destroy()只有在Tomcat關(guān)閉的時候才會被調(diào)用姆吭。