1. 程式人生 > >Servlet學習(1)

Servlet學習(1)

servlet是什麼?

>其實就是一個java程式,執行在我們的web伺服器上,用於接收和響應客戶端的http請求

>更多的是配合動態資源來做,當然靜態資源也需要使用到servlet,只不過是Tomcat裡面已經定義好了一個DefaultServlet

HelloServelt

1)得寫一個Web工程,要有一個伺服器。

2)測試執行Web工程

          >新建一個資料夾,實現一個Servlet介面

          >配置Servlet,用意:告訴伺服器,我們這裡有這些servlet

                     在webContent/WEB-INF/web.xml裡面寫上以下內容     

 <!-- 向tomcat報告, 我這個應用裡面有這個servlet, 名字叫做HelloServlet , 具體的路徑是com.itheima.servlet.HelloServlet -->
<servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.itheima.servlet.HelloServlet</servlet-class>
</servlet>
          
<!-- 註冊servlet的對映。  servletName : 找到上面註冊的具體servlet,  url-pattern: 在位址列上的path 一定要以/打頭 -->
<servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/a</url-pattern>
</servlet-mapping>

             >在位址列上輸入http://localhost:8080/專案名稱/a

Servlet執行過程

1)找到tomcat應用

2)找到專案

3)找web.xml,然後在裡面的找到url-pattern,有沒有哪一個pattern的內容是/a

4)找到servlet-mapping中的那個servlet-name中的【HelloServlet】

5)找到上面定義的servlet元素中的servlet-name中的【HelloServlet】

6)找到下面定義的servlet-class然後開始建立該類的例項

7)繼而執行servlet中的service方法

Servlet的通用寫法

Servlet(介面)----------GenericServlet-----------HttpServlet(用於處理http的請求)

定義一個類,繼承HttpServlet複寫doGet和doPost

Servlet的生命週期

生命週期:從建立到銷燬的一段時間

生命週期方法:從建立到銷燬,所呼叫的那些方法

init方法:在建立該servlet的例項時,就執行該方法。一個servlet只會初始化一次,init方法只會執行一次

                預設情況下是:初次訪問該servlet,才會建立例項。

service方法:只要客戶端來了一個請求,就會執行該方法。

                      該方法可以被執行很多次,一次請求,對應一次service方法的呼叫

destroy方法:selvlet銷燬的時候,就會執行該方法                   

                       >該專案從tomcat的裡面移除

                      >正常關閉tomcat就會執行   shutdown.bat

>doGet和doPost不算生命週期方法,所謂的生命週期方法是指,從物件的建立到銷燬一定會執行的方法,但是這兩個方法,不一定會執行

讓servlet建立例項的時機提前

預設情況下,只有在初次訪問servlet的時候,才會執行init方法,有的時候,我們可能需要在這個方法裡面執行一些初始化工作,甚至        是做一些比較耗時的邏輯。那麼在這個時候,初次訪問,可能會在init方法中逗留太久,那麼有沒有方法可以讓這個初始化的時機提前      一點?

在配置的時候,使用load-on-startup元素來指定,給定的數字越小,啟動的實際就越早。一般不寫負數,從2開始即可。

<servlet>
    <servlet-name>HelloServlet04</servlet-name>
    <servlet-class>com.itheima.servlet.HelloServlet04</servlet-class>
    <load-on-startup>2</load-on-startup>
</servlet>

ServletConfig

Servlet的配置,通過這個物件,可以獲取servlet在配置的時候的一些資訊

//1. 得到servlet配置物件 專門用於在配置servlet的資訊
ServletConfig config = getServletConfig();
		
//獲取到的是配置servlet裡面servlet-name 的文字內容
String servletName = config.getServletName();
System.out.println("servletName="+servletName);
		
		
//2、。 可以獲取具體的某一個引數。 
String address = config.getInitParameter("address");
System.out.println("address="+address);


//3.獲取所有的引數名稱
Enumeration<String> names = config.getInitParameterNames();
//遍歷取出所有的引數名稱
while (names.hasMoreElements()) {
    String key = (String) names.nextElement();
    String value = config.getInitParameter(key);
    System.out.println("key==="+key + "   value="+value);
}

為什麼需要有這個ServletConfig?

1)未來我們自己開發的一些應用,使用到了一些技術,或者一些程式碼,我們不會,但有人寫出來了,他的程式碼放置在了自己的servlet類裡面

2)剛好這個servlet裡面需要一個數字或者叫做變數值,但是這個值不能固定的,所以要求上使用到這個servlet的公司,在註冊servlet的時候,必須要在web.xml裡面,宣告init-params