成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細(xì)介紹Servlet過濾器的工作方式

開發(fā) 后端
本文介紹的是Servlet過濾器的工作方式,主要介紹了四種過濾器。希望對(duì)你有幫助。

Servlet過濾器是可插入的 Web 組件,它允許我們實(shí)現(xiàn) Web 應(yīng)用程序中的預(yù)處理和后期處理邏輯。過濾器支持 servlet 和 JSP 頁(yè)面的基本請(qǐng)求處理功能,比如日志記錄、性能、安全、會(huì)話處理、XSLT 轉(zhuǎn)換,等等。

從J2EE1.3開始,Servlet2.3規(guī)范中加入了對(duì)過濾器的支持。過濾器能夠?qū)δ繕?biāo)資源的請(qǐng)求和響應(yīng)進(jìn)行截取。過濾器的工作方式分為四種,下面讓我們分別來看看這四種過濾器的工作方式:

1、request過濾器

這種過濾器的工作方式比較簡(jiǎn)單,大家也經(jīng)常遇到,如下圖所示:

request過濾器

以下是web.xml文件配置方式:

 

  1. <filter > 
  2. <filter-name >myFilter</filter-name > 
  3. <filter-class >xx.MyFilter</filter-class > 
  4. <filter > 
  5. <filter-mapping > 
  6. <filter-name >myFilter</filter-name > 
  7. <servlet-name >目標(biāo)資源一</servlet-name > 
  8. </filter-mapping > 

 

下面我們更改一下web.xml文件的配置,如下方式:

 

  1. <filter > 
  2. <filter-name >myFilter</filter-name > 
  3. <filter-class >xx.MyFilter</filter-class > 
  4. </filter > 
  5. <filter-mapping > 
  6. <filter-name >myFilter</filter-name > 
  7. <servlet-name >目標(biāo)資源一</servlet-name > 
  8. </filter-mapping > 
  9. <filter-mapping > 
  10. <filter-name >myFilter</filter-name > 
  11. <servlet-name >目標(biāo)資源二</servlet-name > 
  12. </filter-mapping > 

 

也就是說此過濾器對(duì)目標(biāo)資源一和目標(biāo)資源二都進(jìn)行過濾,然后當(dāng)目標(biāo)資源一被訪問的時(shí)候我們將請(qǐng)求轉(zhuǎn)發(fā)給目標(biāo)資源二,那么這個(gè)時(shí)候過濾器是怎么工作的呢?如下圖所示:

過濾器工作過程

我們可以看到,當(dāng)我們?cè)L問目標(biāo)資源一時(shí)過濾器截取了請(qǐng)求,然后再轉(zhuǎn)發(fā)給目標(biāo)資源一,然后再轉(zhuǎn)發(fā)給目標(biāo)資源二,從圖中我們可以看到過濾器沒有截取轉(zhuǎn)發(fā)到目標(biāo)資源二的請(qǐng)求,但是我們已經(jīng)在web.xml文件中配置了該過濾器對(duì)目標(biāo)資源二的過濾,為什么又沒有起到過濾作用呢?

答案就在于,目標(biāo)資源一是客戶端直接訪問,而目標(biāo)資源二是被轉(zhuǎn)發(fā)過來的,這時(shí)過濾器就不能過濾目標(biāo)資源二。如果你直接訪問目標(biāo)資源二,你會(huì)發(fā)現(xiàn)該過濾器起到了作用?

我們上面的web.xml文件配置與以下方式等價(jià):

 

  1. <filter >myFilter</filter > 
  2. <filter-name >myFilter</filter-name > 
  3. <filter-class >xx.MyFilter</filte-class > 
  4. </filter > 
  5. <filter-mapping > 
  6. <filter-name >myFilter</filter-name > 
  7. <servlet-name >目標(biāo)資源一</servlet-name > 
  8. <dispatcher >REQUEST</dispatcher > 
  9. </filter-mapping > 
  10. <filter-mapping > 
  11. <filter-name >myFilter</filter-name > 
  12. <servlet-name >目標(biāo)資源二</servlet-name > 
  13. <dispatcher >REQUEST</dispatcher > 
  14. </filter-mapping > 

 

這種方式的配置,說明只有直接訪問該目標(biāo)資源時(shí)該過濾器才會(huì)起作用,對(duì)轉(zhuǎn)發(fā)到該目標(biāo)資源的請(qǐng)求將忽略不處理。

那如果我想對(duì)轉(zhuǎn)發(fā)到目標(biāo)資源二的請(qǐng)求進(jìn)行過濾,那怎么辦呢?答案見,下一種過濾器,forward過濾器。

2、forward過濾器

我們將web.xml文件的配置修改如下:

 

  1. <filter >myFilter</filter > 
  2. <filter-name >myFilter</filter-name > 
  3. <filter-class >xx.MyFilter</filter-class > 
  4. </filter > 
  5. <filter-mapping > 
  6. <filter-name >myFilter</filter-name > 
  7. <servlet-name >目標(biāo)資源一</servlet-name > 
  8. <dispatcher >REQUEST</dispatcher > 
  9. </filter-mapping > 
  10. <filter-mapping > 
  11. <filter-name >myFilter</filter-name > 
  12. <servlet-name >目標(biāo)資源二</servlet-name > 
  13. <dispatcher >FORWARD</dispatcher > 
  14. </filter-mapping > 

 

