Servlet技術入門

OachOfGod發表於2017-12-16

這裡寫圖片描述## Servlet技術(重點) ##

Servlet簡介(理解)

1.什麼是Servlet?
    * 看的Servlet相關的知識,檢視JavaEE的文件
    * Servlet是一個介面,提供5個方法
    * 提供兩個實現類,GenericServlet和HttpServlet
2.Servlet什麼的作用?
    * Servlet是小的Java程式
    * 執行在WEB伺服器端
    * 可以接收和響應從客戶端傳送過來的請求
        * 請求:從客戶端訪問伺服器(傳送一些資料,請求的內容)
        * 響應:從伺服器端到客戶端(把請求的內容返回給我)
3.編寫Servlet
    * 實現Servlet介面
    * 繼承GenericServlet或者HttpServlet

編寫一個Servlet程式(掌握)

1.怎麼樣來編寫Servlet程式,Servlet程式段配置檔案
2.開發的步驟
    * 第一步:實現Servlet介面,實現5個方法。
    * 第二步:通過配置檔案的方式(在web.xml)
          <!-- 編寫Servlet的配置檔案 -->
          <!-- 配置Servlet的基本資訊 -->
          <servlet>
            <!-- 先配置Servlet的名稱(自己隨意的定,預設的情況下和類的名稱是相同的) -->
            <servlet-name>ServletDemo1</servlet-name>
            <!-- 配置Servlet類的全路徑(包名+類名) -->
            <servlet-class>cn.itcast.servlet.ServletDemo1</servlet-class>
          </servlet>

          <!-- 配置Servlet的對映(Servlet怎麼來訪問呢) -->
          <servlet-mapping>
            <!-- 先配置Servlet的名稱,和上面的名稱必須是相同的 -->
            <servlet-name>ServletDemo1</servlet-name>
            <!-- 配置訪問的路徑(寫法有很多種)  http://localhost:80/day09/servlet1  -->
            <url-pattern>/servlet1</url-pattern>
          </servlet-mapping>

    * 第三步:先把程式部署到伺服器中,啟動伺服器,訪問Servlet程式了。

Servlet生命週期(面試題)

1.生命週期:人的角度,出生,達到人生的巔峰,提供服務,死亡!!
2.Servlet例項物件:Servlet例項的建立、提供服務、Servlet例項銷燬!!
3.Servlet介面中定義了三個方法
    * init(ServletConfig)               -- Servlet例項一被建立,立即呼叫init方法進行初始化。
        * Servlet例項什麼時候被建立呢?
        * init方法呼叫幾次呢?
    * service(request,response)     -- Servlet例項已經被建立完成了,使用service提供服務,處理從客戶端傳送過來的請求。
        * service呼叫幾次?
    * destroy()                 -- Servlet例項被銷燬之前,呼叫destroy方法(空的實現)。
        * Servlet例項什麼時候銷燬?
        * destroy呼叫幾次?
4.總結
    * Servlet是第一次訪問的時候建立Servlet的例項物件,建立後立即呼叫init方法進行初始化,init方法呼叫一次。
    * Servlet例項被建立之後,使用service方法提供服務,有一次請求,呼叫一次service方法。(servlet單例模式,建立一個新的執行緒)
    * Servlet例項伺服器關閉的時候銷燬Servlet例項,銷燬之前呼叫destroy的方法進行一些銷燬的操作。destroy呼叫一次。

Servlet在Tomcat伺服器怎麼執行的(理解)

1.看圖04.

Servlet的介面和實現類之間的關係(理解)

1.關係
    * Servlet的介面,提供兩個實現類,GenericServlet和HttpServlet
    Servlet介面
        |
    GenericServlet
        |
    HttpServlet
        |
    MyServlet

2.以後的開發的步驟
    * 編寫一個類,繼承GenericServlet,重寫一些你需要的方法。
    * 在web.xml中編寫配置檔案。

    * 編寫一個類,繼承HttpServlet,重寫一些方法。(基本就使用這種方式)
    * 在web.xml中進行配置

