成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

聽說你叫Java(三)–Servlet過濾器

techstay / 1115人閱讀

摘要:幸好,給我們提供了過濾器解決這個問題。可以將一個或多個過濾器附加到一個或一組。同樣的,過濾器是可用于編程的類,也需要在中聲明的。用戶訪問后續(xù)過濾器。過濾器和攔截器是兩個完全不同的概念。

聽說你改bug很厲害,幫我改一個吧
????

上一章我們講到了Servlet請求,可以通過瀏覽器發(fā)送的請求,來進行數(shù)據(jù)的處理并返回相應(yīng)的響應(yīng)給瀏覽器。

在我們的實際開發(fā)中,常常會遇到一些對所有方法都需要的驗證方法,比如登錄驗證等,這個時候我們在每個方法中都編寫同樣的功能代碼,既浪費時間也不利于維護。

幸好,Servlet給我們提供了過濾器解決這個問題。

是什么

Servlet 過濾器可以動態(tài)地攔截請求和響應(yīng),以變換或使用包含在請求或響應(yīng)中的信息。

可以將一個或多個 Servlet 過濾器附加到一個 Servlet 或一組 Servlet。調(diào)用 Servlet 前調(diào)用所有附加的 Servlet 過濾器。

Servlet 過濾器可以實現(xiàn)以下目的:

在客戶端的請求訪問后端資源之前,攔截這些請求。

在服務(wù)器的響應(yīng)發(fā)送回客戶端之前,處理這些響應(yīng)。

同樣的,Servlet過濾器是可用于 Servlet 編程的 Java 類,也需要在XML中聲明的。Filter執(zhí)行順序和在web.xml中聲明的順序一致,通常把Filter配置在所有邏輯Servlet之前。

如何用

Servlet通過javax.servlet.Filter接口來實現(xiàn)過濾器,接口提供了三個方法:

public void doFilter(ServletRequest, ServletResponse, FilterChain)

該方法完成實際的過濾操作,當(dāng)客戶端請求方法與過濾器設(shè)置的URL匹配時,Servlet容器將先調(diào)用過濾器的doFilter方法。FilterChain用戶訪問后續(xù)過濾器。

public void init(FilterConfig filterConfig)

web 應(yīng)用程序啟動時,web 服務(wù)器將創(chuàng)建Filter 的實例對象,并調(diào)用其init方法,讀取web.xml配置,完成對象的初始化功能,從而為后續(xù)的用戶請求作好攔截的準(zhǔn)備工作(filter對象只會創(chuàng)建一次,init方法也只會執(zhí)行一次)。開發(fā)人員通過init方法的參數(shù),可獲得代表當(dāng)前filter配置信息的FilterConfig對象。

public void destroy()

Servlet容器在銷毀過濾器實例前調(diào)用該方法,在該方法中釋放Servlet過濾器占用的資源。

配置過濾器web.xml節(jié)點說明
節(jié)點 說明
指定這個過濾器
過濾器的名稱
過濾器完整類名
元素用于為過濾器指定初始化參數(shù),它的子元素指定參數(shù)的名字,指定參數(shù)的值。
元素用于設(shè)置一個 Filter 所負責(zé)攔截的資源。一個Filter攔截的資源可通過兩種方式來指定:Servlet 名稱和資源訪問的請求路徑
子元素用于設(shè)置filter的注冊名稱。該值必須是在元素中聲明過的過濾器的名字
設(shè)置 filter 所攔截的請求路徑(過濾器關(guān)聯(lián)的URL樣式)

舉個例子

我們接著上一章的小栗子繼續(xù)擴展我們的應(yīng)用。

1. 新建一個class類,這里需要注意的是,如果我們要在過濾器中返回值給瀏覽器,需要引入相應(yīng)的庫才行。
package com.filter;

//導(dǎo)入必要的依賴庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

