Rumah Java javaTutorial 什么是servlet过滤器

什么是servlet过滤器

May 05, 2019 pm 02:52 PM

servlet过滤器是服务器与客户端请求与响应的中间层组件,它主要是用于对浏览器的请求进行过滤处理,并将过滤后的请求再转给下一个资源。

什么是servlet过滤器

【推荐教程:Java教程

servlet过滤器的基本概念

Servlet过滤器从字面上的字意理解为经过一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。

Filter是在Servlet 2.3之后增加的新功能,当需要限制用户访问某些资源或者在处理请求时提前处理某些资源的时候,就可以使用过滤器完成。

过滤器是以一种组件的形式绑定到WEB应用程序当中的,与其他的WEB应用程序组件不同的是,过滤器是采用了“链”的方式进行处理的。

什么是servlet过滤器

Filter

Servlet过滤器Fileter是一个小型的web组件,它们通过拦截请求和响应,以便查看、提取或以某种方式操作客户端和服务器之间交换的数据,实现“过滤”的功能。Filter通常封装了一些功能的web组件,过滤器提供了一种面向对象的模块化机制,将任务封装到一个可插入的组件中, Filter组件通过配置文件来声明,并动态的代理。

简单来说Servlet的Filter是:

●  声明式的:通过在web.xml配置文件中声明,允许添加、删除过滤器,而无需改动任何应用程序代码或jsp页面。

●  灵活的:过滤器可用于客户端的直接调用执行预处理和后期的处理工作,通过过滤链可以实现一些灵活的功能。

●  可移植的:由于现今各个web容器都是以Servlet的规范进行设计的,因此Servlet过滤器同样是跨容器的。

●  可重用的:基于其可移植性和声明式的配置方式,Filter是可重用的。

总的来说,Servlet的过滤器是通过一个配置文件来灵活的声明的模块化可重用组件。过滤器动态的截获传入的请求和传出的响应,在不修改程序代码的情况下,透明的添加或删除他们。其独立于任何平台和web容器。

Filter工作原理

基于Filter体系结构的描述,我们可以看出Filter的工作原理,简单的通过一幅流程图加以演示:

什么是servlet过滤器

客户端浏览器在访问web服务器的某个具体资源的时候,经过过滤器1中code1代码块的相关处理之后,将request请求传递给过滤链中的下一个过滤器2,(过滤链的顺序以配置文件中的顺序为基准)过滤器2处理完之后,request就传递的Servlet完成相应的逻辑。返回响应的过程类似,只是过滤链的顺序相反,这里就不多说了。

Filter的创建过程

要编写一个过滤器必须实现Filter接口。实现其接口规定的方法。

★  实现javax.servlet.Filter接口

★ 实现init方法,读取过滤器的初始化参数

★ 实现doFilter方法,完成对请求或响应的过滤

★ 调用FilterChain接口对象的doFilter方法,向后续的过滤器传递请求或响应

一个最基本的过滤器实现代码:

 java类:

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class BasicsFilter implements Filter {

    public BasicsFilter() {
        // 容器(服务器)启动时执行
    }

    /**
     * @see Filter#init(FilterConfig)
     */
    public void init(FilterConfig fConfig) throws ServletException {
        /* 容器(服务器)时执行 */
        System.out.println("======== 初始化方法 ========");
        // 获取的是web.xml中配置Filter时设置的值,参数为设置值得名称,若参数不存在,则返回空
        String initParam = fConfig.getInitParameter("param");
        System.out.println("param ========" + initParam);
    }

    /**
     * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
     */
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        /* 在访问的时候执行 */
        System.out.println("======= 开始执行doFilter ========");
        // 转发到下一个组件,进行后续的处理(组件可以是一个过滤器,也可以是一个servlet)
        chain.doFilter(request, response);
        System.out.println("======= 结束执行doFilter ========");
        
    }

    /**
     * @see Filter#destroy()
     */
    public void destroy() {
        // TODO Auto-generated method stub
    }
}
Salin selepas log masuk

web.xml配置:

<filter>
    <filter-name>basicsFilter</filter-name>
    <filter-class>com.hudongwu.filter.BasicsFilter</filter-class>
    <init-param><!-- 设置在过滤器中执行初始化方法时,获取的值 -->
        <param-name>param</param-name>
        <param-value>studyFilter</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>basicsFilter</filter-name>
    <!-- 设置为访问该网站所有地址都需要通过该过滤器 -->
    <url-pattern>/*</url-pattern>
    <!-- 设置为只有访问该网站的/Helloword地址时才通过该过滤器 -->
    <url-pattern>/Helloword</url-pattern>
</filter-mapping>
Salin selepas log masuk

Atas ialah kandungan terperinci 什么是servlet过滤器. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Bagaimana dengan elegan mendapatkan nama pemboleh ubah kelas entiti untuk membina keadaan pertanyaan pangkalan data? Apr 19, 2025 pm 11:42 PM

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Adakah perisian keselamatan syarikat menyebabkan aplikasi gagal dijalankan? Bagaimana cara menyelesaikan masalah dan menyelesaikannya? Apr 19, 2025 pm 04:51 PM

Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Bagaimana untuk memudahkan isu pemetaan medan dalam dok sistem menggunakan mapstruct? Apr 19, 2025 pm 06:21 PM

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Bagaimanakah Idea IntelliJ mengenal pasti nombor port projek boot musim bunga tanpa mengeluarkan log? Apr 19, 2025 pm 11:45 PM

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Bagaimana cara menukar objek Java dengan selamat ke array? Bagaimana cara menukar objek Java dengan selamat ke array? Apr 19, 2025 pm 11:33 PM

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Apakah perbezaan antara kebocoran memori dalam program Java pada CPU ARM dan X86 Architecture? Apakah perbezaan antara kebocoran memori dalam program Java pada CPU ARM dan X86 Architecture? Apr 19, 2025 pm 11:18 PM

Analisis fenomena kebocoran memori program Java pada CPU seni bina yang berbeza. Artikel ini akan membincangkan kes di mana program Java mempamerkan tingkah laku memori yang berbeza di lengan dan cpus seni bina x86 ...

Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Bagaimana menggunakan penyelesaian cache Redis untuk merealisasikan keperluan senarai kedudukan produk dengan cekap? Apr 19, 2025 pm 11:36 PM

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...

Bagaimana cara menukar nama ke nombor untuk melaksanakan penyortiran dalam kumpulan? Bagaimana cara menukar nama ke nombor untuk melaksanakan penyortiran dalam kumpulan? Apr 19, 2025 pm 01:57 PM

Bagaimana cara menukar nama ke nombor untuk melaksanakan penyortiran dalam kumpulan? Apabila menyusun pengguna dalam kumpulan, sering kali perlu menukar nama pengguna ke dalam nombor supaya ia boleh berbeza ...

See all articles