web开发——过滤器

1.过滤器介绍

        ①过滤器(Filter),Servlet技术中最实用技术,web开发人员通过 Filte r技术,对web服务器管理的所有web资源:例如如Servlet, 从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

        ②作用:对服务器web资源进行拦截(权限控制,通过拦截资源进行权限控制,是否可以访问)

        ③如何完成编写过滤器: Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。

说的简单点就是对web发送来的请求进行统一处理,一是提高代码的复用性,提高可维护性,二是过滤器会对请求等进行过滤,满足要求的才会执行servlet服务。而实现的方式则是编写一个类继承Filter接口并实现其中的方法,然后将其配置到指定的服务之前即可。

2.Filter接口,FilterChain接口,FilterConfig接口

①Filter接口

该接口是过滤器类必须实现的接口,该接口中有三个方法。

init(FilterConfig filterConfig):该方法是对filter对象进行初始化的方法,仅在容器初始化filter对象结束后被调用一次。参数FilterConfig可以获得filter的初始化参数.

doFilter(ServletRequest request, ServletResponse response, FilterChain chain):该方法是filter进行过滤操作的方法,是最重要的方法。过滤器实现类必须实现该方法。方法体中可以对request和response进行预处理。其中FilterChain可以将处理后的request和response对象传递到过滤链上的下一个资源。

destroy():该方法在容器销毁过滤器对象前被调用。

②FilterChain接口

该接口类型作为Filter接口中doFilter方法的参数使用。doFilter(ServletRequest request,ServletResponse response),该方法可以将当前的请求和响应传递到过滤链上的下一个资源,可能是下一个过滤器,也可能是目标servlet服务。

③FilterConfig接口

该接口类型作为Filter接口中的init方法的参数使用。getInitParameter(String name),该方法用来获得过滤器的初始化参数值。在web.xml中,可以为每一个filter配置需要的初始化参数,与Servlet的类似。过滤器的初始化参数即可通过FilterConfig中的getInitParameter方法获取。定义的方式见Filter配置方法的第二种方式

3.Filter配置方法

注解配置:给实现了Filter接口的类添加注解,形式:

其中"urlPatterns"指明为哪一个servlet服务添加过滤器,"/*" 表示全部,即为所有的servlet服务添加此过滤器

在web.xml中进行配置

注解配置和xml文件配制方法的区别:

        1) 代码量的显著区别,注解形式配置过滤器简单快捷

        2) 注解形式配置过滤器可能会出现问题,因为无法指定过滤器的执行顺序,程序在运行时,前端向后端发送请求收到后,会按照类名的字典顺序依次执行。对于有些过滤器则一定要放在过滤器链的头部,即首要执行的过滤器,例如解决前后交互的跨域问题的过滤器;规定请求和响应的字符集。而对于web.xml配置过滤器会按照 web.xml 从上到下的顺序依次走过需要经过过滤器。

怎么配制过滤器?

对于一些必须首先执行的过滤器按照逻辑顺序在 web.xml 中进行配置,而其他没有严格顺序要求的可以使用注解方式配置过滤器。

4.Filter的使用—设置请求和响应的字符集

编写过滤器

package com.flash.demo.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * 功能描述:设置编码和解码的字符集
 */
@SuppressWarnings({"all"})
public class EncodingFilter implements Filter {
    String encod;
    String respencod;

    // 在xml中定义数据, java代码提取数据可以动态配置一些, xml无需编译, 修改xml文件中的数据, 可以让同一段java代码获得不同的数据
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        encod = filterConfig.getInitParameter("encod");// 获取web.xml中定义的数据
        respencod = filterConfig.getInitParameter("respencod");
    }

    // 用来执行过滤操作
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding(encod);// 设置请求解码格式
        servletResponse.setContentType(respencod);// 设置响应体内容格式
        filterChain.doFilter(servletRequest, servletResponse);// 继续向后执行, 可能是过滤器也可能是servlet服务
    }
}

web.xml文件中配置过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <!--配置解码格式及编码格式-->
    <filter>
        <filter-name>Encoding</filter-name>
        <filter-class>com.flash.demo.filter.EncodingFilter</filter-class>
        <init-param>
            <param-name>encod</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>respencod</param-name>
            <param-value>text/html;charset=utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

  • 18
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
完整全套资源下载地址:https://download.csdn.net/download/qq_27595745/70761177 【完整课程列表】 完整版Java web开发教程PPT课件 Java开发进阶教程 第01章 JavaScript简介以及基本语法(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第02章 Dom模型,控制客户端元素(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第03章 表单验证,常用函数(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第04章 自定义web服务器(共14页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第06章 SERVLET(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第07章 JSP语法及运行过程(共13页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第08章 JSP内置对象(共22页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第09章 jstl、el、java bean(共18页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第10章 过滤器、监听器、自定义标签(共19页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第11章 AJAX实现(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第12章 自定义mvc框架(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第13章 spring ioc aop(共18页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第14章 spring mvc介绍,原理以及搭建(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第15章 spring mvc核心对象拦截器(共26页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第17章 自定义orm框架(共11页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第18章 mybatis框架的搭建以及应用(共13页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第19章 mybatis高级应用(共21页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第20章 数据库连接池,缓存(共15页).pptx 完整版Java web开发教程PPT课件 Java开发进阶教程 第22章 常用框架的介绍以及环境搭建(共16页).pptx JS课程案例ebookHTML\网上书店需求文档.doc

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Black—slience

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值