01深入Servlet技術
javaWEB的三大元件:
1.Servlet
2.Filter(過濾器)
3.Listenner(監聽器);
1.什麼是Servlet?
Servlet 是javaWeb的三大元件之一,它是我們學習javaWeb最基本的元件,也就是你一定要100%掌握;
Servelet主要是用來處理客戶端傳送的請求,並把響應結果返回給客戶端的一個程式。
javaWeb應用程式中,所有的請求響應都是由Servlet完成的,Servlet是javaWeb的核心程式,所有的網址都是交給Servlet來處理。
Servlet中並沒有main 之類的執行方法,使用者訪問伺服器的時候,是由伺服器(tomcat)通過呼叫servlet的某些方法來完成整個處理過程的。
3.編寫Servlet的方式?
編寫Servlet,可以通過直接實現Servlet介面來建立Servlet,但這種方法必須實現須實現5個方法: init(servletconfig config)、 service(servletrequest req,servletresponse resp) 、destroy() 、getservletconfig() 、getservletinfo();也可以通過繼承其實現該介面的抽象類GenericServlet或HttpServlet來建立Servlet.。
直接實現Servlet介面來編寫Servlet很不方便,需要實現的方法太多,因為HttpServlet已經實現了Servlet介面中的所有方法,所以編寫Servlet時可直接繼承HttpServlet,並覆蓋需要的方法即可,一般只需要覆蓋doGet()、doPost()方法即可;
3.1GenericServlet抽象類
GenericServlet抽象類實現了Servlet介面,並實現了大多數的方法,唯獨介面中的service方法在抽象類GenericServlet中沒有實現。GenericServlet還實現了log()方法,log方法在ServletContext介面中進行了宣告,而log()方法是用來:將指定的訊息寫入servlet日誌檔案,以servlet的名稱為字首。
GenericServlet的已知直接子類是:HttpServlet,它也是一個抽象類,它實現了GenericServlet抽象類中沒有實現的Service()方法,編寫Servlet一般可直接繼承HttpServlet並覆蓋需要的方法即可。
建立Servlet 的方法
通過實現Servlet 介面來建立Servlet;通過這種方式建立Servlet的例項,則必須要求實現Servlet介面下的所有方法,下面的Servlet介面下的方法進行解釋;
1.public void init(ServletConfig config) throws ServletException;
當Servlet例項被建立的時候,就會被呼叫,而且只會被呼叫一次,它主要用來做初始化的工作;
引數ServletConfig :它是Servlet容器使用的配置物件,該物件在初始化期間將資訊傳遞給 servlet。(初始化的時候可以進行配置)
service方法用來處理當前的業務邏輯,並把響應結果返回給瀏覽器;由 servlet 容器(web伺服器)呼叫,以允許 servlet 響應某個請求。此方法僅在 servlet 的 init()
方法成功完成之後呼叫。(Servlet例項被建立之後才會被呼叫) 引數ServletRequest :用來接收客戶端傳送的請求; 引數ServletResponse :對傳送的請求進行響應,並把響應結果返還給客戶端;
( Tomcat是Servlet的執行環境,即一個Servlet容器。Servlet容器的作用是負責處理客戶請求,當客戶請求來到時,Servlet容器獲取請求,然後呼叫某個Servlet,並把Servlet的執行結果返回給客戶。所謂的Servlet容器值得就是Web伺服器比如:tomcat)
public void destroy();由 servlet 容器呼叫,指示將從服務中取出該 servlet。也就是說,當servlet 例項被銷燬的時候被呼叫一次比如:關閉伺服器;
public String getServletInfo():返回有關 servlet 的資訊,比如作者、版本和版權。此方法返回的字串應該是純文字;
public ServletConfig getServletConfig():返回 ServletConfig
物件,該物件包含此 servlet 的初始化和啟動引數。返回的 ServletConfig
物件是傳遞給 init
方法的物件。(用來獲得Servlet 配置資訊)
配置Servlet:光有Servlet類檔案還不行,Web容器必須知道瀏覽器該怎麼訪問這個Servlet,也就是說需要配置Servlet的類檔案和與訪問方式,這個配置檔案在Web應用程式的描述檔案web.xm裡完成,
首先需要配置Servlet的名稱以及類名
<servlet>
<servlet -name>FirstName(任意字串值)</servlet-name>
<servlet -class>runoob.com.HellowServlet</servlet-class>
Servlet類名就是實現了Servlet介面的類,但此處需要填寫類的全名,就是加上包名(runoob.com.HellowServlet)
</servlet>
<servlet>標籤中還可以有一些可選的配置,例如:
<servlet>
<servlet -name>FirstName(任意字串值)</servlet-name>
<servlet -class>runoob.com.HellowServlet</servlet-class>
<init-param>
<param-name>enconfig</parame-name>
<parame-value>utf-c</parame-name>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
使用<init-param>標籤可以配置一個初始化的引數,可以包含一個引數名(使用<parame-name>配置)與一個引數值<使用<parame-valeu>配置>,在Servlet方法中可以使用相關方法來獲取配置的初始化引數值。
標籤<load-on-startup>配置該Servlet的載入方式,可選值為0或1,如果配置為1,Tomcat會在啟動的時候就載入該Servlet,否則tomcat 會在有人第一請求該servlet的時候才載入該Servlet。
配置<servlet-mapping> 對映路徑
配置好Servlet名稱與類名之後,還需要配置Servlet的訪問方式,訪問方式是使用<servlet-mapping>配置。
<servlet-mapping>
<servlet-name>FirstName<servlet-name>與<servlet>裡配置的servlet名稱相同;
<url-pattern>/Servletpadding</url-pattern>
</servlet-mapping>
一個完整的Servlet 包括Servlet類、《servlet配置》、《Servlet-mapping配置》,缺一不可,利用MyEclipse嚮導新建Servlet,MyEclipse會自動完成《Servlet》、《servlet-mapping》等配置。
通過瀏覽器訪問Servlet的方式:http://localhost:8080/專案名/servlet對映路徑.
有一點需要注意:當我們啟動伺服器的時候,如果我們在配置Servlet的時候,在Servlet標籤中設定了<load-on-startup>1</load-on-startup>,那麼伺服器在啟動的時候就會載入這個Servlet,如果沒有配置,則<load-on-startup>預設值為0,也就是說雖然啟動了伺服器,但它不會立刻訪問這個servlet,只有在瀏覽器傳送請求的時候,這個Servlet的例項才會被建立載入。
以上內容只是簡單的介紹了通過實現Servlet介面來建立Servlet的例項,實際上編寫Servlet時通常是通過直接繼承HttpServlet來實現的,HttpServlet是GenericServlet抽象類下的一個子類,它實現了Servlet和GenericServlet下的全部方法,後續文章將進行講解