国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

techstay / 1114人閱讀

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

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

上一章我們講到了Servlet請求,可以通過瀏覽器發送的請求,來進行數據的處理并返回相應的響應給瀏覽器。

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

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

是什么

Servlet 過濾器可以動態地攔截請求和響應,以變換或使用包含在請求或響應中的信息。

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

Servlet 過濾器可以實現以下目的:

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

在服務器的響應發送回客戶端之前,處理這些響應。

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

如何用

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

public void doFilter(ServletRequest, ServletResponse, FilterChain)

該方法完成實際的過濾操作,當客戶端請求方法與過濾器設置的URL匹配時,Servlet容器將先調用過濾器的doFilter方法。FilterChain用戶訪問后續過濾器。

public void init(FilterConfig filterConfig)

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

public void destroy()

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

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

舉個例子

我們接著上一章的小栗子繼續擴展我們的應用。

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

//導入必要的依賴庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

//實現Filter類
public class FirstFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
        //獲取web.xml中初始化的參數
        String name = config.getInitParameter("name");
        //輸出
        System.out.println("請關注:"+ name);
    }
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  throws java.io.IOException, ServletException {
        System.out.println("我在doFilter中");
        
        String message = "我跨越過濾器來跟你說";
        // 設置響應內容類型
        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. 看結果

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

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

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

最后

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67060.html

相關文章

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

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

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

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

    adie 評論0 收藏0
  • Java3y文章目錄導航

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

    KevinYan 評論0 收藏0

發表評論

0條評論

techstay

|高級講師

TA的文章

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