2020国产成人精品视频,性做久久久久久久久,亚洲国产成人久久综合一区,亚洲影院天堂中文av色

分享

java過濾器的范圍

 我想跑 2009-03-25

 

  從J2EE1.3開始,Servlet2.3規(guī)范中加入了對過濾器的支持。過濾器能夠?qū)δ繕?biāo)資源的請求和響應(yīng)進行截取。過濾器的工作方式分為四種,下面讓我們分別來看看這四種過濾器的工作方式:
  1、request過濾器
  這種過濾器的工作方式比較簡單,大家也經(jīng)常遇到,如下圖所示:
  以下是web.xml文件配置方式:
  <filter>
  <filter-name>myFilter</filter-name>
  <filter-class>xx.MyFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <servlet-name>目標(biāo)資源一</servlet-name>
  </filter-mapping>
  下面我們更改一下web.xml文件的配置,如下方式:
  <filter>
  <filter-name>myFilter</filter-name>
  <filter-class>xx.MyFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <servlet-name>目標(biāo)資源一</servlet-name>
  </filter-mapping>
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <servlet-name>目標(biāo)資源二</servlet-name>
  </filter-mapping>
  也就是說此過濾器對目標(biāo)資源一和目標(biāo)資源二都進行過濾,然后當(dāng)目標(biāo)資源一被訪問的時候我們將請求轉(zhuǎn)發(fā)給目標(biāo)資源二,那么這個時候過濾器是怎么工作的呢?如下圖所示:
  我們可以看到,當(dāng)我們訪問目標(biāo)資源一時過濾器截取了請求,然后再轉(zhuǎn)發(fā)給目標(biāo)資源一,然后再轉(zhuǎn)發(fā)給目標(biāo)資源二,從圖中我們可以看到過濾器沒有截取轉(zhuǎn)發(fā)到目標(biāo)資源二的請求,但是我們已經(jīng)在web.xml文件中配置了該過濾器對目標(biāo)資源二的過濾,為什么又沒有起到過濾作用呢?
  答案就在于,目標(biāo)資源一是客戶端直接訪問,而目標(biāo)資源二是被轉(zhuǎn)發(fā)過來的,這時過濾器就不能過濾目標(biāo)資源二。如果你直接訪問目標(biāo)資源二,你會發(fā)現(xiàn)該過濾器起到了作用?
  我們上面的web.xml文件配置與以下方式等價:
  <filter>myFilter</filter>
  <filter-name>myFilter</filter-name>
  <filter-class>xx.MyFilter</filte-class>
  </filter>
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <servlet-name>目標(biāo)資源一</servlet-name>
  <dispatcher>REQUEST</dispatcher>
  </filter-mapping>
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <servlet-name>目標(biāo)資源二</servlet-name>
  <dispatcher>REQUEST</dispatcher>
  </filter-mapping>
  這種方式的配置,說明只有直接訪問該目標(biāo)資源時該過濾器才會起作用,對轉(zhuǎn)發(fā)到該目標(biāo)資源的請求將忽略不處理。
  那如果我想對轉(zhuǎn)發(fā)到目標(biāo)資源二的請求進行過濾,那怎么辦呢?答案見,下一種過濾器,forward過濾器。
  2、forward過濾器
  我們將web.xml文件的配置修改如下:
  <filter>myFilter</filter>
  <filter-name>myFilter</filter-name>
  <filter-class>xx.MyFilter</filter-class>
  </filter>
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <servlet-name>目標(biāo)資源一</servlet-name>
  <dispatcher>REQUEST</dispatcher>
  </filter-mapping>
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <servlet-name>目標(biāo)資源二</servlet-name>
  <dispatcher>FORWARD</dispatcher>
  </filter-mapping>
  工作方式如下圖所示:
  我們看對目標(biāo)資源二過濾的配置方式,這時過濾方式為forward,也就是說對轉(zhuǎn)發(fā)到目標(biāo)資源二的請求過濾,如果直接訪問目標(biāo)資源二,過濾器將不起作用。
  3、include過濾器
  理解了forward過濾器之后,include過濾器就不難理解了。以下方式:
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <servlet-name>目標(biāo)資源二</servlet-name>
  <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>
  此表示對包含了目標(biāo)資源二的請求過濾,如果直接訪問目標(biāo)資源二,則此過濾器將不起作用。
  include包含以下語句:
  在JSP頁面中的動作:<jsp:include page=.......
  在Java代碼中的request.getRequestDispatcher("....").include
  注意:如果目標(biāo)資源一通過<%@ include file="目標(biāo)資源二"%>指令包含,這時此過濾器不工作。后面給大家介紹指令包含和動作包含的區(qū)別。
  4、error過濾器
  當(dāng)我們訪問一個web目標(biāo)資源時,如果服務(wù)器沒有找到該目標(biāo)資源,那么服務(wù)器就會給出一個404錯誤代碼。如果我們給404錯誤代碼定義一個頁面,那么當(dāng)404錯誤發(fā)生時就會調(diào)用該頁面,請看以下web.xml文件的配置:
  <filter-mapping>
  <filter-name>myFilter</filter-name>
  <url-pattern>/error.jsp</url-pattern>
  <dispatcher>ERROR</dispatcher>
  </filter-mapping>
  <error-page>
  <error-code>404</error-code>
  <location>/error.jsp</location>
  </error-page>
  當(dāng)我們訪問一個不存在的文件時,就會訪問error.jsp,但是配置了過濾器對錯誤頁面進行過濾,所以過濾器先接受到請求,然后再轉(zhuǎn)發(fā)給error.jsp。
  如果我們訪問一個已經(jīng)存在的頁面,會不會調(diào)用error.jsp呢?如果這個頁面中有response.sendError(404,"出錯了!");那么該錯誤頁面仍然會被調(diào)用,過濾器也會工作。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多