一、Servlet簡介
Java編寫的伺服器端程序,具有獨立於平臺和協議的特性,主要功能在於交互式地瀏覽和生成數據,生成動態Web內容。使用Servlet,可以收集來自網頁表單的用戶輸入,呈現來自資料庫或者其他源的記錄,還可以動態創建網頁。
二、實現方式
1、繼承HttpServlet
繼承自 GenericServlet. 遵守 HTTP協議實現,以設計模式的角度看,HttpServlet擔任抽象模板角色,模板方法:由service()方法擔任。基本方法:由doPost()、doGet()等方法擔任。service()方法流程,省略了部分判斷邏輯。該方法調用七個do方法中的一個或幾個,完成對客戶端請求的響應。這些do方法需要由HttpServlet的具體子類提供,這種API封裝是典型的模板方法模式。
2、繼承GenericServlet
Servlet 接口和 ServletConfig 接口的實現類. 一個抽象類. 其中的 service 方法為抽象方法。
3、實現Servlet接口
Servlet是一個接口,其中包含init、getServletConfig、service、getServletInfo、destroy幾個核心方法。
三、生命周期
1、加載和實例化
當Servlet容器啟動或客戶端發送請求時,Servlet容器會查找是否存在該Servlet實例,若存在,則直接讀取該實例響應請求;如果不存在,就創建一個Servlet實例(屬於單例設計模式)。load-on-startup 可以配置創建時序。
2、初始化:init()
實例化後,Servlet容器將調用init方法一次,初始化當前 Servlet。
3、服務:service()
初始化後,Servlet處於響應請求的就緒狀態。當接收到客戶端請求時,調用service()的方法處理客戶端請求,HttpServlet的service()方法會根據不同的請求 調用不同的模板方法。
4、銷毀:destroy()
當Servlet容器關閉時,Servlet實例也隨時銷毀。關閉 Tomcat 服務時可以通過日誌列印看到該方法的執行。
四、Servlet核心API
1、Servlet執行流程
Servlet是JavaWeb的三大組件之一(Servlet、Filter、Listener),它屬於動態資源。Servlet的作用是處理請求,伺服器會把接收到的請求交給Servlet來處理,在Servlet中通常需要:接收請求數據;處理請求;完成響應。
2、ServletConfig接口
容器在初始化servlet時,為該servlet創建一個servletConfig對象,並將這個對象通過init()方法來傳遞並保存在此Servlet對象中。核心作用:1.獲取初始化信息;2.獲取ServletContext對象。
3、ServletContext接口
一個項目只有一個ServletContext對象,可以在多個Servlet中來獲取這個對象,使用它可以給多個Servlet傳遞數據,該對象在Tomcat啟動時就創建,在Tomcat關閉時才會銷毀!作用是在整個Web應用的動態資源之間共享數據。
4、ServletRequest接口
HttpServletRequest接口繼承ServletRequest接口,用於封裝請求信息,該對象在用戶每次請求servlet時創建並傳入servlet的service()方法,在該方法中,傳入的servletRequest將會被強制轉化為HttpservletRequest對象來進行HTTP請求信息的處理。核心作用:1.獲取請求報文信息;2.獲取網絡連接信息;3.獲取請求域屬性信息。
5、ServletResponse接口
HttpServletResponse繼承自ServletResponse,封裝了Http響應信息。客戶端每個請求,伺服器都會創建一個response對象,並傳入給Servlet.service()方法。核心作用:1.設置響應頭信息;2.發送狀態碼;3.設置響應正文;4.重定向;
五、會話跟蹤
1、場景描述
比如登錄某個購物網站,身份識別成功後,在網站下單,支付 等操作,這些操作中當前登錄用戶信息必須是共享的,這樣這些操作結果才能和登錄用戶做關聯。
2、概念簡介
可以把會話理解為客戶端與伺服器之間的一次交互,在一次交互中可能會包含多次請求和響應。在JavaWeb中,從客戶端向伺服器發出第一個請求開始,會話就開始了,直到客戶端關閉瀏覽器會話結束。在一個會話的多個請求中共享數據,這就是會話跟蹤技術。
六、Cookie用法詳解
1、核心流程
Cookie在HTTP中通常是用來辨別用戶身份,進行會話跟蹤而儲存在用戶本地終端上的數據,一般會加密處理,由用戶客戶端計算機暫時或永久保存的信息。其結構就是一個鍵和一個值構成的。隨著伺服器端的響應發送給客戶端瀏覽器。然後客戶端瀏覽器會把Cookie保存起來,當下一次再訪問伺服器時把Cookie再發送給伺服器。
Cookie是由伺服器創建,然後通過響應發送給客戶端的鍵值對。客戶端會保存Cookie,並會標註出Cookie的來源。當客戶端向伺服器發出請求時會把Cookie包含在請求中發送給伺服器,這樣伺服器就可以識別客戶端。
2、Cookie相關API
setMaxAge():設置 cookie 過期的時間,秒為單位。默認情況cookie 只會在當前 session 會話中有效。
getMaxAge():獲取 cookie 的最大生存周期。
getName():獲取 cookie 的名稱。名稱在創建後不能改變。
getValue():獲取與 cookie 關聯的值。
setValue(String value):設置與cookie關聯的value值。相同的name多次設置會覆蓋。
七、Session 跟蹤
1、Session簡介
會話管理,當用戶在應用程式的Web頁之間跳轉時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。Servlet中可以把一個會話內需要共享的數據保存到HttSession對象中。四大域對象:PageContext、ServletRequest、HttpSession、ServletContext。
2、Session運行原理
首次使用首次使用session時,伺服器端要創建session,session是保存在伺服器端,數據是保存在session中,sessionId通過Cookie發送給客戶端,且只在瀏覽器本次會話中存在,也就是說如果用戶關閉了瀏覽器,那麼這個Cookie就丟失。
客戶端訪問客戶端再次訪問伺服器時,在請求中會帶上sessionId,伺服器會通過sessionId找到對應的session,而無需再創建新的session。
時效性當一個session長時間沒人使用的話,伺服器會把session刪除了,這個時長在Tomcat中配置是30分鐘,可以在${CATALANA}/conf/web.xml找到這個配置,也可以在的web.xml中覆蓋這個配置!
3、相關API用法
getSesssion():當前會話已經存在session對象那麼直接返回,如果當前會話還不存在,創建session對象並返回 。
getAttribute(String name):返回該 session 會話中具有指定名稱的對象 。
getId():分配給該 session 會話的唯一標識符的字符串。
setAttribute(String name,Object value):使用指定的名稱綁定一個對象到該 session 會話。
removeAttribute(String name):從該 session 會話移除指定名稱的對象。
八、Listener監聽器
1、概念簡介
JavaWeb三大組件:Servlet,Listener,Filter。監聽器就是指在應用程式中監聽相關對象狀態變化的組件。
2、事件源對象
指被監聽對象。
ServletContextServletContextListener生命周期監聽,它有兩個方法,出生時調用contextInitialized(),銷毀時調用contextDestroyed();
ServletContextAttributeListener屬性監聽,它有三個方法,添加屬性attributeAdded(),替換屬性attributeReplaced(),移除屬性時attributeRemoved()。
HttpSessionHttpSessionListener生命周期監聽:它有兩個方法,出生時調用sessionCreated(),銷毀時調用sessionDestroyed();
HttpSessioniAttributeListener屬性監聽:它有三個方法,添加屬性attributeAdded(),替換屬性attributeReplaced(),移除屬性attributeRemoved()。
ServletRequestServletRequestListener生命周期監聽:它有兩個方法,出生時調用requestInitialized(),銷毀時調用requestDestroyed();
ServletRequestAttributeListener屬性監聽:它有三個方法,添加屬性attributeAdded(),替換屬性attributeReplaced(),移除屬性attributeRemoved()。
九、Filter過濾器
1、過濾器簡介
客戶端請求Servlet時,先執行相關Filter,如果Filter通過,則繼承執行請求的Servlet;如果Filter不通過,則不會執行用戶請求的Servlet。過濾器可以動態地攔截請求和響應。
2、Filter接口
Filter接口定義了三個核心方法。
init():應用程式啟動時,伺服器實例化Filter對象,並調用其init方法,讀取web.xml配置,完成對象的初始化加載。
doFilter():實際的過濾操作,請求達到伺服器時,Servlet容器將先調用過濾器的doFilter方法。
destroy():容器在銷毀過濾器前調用該方法,釋放過濾器佔用的資源。
十、Interceptor攔截器
Spring框架中的攔截器Interceptor類似於Servlet中的過濾器Filter,主要用於攔截用戶請求並作相應的處理。例如通過攔截器可以進行權限驗證、記錄請求信息的日誌、判斷用戶是否登錄等。請求轉發不執行攔截、過濾;重定向執行攔截和過濾。