//實現(xiàn)Filter類
public class FirstFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
        //獲取web.xml中初始化的參數(shù)
        String name = config.getInitParameter("name");
        //輸出
        System.out.println("請關(guān)注:"+ name);
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  throws java.io.IOException, ServletException {
        System.out.println("我在doFilter中");
        
        String message = "我跨越過濾器來跟你說";
        // 設(shè)置響應(yīng)內(nèi)容類型
        response.setContentType("text/html;charset=utf-8");
        // 實際的邏輯是在這里
        PrintWriter out = response.getWriter();
        out.println("

" + message + "

"); //把請求傳回過濾鏈 chain.doFilter(request, response); } public void destroy(){ //do something } }
2. web.xml中同樣配置好,將過濾器添加到servlet的上方

  
      FirstFilter
      com.filter.FirstFilter
      
        name
        野生前端攻城獅
      
  
  
      FirstFilter
      /*
  
  
      HelloWorld
      com.servletLearn.HelloWorld
  

  
      HelloWorld
      /
  
3. 看結(jié)果

可以看到,我們在項目啟動的時候,執(zhí)行了Filter的init()方法,所以在服務(wù)器日志中看到了打印請關(guān)注野生前端攻城獅字符串。

使用瀏覽器打開對應(yīng)的鏈接時,同樣在服務(wù)器日志中也出現(xiàn)了我們打印的字符串。而在瀏覽器中,則同時出現(xiàn)了我們在過濾器和HelloWorld方法中返回的字符串。

所以,我們在過濾器中返回的值,并沒有影響原來Servlet方法的執(zhí)行。

最后

過濾器在日常開發(fā)中適用范圍非常廣泛,所以是我們學(xué)習(xí)servlet所必須要掌握的一個知識點。

PS:過濾器和攔截器是兩個完全不同的概念。過濾器是原生servlet的類,攔截器是Spring及struts2里的概念

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67060.html

相關(guān)文章

  • 聽說你叫Java(一)--Servlet簡介

    摘要:所以,就是接收瀏覽器或其他客戶端發(fā)來的請求,根據(jù)請求操作數(shù)據(jù)庫,并返回請求所需要的數(shù)據(jù)。和方法是每次服務(wù)請求中最常用的方法,分別用于處理和請求。實現(xiàn)一個簡單的在中新建一個項目。接著,在目錄下新增一個,命名為。 本文是菜鳥教程閱讀筆記,詳細請前往菜鳥教程 是什么 Java Servlet是運行在Web服務(wù)器上的程序,它是作為來自Web瀏覽器和服務(wù)器上的數(shù)據(jù)庫之間的中間層。 簡單點說,我們...

    Reducto 評論0 收藏0
  • 聽說你叫Java(二)–Servlet請求

    摘要:服務(wù)器響應(yīng)當(dāng)客戶端發(fā)送了一個請求給服務(wù)器,服務(wù)器也會返回一個響應(yīng)給客戶端,同樣的,這個響應(yīng)中也包含了除數(shù)據(jù)之外的很多信息。如果沒有指定,會在所有對此站點的傳送時發(fā)送。正常情況下,只被送回最初向用戶發(fā)送的計算機。下一章大巴司機和。 showImg(https://segmentfault.com/img/bVL3vT?w=800&h=600); Servlet客戶端HTTP請求 當(dāng)瀏覽器...

    adie 評論0 收藏0
  • Java3y文章目錄導(dǎo)航

    摘要:前言由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 前言 由于寫的文章已經(jīng)是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導(dǎo)航。 由于更新比較頻繁,因此隔一段時間才會更新目錄導(dǎo)航哦~想要獲取最新原創(chuàng)的技術(shù)文章歡迎關(guān)注我的公眾號:Java3y Java3y文章目錄導(dǎo)航 Java基礎(chǔ) 泛型就這么簡單 注解就這么簡單 Druid數(shù)據(jù)庫連接池...

    KevinYan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<