2016年2月11日 星期四

JAVA SL-314_01/31

過濾器

JSP可以完成的servlet都可以完成,但是servlet具備的有很多事JSP所沒有的。

Servlet 可以分成簡單Servlet,過濾Servlet監聽Servlet

Filter 是 2.3 版之後新增的用意是在限制使用者存取某些資源或處理請求時先處理某些資源,他是用來 "鏈" 的形式進行綁定。

客戶端 → Filter → Filter → Filter → Web資源
                   |______________|
       可以定義數個Filter

doFilter() 方法中定義了3個參數:

ServletRequest

ServletResponse

FilterChain → 介面

將使用者請求向下傳遞給其他的Filter或Servlet
        ↓
取得session
        ↓
        ↓    false
屬性存在     →     跳躍到登入頁
        ↓                         ↓
傳送請求   ← ← ← ←

/=================================================================/

監聽器

負責監聽Web的各種操作,當相關的事件觸發後,將產生的事件,並對此事件進行處理,在web中可以對application,session,resquest 三種進行監聽。

applicatic 實際上是針對ServletContext(Servlet 上、下文)監聽,使用的是ServletContextListener和ServletContextAttributeLister介面。

session 主要是HttpSessionListener.HttpSessionAttributeListener.HttpSessionBindingListener介面。

request 針對使用者每次使用時都進行監聽,2.4版之後新增ServletRequestListener.ServletRequestAttributeListener介面。

JAVA SL-314_01/10

Servlet的週期
他是執行在伺服器端的一段程式
其生命週期受到web伺服器的控制
生命週期包括載入程式,初始化,服務,
銷毀,移除5個部分

Servlet只執行一次
會有一個web.xml

/===============================================================/

1. 載入
web容器負責載入servlet,建立實作會進行web.xml佈署。

2. 初始化
會執行init()初始化物件,例如資料庫連接,讀取資源檔。//init初始化一次

3. 處理服務
當有請求時,呼叫service()方法常用的是doGet() or doPass(),透過ServletRequest接受請求
ServletRequest設定回應資訊。

4. 銷毀
呼叫destory(),釋放所占用的資源。

5. 移除
執行destory()後會被丟到GC,如果要再使用,則需要重新初始化init()。
//GC=>資源回收機制

/===============================================================/

伺服器跳躍
在Servlet沒有<jsp:forward>的跳躍指令
必須使用RequestDispatcher介面,他提位了以下兩種方法:

public void forward (ServletRequest request, ServletResponse response)throws ServletException,IOException

public void include( 同上)

/===============================================================/
MVC登入流程