J2EE企業(yè)級開(kāi)發(fā)學(xué)習筆記(7)
Servlet
1、Servlet:被設計成在Web服務(wù)器上而非客戶(hù)機上可以處理Web客戶(hù)端傳來(lái)的HTTP請求,并發(fā)回一個(gè)合適的響應的Web組件。它能很好地執行這種功能,并只需要很少的資源就能發(fā)送這種功能。Web服務(wù)器通過(guò)Web容器來(lái)管理這些組件。
2、Servlet一般用途:簡(jiǎn)單的用作客戶(hù)和服務(wù)器往返傳遞信息的通道,此外,允許客戶(hù)端控制服務(wù)器添加或刪除Web頁(yè)面或文件(只要客戶(hù)端有足夠的清理權限,少見(jiàn))
3、Servlet最利于處理小型任務(wù):收集和驗證用戶(hù)輸入,但幾乎不進(jìn)行實(shí)際處理;協(xié)調輸出,但幾乎不直接生成動(dòng)態(tài)Web頁(yè)面內容;最少量的業(yè)務(wù)邏輯。
4、Servlet生命周期:
HTTP工作方式:請求-響應型模型。
Servlet擴展了兩個(gè)基本Servlet實(shí)現類(lèi)中的一個(gè):HttpServlet(常用)和GenericServlet.此2種Servlet都具有相同的生命周期。
生命周期使用了三種基本請求處理程序方法:init(初始化Servlet)、Service(為客戶(hù)端請求服務(wù))、destroy(銷(xiāo)毀servlet)。Service是GenericServlet的核心,但永遠不可以被重寫(xiě),而init和destroy方法總是可以被重寫(xiě),但很多情況下,Servlet不需要初始化或終止的特定對象或鏈接時(shí),可能不會(huì )用到這兩種方法。
5、多個(gè)線(xiàn)程可能同時(shí)調用通用的Servlet實(shí)例的Service方法,為避免這種情況可以執行SingleThreadModel接口,用于指示W(wǎng)eb容器在任意給定時(shí)間內只允許一個(gè)線(xiàn)程調用服務(wù)方法。缺點(diǎn):在Web服務(wù)器上部署Servlet時(shí),對服務(wù)器上同一時(shí)間段內允許存在的Servlet實(shí)例的總數量有顯著(zhù)影響,因此在執行SingleThreadModel接口會(huì )對容器分配資源的方式產(chǎn)生重大影響。優(yōu)點(diǎn):在Servlet可能需要改變非線(xiàn)程安全的信息或訪(fǎng)問(wèn)資源時(shí),執行該接口是合適的。最好不要試圖連接任意數量的Servlet方法的做法。
6、處理請求:Web容器接收Servlet請求->封裝接收數據到ServletRequest(javax.Servlet.ServletRequest)接口對象中->使用ServletRequest接口中的方法來(lái)查詢(xún)請求的對象。
用法:
7、產(chǎn)生響應:一個(gè)請求引發(fā)一條響應。Servlet請求用ServletResponse響應對象被提供給一個(gè)Servlet,同時(shí)請求對象被作為一個(gè)參數傳遞給服務(wù)方法。在分別獲取了ServletOutputStream對象或PrintWriter對象的句柄后,可以分別采用二進(jìn)制格式或字符編碼格式編寫(xiě)輸出的內容。其他生成響應的方法:在任何可能的地方使用JSP和JavaBeans技術(shù),Servlet只負責轉請求到JSP頁(yè)面,為JSP頁(yè)面成功完成頁(yè)面動(dòng)態(tài)數據加載而協(xié)調必要的項目。
用法:
8、HTTP請求處理程序:
getLastModified()與HTTP GET 方法很像,但他只有在一段指定的時(shí)間內發(fā)生改變后才能返回內容。即只有doGet()方法被重寫(xiě),并將要用于處理從請求到請求的變化不大的內容時(shí)才能使用getLastModified()方法。
此外,HttpServlet還包含兩個(gè)方法:
· init(ServletConfig config): 創(chuàng )建Servlet 實(shí)例時(shí),調用的初始化方法。
· destroy(): 銷(xiāo)毀Servlet 實(shí)例時(shí),自動(dòng)調用的資源回收方法。
通常無(wú)須重寫(xiě)initO和destroyO兩個(gè)方法,除非需要在初始化Servlet時(shí),完成某些資源初始化的方法,才考慮重寫(xiě)init 方法。如果需要在銷(xiāo)毀Servlet 之前,先完成某些資源的回收,比如關(guān)閉數據庫連接等,才需要重寫(xiě)destroy 方法。
【注意】如果重寫(xiě)了init(ServletConfig config)方法,則應在重寫(xiě)該方法第一行調用super.init(config)。該方法將調用HttpServlet的init方法。
9、高級處理程序方法:
HttpServlet類(lèi)區別與GenericServlet類(lèi),它不可以重寫(xiě)Service方法,卻可以重寫(xiě)這些請求處理程序。HttpServlet方法必須被重寫(xiě)成至少一種方法(即指某個(gè)生命周期方法或請求處理程序)。
10、HTTP請求指南:
11、RequestDispatcher(接口) 重定向轉移 和 包含:
12、關(guān)于Servlet的建模:
轉移<<forward>>:
13、ServletContext:
14、Servlet會(huì )話(huà)管理:
隱藏字段:隱藏的字段嵌入到要顯示給客戶(hù)端的頁(yè)面中。每發(fā)出一次新的請求,就會(huì )把這些字段發(fā)回給客戶(hù)端。
動(dòng)態(tài)URL重寫(xiě):對客戶(hù)端點(diǎn)擊的每一個(gè)URL,都會(huì )添加一些額外的信息(在會(huì )話(huà)期間獨特地標識每一個(gè)客戶(hù),如:URL?session=97859,即發(fā)出請求的客戶(hù)端會(huì )話(huà)編號是97859)。
cookies:已存儲的信息可能會(huì )在往后重復傳送回客戶(hù)端。Web服務(wù)器為瀏覽器提供了Cookie.
服務(wù)器端會(huì )話(huà)對象:cookies和URL編碼受到對每一次請求而發(fā)送回客戶(hù)端信息量多少的限制,在服務(wù)器會(huì )話(huà)管理中,會(huì )話(huà)信息是在服務(wù)器上的會(huì )話(huà)對象中進(jìn)行維護的,能根據需要進(jìn)行訪(fǎng)問(wèn)。注意:使用服務(wù)器對象很昂貴盡量少使用它們。
http會(huì )話(huà)(Servlet API):
15、Servlet部署和Web歸檔文件(*.war):

