javaweb:過濾器Filter

来源:https://www.cnblogs.com/jmsstudy/archive/2022/07/31/16536552.html
-Advertisement-
Play Games

過濾器是用來過濾瀏覽器中的數據,例如web伺服器受到一些垃圾請求,後臺可以不處理這些請求或者報錯,還可以用來解決亂碼問題等。 過濾器是在伺服器啟動的時候初始化,在伺服器關閉的時候銷毀。 下麵我們用實例來演示: 首先建立一個過濾器類CharacterEncodingFilter.class 1 pac ...


過濾器是用來過濾瀏覽器中的數據,例如web伺服器受到一些垃圾請求,後臺可以不處理這些請求或者報錯,還可以用來解決亂碼問題等。

過濾器是在伺服器啟動的時候初始化,在伺服器關閉的時候銷毀。

下麵我們用實例來演示:

首先建立一個過濾器類CharacterEncodingFilter.class

 1 package com.jms.filter;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.Filter;
 6 import javax.servlet.FilterChain;
 7 import javax.servlet.ServletException;
 8 import javax.servlet.ServletRequest;
 9 import javax.servlet.ServletResponse;
10 
11 public class CharacterEncodingFilter implements Filter{
12 
13     @Override
14     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
15         request.setCharacterEncoding("UtF-8");
16         response.setCharacterEncoding("UTF-8");
17         response.setContentType("text/html;charset=UTF-8");
18         chain.doFilter(request, response);//給其他過濾器放行
19         
20     }
21 
22 }

chain.doFilter(request, response);這句話是一定要有的,因為一個網站可能會有多個過濾器,這句話是為了給其他過濾放行,如果沒有這句話,執行完這個過濾器後其他過濾器無法得到執行。

接著建立一個servlet用於檢驗過濾器是否執行,servlet001.class

 1 package com.jms.servlet;
 2 
 3 import java.io.IOException;
 4 
 5 import javax.servlet.ServletException;
 6 import javax.servlet.http.HttpServlet;
 7 import javax.servlet.http.HttpServletRequest;
 8 import javax.servlet.http.HttpServletResponse;
 9 
10 public class servlet001 extends HttpServlet{
11 
12     /**
13      * 
14      */
15     private static final long serialVersionUID = 1L;
16 
17     @Override
18     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
19         resp.getWriter().print("過濾成功");
20     }
21 
22     @Override
23     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
24         doGet(req, resp);
25     }
26     
27     
28     
29 }

