昨天聊了一大堆亂七八糟的東西。今天給你們分享一下當初我學習JavaWeb的筆記吧。
Servlet技術是JavaWeb中的核心技術,emmmmmmmm。。。。
太枯燥了,仍是先從API開始說吧,
首先ServletAPI中有4個Java包:
一、javax.servlet:其中包含定義Servlet和Servlet容器之間契約的類和接口
二、javax.servlet.http:其中包含定義HTTPServlet和Servlet容器之間契約的類和接口
三、javax.servlet.annotation: 其中包含Servlet、Filter、Listener的標註,它還爲被標註元件定義元數據
四、javax.servlet.descriptor :其中包含提供程序化登陸web應用程序的配置信息的類型。
二. Servlet技術概述
Servlet技術的核心是Servlet接口,他是全部Servlet類必須直接或間接實現的一個接口,在編寫實現Servlet的Servlet類的時候是直接實現它,在擴展實現這個接口的類的時候就是間接實現它。
Servlet接口中定義了Servlet與Servlet容器之間的契約,這個契約歸結起來就是:Servlet容器將Servlet類加載到內存,並在Servlet類的實例上調用具體的方法。在一個應用程序中每種Servlet類種只能有一個實例。
用戶請求導致Servlet容器調用了Servlet類種的service方法,而且傳入一個ServletRequest實例和一個ServletResponse的實例,ServletRequest中封裝了當前的HTTP請求,
所以Servlet開發人員沒必要解析和操做原始的HTTP請求數據.ServletResponse表示=當前用戶的HTTP響,使得將響應發回客戶端變得十分容易.
對於每個應用程序,Servlet容器還會建立一個Servlet Context的實例,這個對象中封裝了上下文的環境詳情,每一個上下文只有一個ServletContext.每一個Servlet示例也都有一個封裝Servlet配置的ServletConfig
三, Servlet接口
Servlet接口中定義了5個方法:java
一、void init(ServletConfig config) throws ServletException
二、void service(ServletRequest request, ServletResponse response) throws ServletException,java.ioi.IOException
三、void destroy()
四、java.lang.String getServletInfo()
五、ServletConfig getServletConfig()
這裏須要注意的是,在編寫Java方法簽名的時候,對於與包含該方法的類型不處於同一個包中的類型的時候要使用類的全名.因此在service方法中javax.servlet.ServletException的簽名中能夠不用寫包的名稱,可是java.io.IOException則要編寫完整的類名稱.
在這五個方法中,init、service和destroy是生命週期方法.Servlet容器根據如下規則調用這三個方法:
init: 當Servlet第一次被請求的時候Servlet容器會調用這個方法,在後續的請求中不會被再次調用
service: 每當請求Servlet的時候多會調用一次
destroy: 當銷燬Servlet的時候,該方法被調用.web
1、ServletRequset接口
對於每個HTTP請求,Servlet容器都會建立一個ServletRequest實例,並將他傳遞給service方法。ServletRequset封裝了關於這個請求的信息。
ServletRequset接口中定義了一些方法:
瀏覽器
getParameter是在ServletRequest中最經常使用的方法。該方法一般是用來返回HTML表單域的值,getParameter也能夠用於獲取查詢字符串的值。
2、ServletResponse接口jvm
javax.servlet.ServletResponse接口表示一個Servlet響應,在調用service方法以前Servlet容器首先建立一個ServletResponse的實例,並將他做爲第二個參數傳入到service方法中,ServletResponse隱藏了像瀏覽器發送響應的複雜過程。
在ServletResponse接口中,定義的方法之一是getWriter方法,該方法返回了一個能夠向客戶端發送文本的java.io.aPrintWriter。默認的狀況下該對象採用的是ISO-8859-1的編碼方式。
3、ServletConfig
當Servlet容器初始化Servlet的時候,Servlet容器會給Servlet的init方法傳入一個ServletConfig的實例,該實例中封裝了能夠經過@WebServlet或者部署描述符傳遞給Servlet的配置信息
這樣傳入的每一條信息就是一個初始參數,一個初始參數有key合 value兩個元件
爲了從Servlet內部獲取到初始參數的值,要在Servlet容器傳給Servlet的init方法的ServletConfig中調用getInitParameter方法,getInitParameter方法的簽名以下:分佈式
此外,getInitParameterNames方法則是返回全部初始化參數名稱的一個Enumeration:學習
舉個例子,當要獲取contactName參數的值,要使用下面的方法簽名編碼
除了getInitParameter和getInitParameterNamespace以外,ServletConfig還提供了一個頗有用的方法:getServletContext。利用這個方法能夠從Servlet內部獲取ServletContext。spa
4、ServletContext
ServletContext表示Servlet應用程序,每一個應用程序只有一個上下文對象,當把一個應用程序同時部署到多個容器的分佈式環境中的時候,每一個jvm上面的Web應用程序都會有一個ServletContext對象。
經過ServletConfig中調用getServletContext方法,能夠得到ServletContext實例,有了ServletContext就能夠共享從應用程序中全部資料處訪問到的信息,而且能夠動態的註冊web對象,前者將對象保存在ServletContext內部的Map中,
保存在ServletContext中的對象被稱做爲屬性
ServletContext中的如下的方法負責處理屬性:對象
5、GenericServlet抽象類
GenericServlet實現了Servlet和ServletConfig兩個接口,而且完成了如下任務:
一、將init方法中的ServletConfig付給一個類級的變量,以即可以經過調用getServletConfig獲取,
二、將接口中的全部方法提供默認實現,
三、提供方法,包圍ServletConfig中的方法接口
6、HttpServlet
HttpServlet類覆蓋了javax.servlet.GenericServletl類,在使用HttpServlet的時候,還要藉助分別表明Servlet請求和Servlet響應的HttpServletRequest和HttpServletResponse對象。
HttpServletRequest接口擴展了javax.servlet.ServletRequest,HttpServletResponse接口擴展了javax.servlet.ServletResponse。
HttpServlet覆蓋了GenericServlet中的service方法,而且經過下面的簽名再添加一個service方法:
protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,java.io.IOException
新的service方法和javax.servlet.Servlet中的service方法之間的區別在於參數列表不一樣
HttpServletRequest :表示Http環境中的Servlet請求,它擴展了javax.servlet.ServcletRequest接口,中年服裝你並添加了幾個擴展的方法
HttpServletResponse: 表示Http環境中的響應,該接口一樣的擴展了javax.servlet.ServletResponse接口,新增瞭如下的幾種方法:
Servlet小結
Servlet技術是javaEE技術的一部分,全部的Servlet都運行在Servlet容器中,容器和Servlet間的接口爲javax.servlet.Servlet.javax.servlet包下還提供了一個名爲GenericServlet的Servlet實現類,該類是一個輔助類。
以即可以更加方便的建立一個Servlet。不過因爲大部分的Servlet都運行在Http的環境中,所以就派生出來了一個javax.servlet.http.HttpServlet的子類更加實用。注意,HttpServlet也是GenericServlet的子類。
emmmmm。。。。。。
必定很枯燥吧,可是沒有辦法,這些乾貨就是這樣,學技術的話仍是要耐得住性子。好了,下一篇博客給你們用Servlet寫一個小Demo,但願能緩解一下你們的枯燥!