3.GenericServlet類中的init方法的關係
    * void init(ServletConfig config)   
    * void init() 

    * 總結:以後重寫init方法的時候,需要重寫無引數的Init方法

4.HttpServlet類中提供service方法
    * service(ServletRequest req, ServletResponse res)  
        * 定義兩個變數,強轉。呼叫service(HttpServletRequest req, HttpServletResponse resp)
    * service(HttpServletRequest req, HttpServletResponse resp) 
        * 獲取的提交的方式,判斷提交的方式
        * 如果是GET請求,呼叫doGet方法
        * 如果是POST請求,呼叫doPost方法

    * 瞭解(ServletRequest是HttpServletRequest的爹)
    * 總結
        * service方法的內部判斷提交的方式,決定呼叫doXXX的方法。
        * 以後再開發Servlet程式,繼承HttpServlet,手動的重寫doGet和doPost方法,在web.xm編寫配置檔案。

修改Servlet開發的模板(修改一次)

1.先使用模板建立Servlet
2.修改模板的步驟
    * 先找到MyEclisp的安裝的路徑
    * 需要查詢  plugins/com.genuitec.eclipse.wizards.xxx.jar 
    * 不要直接解壓,右鍵 -- 選擇開啟方式 -- 使用壓縮工具開啟
    * 選擇模板資料夾 -- 找到Servlet.java檔案
    * 編寫Servlet.java檔案 -- 修改doPost和doGet的程式碼
    * 把Servlet.java覆蓋回去
    * 重啟MyEclipse就可以了

Servlet配置自動載入(理解)

1.第一次訪問Servlet程式的時候,建立Servlet例項了。如果在Servlet中編寫了一些程式碼(比較消耗時間的程式碼)
2.可以配置Servlet自動載入(根著伺服器的啟動,建立Servlet的例項物件)
3.通過配置檔案配置Servlet自動載入
    * 放在<servlet>標籤下。
    * <load-on-startup>值(正則數和0)</load-on-startup>
    * 值越小,優先順序越高

Servlet配置訪問路徑(掌握)