修改web.xml文件

        <servlet>
            <servlet-name>demo001</servlet-name>
            <servlet-class>com.jms.servlet.servlet001</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>demo001</servlet-name>
            <url-pattern>/demo/show</url-pattern>
        </servlet-mapping>
        <servlet-mapping>
            <servlet-name>demo001</servlet-name>
            <url-pattern>/show</url-pattern>
        </servlet-mapping>
        
        <filter>
            <filter-name>filter001</filter-name>
            <filter-class>com.jms.filter.CharacterEncodingFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>filter001</filter-name>
            <url-pattern>/demo/*</url-pattern>
        </filter-mapping>

如上設置,過濾器會過濾/demo路徑下的所有頁面;servlet001有兩個映射,一個是/show,不會被過濾,另一個是/demo/show,會被過濾。

我們先訪問/show

 

 中文亂碼,沒有被過濾器過濾;

我們再訪問/demo/show

 

 不再是亂碼,成功被過濾。

需要註意的是,設置過濾器的時候儘量不要讓過濾器過濾整個網站,而可以設置多個過濾器分工進行。

 

(本文僅作個人學習記錄用,如有紕漏,敬請指正)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Maven是 Apache 軟體基金會組織維護的一款專門為 Java 項目提供構建和依賴管理支持的工具。 ·首先,Maven核心程式:負責Maven的總體調度,具體操作使用的是Maven插件。 ·每執行一個Maven命令,實際調用的是Maven插件,所需要的相關jar包需聯網下載。 ·安裝Maven ...
  • HTTP&Tomcat&Servlet 1、JavaWeb概念 Web:全球區域網,也稱萬維網(www),能夠通過瀏覽器訪問的網站 JavaWeb:是用Java相關的技術來做網站 2、JavaWeb技術棧 B/S架構 Browser/Server,瀏覽器/伺服器 架構模式。它的特點是,客戶端只需要瀏 ...
  • 一、Python包 python包在開發中十分常見,一般通過導入包含特定功能的python模塊包進行使用。當然,也可以自己創建打包模塊,然後發佈,安裝使用。 1、安裝包 線上安裝包:pip install 包名; 安裝第三方包:python setup.py install (幾乎每個python第 ...
  • 1、Maven 1.1、Maven概念 背景 在一個項目中經常需要手動導入jar包,當需要的jar包數量多的時候,非常難以管理;同時還需要人為去下載各種jar包。同時不同IDE之間,項目結構不一樣,造成遷移性低下,不通用的問題 因此Maven被創造出來解決這個難題 概念 Maven是專門用於管理和構 ...
  • 數組 數組是啥? 數組是幹嘛的? 數組怎麼用? 不管咋樣,先看百科瞭解億下: C++ 數組 —— 菜鳥教程 C++ 支持數組數據結構,它可以存儲一個固定大小的相同類型元素的順序集合。數組是用來存儲一系列數據,但它往往被認為是一系列相同類型的變數。 數組的聲明並不是聲明一個個單獨的變數,比如 numb ...
  • Wing Pro for Mac是一個基於Python編程語言開發的集成開發環境,主要針對學習Python的Mac用戶設計,你可以通過本軟體調試PythonIED的所有功能,內置安裝,定製,設置項目,編輯,搜索,重構等多種功能,您可以選擇在軟體上建立一個新的編輯方案,也可以選擇安裝擴展的IDE腳本到 ...
  • 什麼是Filter實現許可權攔截,比如說我們登陸一個網站,登陸成功後可以訪問其中的內容,退出登陸後就不能再對內容進行訪問,這就用到了我們的Filter實現許可權攔截。 那麼具體是怎麼實現的呢? 原理很簡單,我們可以給已登錄用戶session存放一個用於標記登陸的數據,只需要在過濾器里看能否獲取數據來進行 ...
  • 監聽器種類數不勝數,監聽器最常被應用在GUI中,不過網站中也可以設置監聽器,這裡我們利用sessionListener實現一個網站線上人數統計的監聽來瞭解一下監聽器的使用。 首先建立一個類來實現監聽器OnlineListener.class 1 package com.jms.listener; 2 ...
一周排行
    -Advertisement-
    Play Games
  • 隨著Aspire發佈preview5的發佈,Microsoft.Extensions.ServiceDiscovery隨之更新, 服務註冊發現這個屬於老掉牙的話題解決什麼問題就不贅述了,這裡主要講講Microsoft.Extensions.ServiceDiscovery(preview5)以及如何 ...
  • 概述:通過使用`SemaphoreSlim`,可以簡單而有效地限制非同步HTTP請求的併發量,確保在任何給定時間內不超過20個網頁同時下載。`ParallelOptions`不適用於非同步操作,但可考慮使用`Parallel.ForEach`,儘管在非同步場景中謹慎使用。 對於併發非同步 I/O 操作的數量 ...
  • 1.Linux上安裝Docken 伺服器系統版本以及內核版本:cat /etc/redhat-release 查看伺服器內核版本:uname -r 安裝依賴包:yum install -y yum-utils device-mapper-persistent-data lvm2 設置阿裡雲鏡像源:y ...
  • 概述:WPF界面綁定和渲染大量數據可能導致性能問題。通過啟用UI虛擬化、非同步載入和數據分頁,可以有效提高界面響應性能。以下是簡單示例演示這些優化方法。 在WPF中,當你嘗試綁定和渲染大量的數據項時,性能問題可能出現。以下是一些可能導致性能慢的原因以及優化方法: UI 虛擬化: WPF提供了虛擬化技術 ...
  • 引言 上一章節介紹了 TDD 的三大法則,今天我們講一下在單元測試中模擬對象的使用。 Fake Fake - Fake 是一個通用術語,可用於描述 stub或 mock 對象。 它是 stub 還是 mock 取決於使用它的上下文。 也就是說,Fake 可以是 stub 或 mock Mock - ...
  • 為.net6在CentOS7上面做準備,先在vmware虛擬機安裝CentOS 7.9 新建CentOS764位的系統 因為CentOS8不更新了,所以安裝7;簡單就一筆帶過了 選擇下載好的操作系統的iso文件,下載地址https://mirrors.aliyun.com/centos/7.9.20 ...
  • 經過前面幾篇的學習,我們瞭解到指令的大概分類,如:參數載入指令,該載入指令以 Ld 開頭,將參數載入到棧中,以便於後續執行操作命令。參數存儲指令,其指令以 St 開頭,將棧中的數據,存儲到指定的變數中,以方便後續使用。創建實例指令,其指令以 New 開頭,用於在運行時動態生成並初始化對象。方法調用指... ...
  • LiteDB 是一個輕量級的嵌入式 NoSQL 資料庫,其設計理念與 MongoDB 類似,但它是完全使用 C# 開發的,因此與 C# 應用程式的集成非常順暢。與 SQLite 相比,LiteDB 提供了 NoSQL(即鍵值對)的數據存儲方式,並且是一個開源且免費的項目。它適用於桌面、移動以及 We ...
  • 1 開源解析和拆分文檔 第三方的工具去對文件解析拆分,去將我們的文件內容給提取出來,並將我們的文檔內容去拆分成一個小的chunk。常見的PDF word mark down, JSON、HTML。都可以有很好的一些模塊去把這些文件去進行一個東西去提取。 優勢 支持豐富的文檔類型 每種文檔多樣化選擇 ...
  • OOM是什麼?英文全稱為 OutOfMemoryError(記憶體溢出錯誤)。當程式發生OOM時,如何去定位導致異常的代碼還是挺麻煩的。 要檢查OOM發生的原因,首先需要瞭解各種OOM情況下會報的異常信息。這樣能縮小排查範圍,再結合異常堆棧、heapDump文件、JVM分析工具和業務代碼來判斷具體是哪 ...