該圖中有一小部分是由若干個(gè)動(dòng)作組成的一個(gè)完整的交易。我們決定把這一部分分割開(kāi),由內部關(guān)注他的控制對象對它進(jìn)行處理,其余部分則由Servlet負責。下圖則顯示了這種職責劃分后的結果:
17、Servlet 和JSP的區別在于:
a. Servlet中沒(méi)有內置對象,原來(lái)JSP中的內置對象都必須通過(guò)HttpServletRequest對象,或由HttpServletResponse 對象生成:
b. 對于靜態(tài)的HTML標簽, Servlet 都必須使用頁(yè)面輸出流逐行輸出。即“JSP是Servlet的一種簡(jiǎn)化”,使用JSP只需要完成程序員需要輸出到客戶(hù)端的內容,至于JSP中的Java 腳本如何鑲嵌到一個(gè)類(lèi)中,由JSP 容器
完成。而Servlet則是個(gè)完整的Java 類(lèi),這個(gè)類(lèi)的service方法用于生成對客戶(hù)端的響應。
18、為了讓Servlet 能響應用戶(hù)請求,還必須將Servlet 配置在Web 應用中。配置Servlet
時(shí),需要修改web.xrnl 文件。
配置Servlet 需要配置兩個(gè)部分:
·配置Servlet 的名字:對應web.xml 文件中的<servlet/>元素。
·配置Servlet 的URL: 對應web.xml 文件中的<servlet-mapping/>元素。
因此,配置一個(gè)能響應客戶(hù)請求的Servlet ,至少需要配置兩個(gè)元素,關(guān)于上面FirstServlet 的配置如下:
<!--配置Servlet 的名字-->
<servlet>
<!-- 指定Servlet 的名字-->
<servlet-name>firstServlet</servlet-name>
<!-- 指定Servlet 的實(shí)現類(lèi)--〉
<servlet-class>lee.FirstServlet</servlet-class>
</servlet>
<!-- 配置Servlet 的URL-->
<servlet-mapping>
<!--指定Servlet 的名字-->
<servlet-name>firstServlet</servlet-name>
<!--指定Servlet 映射的URL地址>
<url-pattern>/firstServlet</url-pattern>
</servlet-rnapping>
聯(lián)系客服