日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

JavaWeb总结(九)

發布時間:2025/6/17 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaWeb总结(九) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

過濾器

-?一個中間組件,用于攔截源數據和目的數據之間的消息?

-?過濾二者之間傳遞的數據

Web應用上的過濾器?

-駐留在Web服務器上的Web組件

-過濾從客戶端傳遞到服務器端的請求和響應?

?

單個過濾器

  當Web容器接收到一個對資源的請求時,它將判斷是否有過濾器器與這個資源相關聯,如果有那么容器就把請求交給過濾器進行處理。在過濾器中,我們可以更改請求的內容,或者重新設置請求頭,然后再將請求傳遞給目標資源。當目標資源對請求做出響應時,容器同樣會將響應轉發給過濾器,在過濾器中,我們可以對響應的內容進行更改,然后將響應發送回客戶端。在Web應用程序中部署過濾器,對客戶端和目標資源來說都是透明的,他們并不需要知道過濾器的存在。

Web應用上部署多個過濾器?

?

過濾器鏈

  過濾器可以組成一個過濾器鏈。鏈中的每個過濾器負責特定的操作和任務,客戶端的請求和響應在這些過濾器之間傳遞?

  過濾器的一些常見應用:

-?認證過濾:對用戶請求進行統一的認證。

-?登錄和審核過濾:對用戶的訪問請求進行記錄和審核。

-?圖像轉換過濾:轉換圖像格式。

-?數據壓縮過濾?:對用戶發生的數據進行壓縮,從而減少傳輸量。

-?加密過濾:對請求和響應進行加密解密處理。

-?令牌過濾

-?資源訪問觸發事件過濾?

-?XSLT過濾?

-?MIME-type過濾?

 Servlet的編碼、編譯、部署

  -?編碼

    所有的過濾器必須實現javax.serlvet.Filter接口。實現Filter接口中定義的三個方法init()、doFilter()、destroy()。

  -?編譯

    添加Servlet.jar包到工程jar包目錄下。

  -?部署

    將編譯好的class文件放置在Web應用程序的classes目錄下

    在部署文件web.xml中添加過濾器的注冊與映射