工作方式如下圖所示:

forward過濾器工作方式

我們看對(duì)目標(biāo)資源二過濾的配置方式,這時(shí)過濾方式為forward,也就是說對(duì)轉(zhuǎn)發(fā)到目標(biāo)資源二的請(qǐng)求過濾,如果直接訪問目標(biāo)資源二,過濾器將不起作用。

3、include過濾器

理解了forward過濾器之后,include過濾器就不難理解了。以下方式:

 

  1. <filter-mapping > 
  2. <filter-name >myFilter</filter-name > 
  3. <servlet-name >目標(biāo)資源二</servlet-name > 
  4. <dispatcher >INCLUDE</dispatcher > 
  5. </filter-mapping > 

 

此表示對(duì)包含了目標(biāo)資源二的請(qǐng)求過濾,如果直接訪問目標(biāo)資源二,則此過濾器將不起作用。

include包含以下語(yǔ)句:

在JSP頁(yè)面中的動(dòng)作:指令包含,這時(shí)此過濾器不工作。

4、error過濾器

當(dāng)我們?cè)L問一個(gè)web目標(biāo)資源時(shí),如果服務(wù)器沒有找到該目標(biāo)資源,那么服務(wù)器就會(huì)給出一個(gè)404錯(cuò)誤代碼。如果我們給404錯(cuò)誤代碼定義一個(gè)頁(yè)面,那么當(dāng)404錯(cuò)誤發(fā)生時(shí)就會(huì)調(diào)用該頁(yè)面,請(qǐng)看以下web.xml文件的配置:

 

  1. <filter-mapping > 
  2. <filter-name >myFilter</filter-name > 
  3. <url-pattern >/error.jsp</url-pattern > 
  4. <dispatcher >ERROR</dispatcher > 
  5. </filter-mapping > 
  6. <error-page > 
  7. <error-code >404</error-code > 
  8. <location >/error.jsp</location > 
  9. </error-page > 

 

當(dāng)我們?cè)L問一個(gè)不存在的文件時(shí),就會(huì)訪問error.jsp,但是配置了過濾器對(duì)錯(cuò)誤頁(yè)面進(jìn)行過濾,所以過濾器先接受到請(qǐng)求,然后再轉(zhuǎn)發(fā)給error.jsp.

如果我們?cè)L問一個(gè)已經(jīng)存在的頁(yè)面,會(huì)不會(huì)調(diào)用error.jsp呢?如果這個(gè)頁(yè)面中有response.sendError(404,“出錯(cuò)了!”);那么該錯(cuò)誤頁(yè)面仍然會(huì)被調(diào)用,過濾器也會(huì)工作。

希望通過本文對(duì)于過濾器的介紹,能夠給你帶來幫助。

責(zé)任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2021-07-05 15:22:03

Servlet過濾器客戶端

2009-07-08 15:30:56

Servlet過濾器

2009-07-08 16:07:04

Servlet過濾器配

2009-07-08 17:33:37

Servlet過濾器

2009-07-03 18:26:11

Servlet過濾器

2009-07-06 13:02:49

Servlet過濾器

2009-06-22 16:42:26

JSF的工作方式

2025-04-30 08:47:41

2009-07-08 16:10:36

Servlet和JSPJSP頁(yè)面

2009-02-25 10:52:00

路由器原理工作方式協(xié)議

2009-07-10 13:55:48

Swing控件

2009-09-28 13:39:01

Hibernate工作

2009-07-14 12:47:07

WebWork工作方式

2024-01-05 09:04:35

隆過濾器數(shù)據(jù)結(jié)構(gòu)哈希函數(shù)

2009-06-18 10:13:00

Hibernate過濾

2009-07-14 09:09:08

Swing模型過濾器

2009-09-29 13:55:23

Hibernate設(shè)置

2011-06-29 16:14:59

Qt 事件 過濾器

2024-11-04 08:45:48

布隆過濾器元數(shù)據(jù)指紋值

2016-12-07 09:56:13

JavaFilter過濾器
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 午夜羞羞 | 国产电影精品久久 | 日韩在线精品视频 | 黄一级| 日本中文字幕一区 | 亚洲精品在线免费观看视频 | 久亚州在线播放 | 亚洲精品黄色 | 亚洲网一区| 精精国产视频 | 欧美精品a∨在线观看不卡 国产精品久久国产精品 | 在线观看亚洲欧美 | 欧美午夜一区 | 欧美一级网站 | 久久久久久成人 | 精品一区二区三区电影 | 五月天综合影院 | 亚洲天堂中文字幕 | 曰韩三级 | 性色av一区二区三区 | 久久av在线播放 | 精品国产乱码久久久久久闺蜜 | 国产美女视频一区 | 久久久中文 | 国产色爽 | 国产精品久久久久久久久久久免费看 | 亚洲系列第一页 | 欧美三级视频在线观看 | 精品久久久久久亚洲精品 | 日日草天天干 | 极品国产视频 | 久久久国产精品视频 | 日韩视频区 | 免费不卡视频 | 97av视频| 一呦二呦三呦国产精品 | 一级黄色片日本 | 91视频在线观看 | 成人福利在线视频 | 欧美性一区二区三区 | 毛片免费观看 |