jsp- servlet篇 全限定類名(包名+類名), com.gs.controller.HelloServlet

 

Servlet的執行流程

1. 從瀏覽器輸入地址(發起請求)開始分析: http://localhost:80/xx/hello

  1. localhost   也可能是ip 或者域名  ---》定位服務器主機
  2. 80 定位到tomcat
  3. xx  上下文路徑,tomcat/conf/server.xml  中的

         <Context  docBase=”F:\workspace\day11-servlet\webapp” path=”xx” />  中的path 

            通過上面的步驟找到了 docBase後面的項目的真實路徑

                            根據約定去找到項目中的配置文件 web.xml

2. web.xml內容分析:

  1. 找到url-pattern的值爲 /hello
  2. 通過上一步中對應servlet-name 找到對應的servlet標籤
  3. 找到對應的Servlet的全限定類名(包名+類名), com.gs.controller.HelloServlet
     僅僅是一個字符串而已,交給Tomcat進行處理, 並通過反射來創建對象並調用方法

3. Tomcat對Servlet的創建:

  1. 通過上獲得 servlet的完全限定名爲參數使用反射來創建一個對象

    Class clz  =  Class.forName(“com.gs.controller.HelloServlet”)

    Clz.newInstance()  要求自己的Servlet類必須有公共的無參數的構造方法,否則會包NoSuchMethodException異常

   2.如果是第一次訪問,就會創建一個Servlet的對象,並緩存起來

  3. 如果是第二次訪問 (或者 n 次訪問) 直接先從緩存中看有沒有,有直接使用調用service方法

 

<welcome-file-list>
       <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
  
  <servlet>
      <!-- 給servlet可以任意取名,一般類名相同 -->
    <servlet-name>HelloServlet</servlet-name>
    <!-- servlet的全限定類名,也就是servlet的位置 -->
    <servlet-class>com.gs.controller.HelloServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <!-- 跟上面的servlet名字相同 -->
    <servlet-name>HelloServlet</servlet-name>
    <!-- 瀏覽器通過該url找到servlet,斜槓別丟 -->
    <url-pattern>/helloServlet</url-pattern>
  </servlet-mapping>

 

 

 

Servlet的生命週期

javax.servlet.Servlet接口中的方法:

  public void init(ServletConfig config):  初始化方法

  public void service(ServletRequest req, ServletResponse res):服務方法

  public void destroy():銷燬方法

  public ServletConfig getServletConfig():返回當前Servlet的配置信息對象.

  public String getServletInfo():該方法返回Servlet的信息(作者,版權等).

--------------------------------------------------------------------

Servlet的生命週期方法:

  public void init(ServletConfig config):初始化方法,在第一次請求時調用,只在最初的時候調用一次.

  public void service(ServletRequest req, ServletResponse res):服務方法

  public void destroy():銷燬方法

Servlet生命週期可分爲5個步驟

  1. 加載Servlet。當Tomcat第一次訪問Servlet的時候,Tomcat會負責創建Servlet的實例
  2. 初始化。當Servlet被實例化後,Tomcat會調用init()方法初始化這個對象
  3. 處理服務。當瀏覽器訪問Servlet的時候,Servlet 會調用service()方法處理請求
  4. 銷燬。當Tomcat關閉時或者檢測到Servlet要從Tomcat刪除的時候會自動調用destroy()方法,讓該實例釋放掉所佔的資源。一個Servlet如果長時間不被使用的話,也會被Tomcat自動銷燬
  5. 卸載。當Servlet調用完destroy()方法後,等待 jvm 垃圾回收。如果有需要再次使用這個Servlet,會重新調用init()方法進行初始化操作

細節注意點:

             1:構造器先執行,創建Servlet對象:init,service,destory方法,都是非static方法,都得使用對象調用.

             2:一個Servlet類在整個生命週期中最多隻有一個對象.

             3:init在構造器執行之後,立馬執行,只執行一次,爲對象做初始化操作.

             4:service方法在每次請求都會執行.

             5:destroy方法只有在正常關閉Tomcat時,纔會執行,不要期望該方法一定執行,不要在該方法編寫掃尾操作.

             6:Servlet類必須使用public修飾,Servlet的構造器,必須是公共無參數的。(上面執行流程提到過)

 

get方式和post方式有何區別

1. 數據長度上:

  • GET方式:在URL地址後附帶的參數是有限制的,其數據容量通常不能超過1K。
  • POST方式:可以在請求的實體內容中向服務器發送數據,傳送的數據量無限制。

2.請求參數的位置上:

  • GET方式:請求參數放在URL地址後面,以?的方式來進行拼接
  • POST方式:請求參數放在HTTP請求包中

3.用途上:

    • GET方式一般用來獲取數據,多用於超鏈接請求,(因爲提交的數據在地址欄可見,所以不安全)
    • POST方式一般用來提交數據,多用於HTML的表單提交,等用於錄入數據,並傳遞給Web服務器,提交的數據在地址欄不可見,安全。(處理訂貨表單、在數據庫中加入新數據行)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章