知識
不管是網站,軟件還是小程序,都要直接或間接能為您產生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站成為營銷工具,讓軟件能切實提升企業(yè)內部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
Web開發(fā)中的過濾器設計
發(fā)表時間:2007-4-25
發(fā)布人:葵宇科技
瀏覽次數:55
五一快到,辦公室天天有人討論去哪去哪玩的,明天公司又集體組織在島內玩一天,現在都沒什么心思工作了,還好任務不多,老總出差不在,可以放肆一下,呵呵..
翻了翻以前學習web開發(fā)時留下的學習文檔,感覺有些拿出來復習復習還是很有用的。下面是一篇有關web.xml中過濾器設計的學習體會,希望對大家有些幫助。
Web開發(fā)中的過濾器設計
在web.xml文件中,過濾器的聲明如下:
Element : filter
Content Model : (((description*, display-name*, icon*)), filter-name, filter-
class, init-param*)
其中的filter-name在引用該filter時就會用到。
init-param 可以有多個,用來對該過濾器定義的參數(通常是全局變量)進行初始化,初始化是在調用該過濾器時發(fā)生的。注意的是要真正讓其起作用,還需要在該過濾器的init方法內進行調用:
this.param = filterConfig.getInitParameter("param");///得到在web.xml中配置的編碼
為了讓過濾器工作,只聲明是不夠的,我們還需要確定該Filter的作用域:
Element : filter-mapping
Content Model : (filter-name, (url-pattern | servlet-name), dispatcher*)
filter-name 對應filter聲明的filter-name
url-pattern 為url地址映射,任何url字符串含有該url-pattern的定義將被映射(或者說,重定向)到filter-name。
servlet-name 與url-pattern類似,一般的url-pattern定義的是jsp頁面的重定向,而servlet-name定義的是對servlet類的引用。注意的是servlet在大多數的應用服務器的web容器內具有一個缺省的url路徑:
http://host/webAppPrefix/servlet/packageName.ServletName
如果直接在頁面調用servlet會暴露servlet的真實地址,并且不利于定制url,也就需要我們對其進行一定的設置。另外,如果使用缺省的url是不能從init(jsp對應于jspinit)方法讀取初始化參數的。為避免誤用缺省的url造成不能初始化參數的問題,可以使用下面兩種方法:
1、 在每個Web應用中重新映射/servlet/模式
也就是重定向servlet
2、 全局關閉激活器servlet
這個在某些應用服務器是不支持的。它需要對服務器的web.xml(不是項目中的web.xml)進行配置。
過濾器對請求分發(fā)器(
Request Dispatcher)的控制
Servlet 2.4版的Web程序增強了filter和request dispatcher的配合功能,這樣過濾器可以根據請求分發(fā)器(request dispatcher)所使用的方法有條件地對Web請求進行過濾。
在web.xml中,Dispatcher的有4個值可以選擇:REQUEST、FORWARD、INCLUDE、ERROR。缺省或不設置時為REQUEST
要注意的是,Dispatcher可以對傳進來的請求(request)起作用,也可以對傳遞出去的請求(response)進行控制。
設定元素的過濾器
·只有當request直接來自客戶(來自客戶端的請求),過濾器才生效,對應為REQUEST條件。
·只有當request被一個請求分發(fā)器使用forward()方法轉到一個Web構件時(采用或定義),對應稱為FORWARD條件。
·類似地,只有當request被一個請求分發(fā)器使用include()方法轉到一個Web構件時(采用或定義),對應稱為INCLUDE條件。
·只有當request被一個請求分發(fā)器使用“錯誤信息頁”機制方法轉到一個Web構件時,對應稱為ERROR條件。