<!--指定過濾器名和過濾器類--> <filter><filter-name>HelloWorldFilter</filter-name><filter-class>com.lovobook.HelloWorldFilter</filter-class> </filter><!-- 將過濾器與URL模式關聯--><filter-mapping><filter-name>HelloWorldFilter</filter-name><url-pattern>/filter/*</url-pattern> </filter-mapping>

過濾器API

  由容器實現的接口?

-?javax.servlet.Filter

-?javax.servlet.FilterChain

-?javax.servlet.FilterConfig?

  四個包裝器類

-?javax.servlet.ServletRequestWrapper

-?javax.servlet.ServletResponseWrapper

-?javax.servlet.http.HttpServletRequestWrapper

-?javax.servlet.http.HttpServletResponseWrapper?

Filter接口

方法

描述

void?init(FilterConfig)

在應用程序啟動時,由容器調用

Void?doFilter(ServletRequest,?ServletResponse,?FilterChain)

對于每個URL映射到該過濾器的請求,由容器調用該方法。

void?destroy()

在應用程序關閉時,由容器調用。

-?過濾器的生命周期方法?,過濾器API不提供Filter接口的任何實現?。自定義的過濾器必須明確地實現所有三個方法?

-?容器僅調用過濾器實例的init()方法一次。在init()方法沒有執行完前,容器不會轉發任何請求到過濾器?

-?doFilter()方法給過濾器對象一個機會來處理請求,轉發請求到過濾器鏈中的下一個組件,或者自己回復客戶端?

-?destroy()是過濾器最后一個方法來調用,以指示過濾器生命周期的結束

FilterConfig接口

-?為過濾器提供初始化參數,并將對象作為參數傳遞給過濾器的init()方法

-?提供了一個過濾器所在的應用程序ServletContext的應用

-?由Servlet容器實現?

方法

描述

String?getFilterName()

返回在部署描述文件中指定的過濾器的名稱

String?getInitParameter(String)

返回在部署描述文件中指定的參數的值

Enumeration?getInitParameterNames()

返回在部署描述文件中指定的所有參數的名稱。

ServletContext?getServletContext()

返回Web應用程序的ServletContext。過濾器可以使用ServletContext設置、獲取application范圍內的屬性。

FilterChain接口

-?由容器實現,由容器將其實例作為參數傳到Filter接口的doFilter()方法?

-?將請求傳遞到過濾器鏈的下一個組件?

方法

描述

Void?doFilter(ServletRequest,?ServletResponse)

我們從一個過濾器對象的doFilter()方法中調用此方法,以繼續過濾器鏈的傳遞過程。它會將控制轉到鏈中的下一個組件。

配置Filter

  <filter>元素

?

元素層次圖

<filter><filter-name>ValidatorFilter</filter-name><description>Validates the requests</description><!--文件路徑--><filter-class>com.lovobook.filters.ValidatorFilter</filter-class><!--初始參數--><init-param><param-name>locale</param-name><param-value>USA</param-value></init-param> </filter>

  <filter-mapping>元素

?

Filter-mapping結構圖

?

<!--所有匹配到該URL定義的請求,都要被filter-name中定義的過濾器過濾。--> <filter-mapping><filter-name>ValidatorFilter</filter-name><url-pattern>*.doc</url-pattern> </filter-mapping> <!--servlet-name用于定義一個servlet名,所有對該servlet的訪問都要被filter-name中定義的過濾器過濾 --> <filter-mapping><filter-name>ValidatorFilter</filter-name><servlet-name>reportServlet</servlet-name> </filter-mapping>

配置過濾器鏈

-?用多個過濾器處理在同一個請求?

-?使用多個<filter-mapping>元素配置過濾器鏈

-?首先調用匹配請求URI的過濾器<url-pattern>

-?再查找用Servlet名匹配請求URI的所有過濾器<servlet-name>??

-?過濾器的順序按照它們在部署描述文件中出現的順序排序??

?

<filter-mapping><filter-name>FilterA</filter-name><servlet-name>RedServlet</servlet-name> </filter-mapping> <filter-mapping><filter-name>FilterB</filter-name><url-pattern>*.red</url-pattern> </filter-mapping> <servlet-mapping><servlet-name>RedServlet</servlet-name><url-pattern>*.red</url-pattern></servlet-mapping> <!--FilterA先執行?還是FilterB先執行? 容器會先調用匹配請求URI的過濾器,然后才是匹配servlet名的過濾器。因此,FilterB始終在FilterA之前調用-->

?

?

使用請求和響應包裝器?

-?所有的四個包裝器類(包括ServletRequestWrapper、ServletResponseWrapper? 、HttpServletRequestWrapper、HttpServletResponseWrapper的工作方式基本相同)。這四個類在其構造器中用request或response對象作為參數,并代理對兩個對象的所有方法的調用。這樣就運行我們擴充這些類,并使用自定義的行為覆蓋類的方法

-?在請求送到過濾器鏈的下一個組件之前更改請求的內容

-?改變從前一個組件接收的響應

public class MyRequestWrapper extends HttpServletRequestWrapper { public MyRequestWrapper(HttpServletRequest req) {super(req);} //重寫接口方法 …… }

public class MyResponseWrapper extends HttpServletResponseWrapper { public MyResponseWrapper(HttpServletResponse response) {super(response);} …… }

public class TextToHTMLFilter implements Filter {……public void doFilter(ServletRequest request,ServletResponse response, FilterChain filterChain) …{MyRequestWrapper mrw = new MyRequestWrapper (req);MyResponseWrapper mrsw = new MyResponseWrapper(res); filterChain.doFilter(mrw , mrsw ); } }

轉載于:https://www.cnblogs.com/HackerBlog/p/5970299.html

總結

以上是生活随笔為你收集整理的JavaWeb总结(九)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。