1.學習Servlet的訪問的路徑怎麼來配置?怎麼樣來訪問?(url-pattern配置)
2.學習url-pattern的配置寫法
    * 完全路徑匹配     /web/servlet5                  訪問:http://localhost/day09/web/servlet5
    * 目錄匹配      /web/*                      訪問:http://localhost/day09/web/xxx
    * 副檔名匹配 不能以/開頭  *.do  *.jsp *.html      訪問:http://localhost/day09/web/xxx.do

3.優先順序
    * 完全路徑匹配 > 目錄匹配 > 副檔名匹配
    * web.xml的配置檔案中,可以配置多個Servlet程式。(/demo5      /*     *.do)    http://localhost/day09/demo5

Servlet開發中WEB階段的路徑問題(掌握)

1.相對路徑和絕對路徑(WEB階段的路徑問題),學習會路徑的寫法(看Tomcat伺服器的路徑)
2.搭建環境
    * 在WebRoot目錄下建立aa.html的檔案,訪問ServletDemo6
        <h3>相當路徑寫法</h3>
        <!--  
            訪問aa.html       http://localhost/day09/aa.html
            訪問ServletDemo6      http://localhost/day09/servlet6
        -->
        <a href="servlet6">aa.html</a> <br/>
        <a href="./servlet6">aa.html</a> <br/>
    * 在WebRoot目錄下建立bb的資料夾,在bb資料夾下建立了bb.html的檔案,訪問ServletDemo6
        <h3>相對路徑</h3>
        <!--  
            訪問bb.html           http://localhost/day09/bb/bb.html
            訪問ServletDemo6      http://localhost/day09/servlet6
        -->
        <a href="../servlet6">bb.html</a>

3.WEB開發中編寫絕對路徑
    * 複雜的寫法
        * <a href="http://localhost/day09/servlet6">bb.html</a>
    * 簡便的寫法
        * <a href="/day09/servlet6">bb.html</a>
        * /不能省略,必須要寫的

4.絕對路徑分成兩種絕對路徑
    * 客戶端絕對路徑
        * 編寫的絕對路徑包含專案名稱的。
        * 寫法:/day09/servlet6
    * 伺服器端絕對路徑
        * 不用編寫專案的名稱
        * 寫法:/servlet6

ServletConfig物件(掌握)

1.在init(ServletConfig config),把配置檔案的資訊賦值給ServletConfig物件。就可以通過ServletConfig獲取到配置檔案相關的資訊。
2.方法
    * String getServletName()                   -- 獲取的是<servlet-name>標籤的文字的內容
    * (掌握)String getInitParameter(String name)              -- 獲取的初始化引數
    * (掌握)Enumeration getInitParameterNames()       -- 獲取的初始化引數
    * (掌握)ServletContext getServletContext()            -- 獲取的是ServletContext物件

ServletContext物件(掌握)

1.ServletContext的簡介
    * 一個WEB的專案,只有一個ServletContext物件。
    * 在WEB的專案中,所有的資源共享這一個ServletContext物件。
    * ServletContext與天地同壽!!!
        * Tomcat伺服器在啟動的時候,建立ServletContext物件,伺服器關閉的時候,ServletContext銷燬了。

2.怎麼獲取到ServletContext物件?
    * ServletConfig物件可以獲取到ServletContext物件。
    * GenericServlet中提供了方法,獲取到ServletContext物件。

域物件(概念)

1.域物件:在JavaWEB中學習4個域物件。掌握的有3個。
2.作用
    * 進行資料的傳遞!!!
    * 這些個域物件的域的作用的範圍是不同!!
    * ServletContext域物件(作用的範圍整個WEB的專案)
3.方法
    * setAttribute(String name,String value);
    * getAttribute(String name)
    * removeAttribute(String name)

ServletContext物件的作用和方法(掌握)

1.作用和方法
    * 讀取全域性的初始化引數
        * String getInitParameter(String name)                  -- 獲取全域性的初始化引數
        * Enumeration getInitParameterNames()           -- 獲取全域性的初始化引數
    * 實現資料的共享(向ServletContext域物件中存取值)
        * void setAttribute(String name, Object object)         -- 項ServletContext存入值
        * Object getAttribute(String name)                  -- 從ServletContext取值
        * void removeAttribute(String name)                 -- 從ServletContext移除值
    * 讀取資源的檔案
        * InputStream getResourceAsStream(String path)      -- 傳入檔案的路徑,獲取該檔案的輸入流
        * String getRealPath(String path)                   -- 傳入檔案的路徑,獲取的是該檔案的絕對磁碟路徑

獲取全域性的初始化引數

1.全域性初始化引數的配置
      <!-- 配置全域性的初始化引數 -->
      <context-param>
        <param-name>username</param-name>
        <param-value>美美</param-value>
      </context-param>

2.獲取全域性的初始化引數
    * 全域性的初始化引數被所有的Servlet共享,都能獲取!!

實現資料的共享

1.ServletContext域物件中被WEB中所有的資源共享!!
2.模擬的例子,編寫一個CountServlet,用來計數。再編寫另外一個ShowServlet,顯示訪問的數量的!!

讀取資源的檔案

1.學習方法就OK了!!
    * 讀取資源的檔案
        * InputStream getResourceAsStream(String path)      -- 傳入檔案的路徑,獲取該檔案的輸入流
        * String getRealPath(String path)                   -- 傳入檔案的路徑,獲取的是該檔案的絕對磁碟路徑

2.讀取db.properties檔案
3.ServletContext域物件中獲取檔案的路徑的寫法
    * 寫伺服器端的絕對路徑,不包含專案名稱!!!

相關文章