建立Servlet實例有兩個時機:html
關於load-on-startup參數:java
javax.servlet.Servlet源碼: web
public interface Servlet { void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException; String getServletInfo(); void destroy(); }
全部的servlet都是javax.servlet.Servlet的子類,就像Java裏面全部的類都是Object的子類同樣。Servlet類規定了每一個servlet應該實現的方法,這個是遵循Servlet規範的。可是自定義的servlet通常不用直接實現Servlet,而是繼承javax.servlet.GenericServlet或者javax.servlet.http.HttpServlet就好了。這是由於HttpServlet間接實現了Servlet,提供了通用的功能。因此咱們在自定義的TestServlet裏面只須要專一實現業務邏輯就好了。服務器
Servlet裏面有三個比較重要的方法:init、service、destroy。它們被稱做是servlet生命週期的方法,它們都是由servlet容器調用。另外兩個方法用於獲取servlet相關信息的,須要根據業務邏輯進行實現和調用。併發
Servlet生命週期: app
HttpServlet是一個針對HTTP協議的通用實現,它實現了HTTP協議中的基本方法get、post等,經過重寫service方法實現方法的分派。post
若是想要分別響應客戶端的GET和POST請求,須要重寫HttpServlet對象的doGet和doPost方法,若是全部請求的響應都是同樣的,則只須要重寫service方法便可。測試
JSP的本質就是Servlet,咱們將編寫好的JSP文件部署在web容器中以後,web容器會將JSP編譯成對應的Servlet。this
若是Servlet要生成表現層頁面時,全部的HTML標籤都須要使用Servlet的輸出流來輸出,繁瑣且不利於美工人員修改。url
在標準的MVC模式中,Servlet僅做爲控制器使用,而JSP僅做爲表現層技術使用:
6.1 首先建立一個JavaWeb工程,而後建立一個類繼承HttpServlet
package com.xzh; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Created by xiangzh on 2017/8/29. */ public class ServletDemo extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the GET method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } }
6.2 在web.xml文件中配置上面的Servlet
<servlet> <servlet-name>ServletDemo</servlet-name> <servlet-class>com.xzh.ServletDemo</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletDemo</servlet-name> <url-pattern>/ServletDemo</url-pattern> </servlet-mapping>
6.3 將項目打包放到Tomcat中,啓動Tomcat,測試結果以下:
注意:一個Web應用對應一個ServletContext,一個Servlet對應一個ServletConfig。每一個Servlet都是單例的,因此須要本身處理好併發的場景。
參考:
http://www.cnblogs.com/xdp-gacl/p/3760336.html
http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.html
http://www.cnblogs.com/goody9807/archive/2007/06/13/782519.html
http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html