11-过滤器Filter

在实际项目中,很多通用的校验或者模块,可以放在过滤器中进行实现,不用都写在 servlet 中。

1. 新建一个javaweb项目

开发环境:

  • IDEA
  • jdk 8
  • maven 3.6.3
  • tomcat 9

使用 maven 的模板创建一个 webapp 项目

手动创建 java 以及 resources 目录,创建后的目录结构如下所示

在这里插入图片描述
在 pom.xml 文件中,引入需要用到的依赖,如下为本次用到的所有依赖

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>javaweb</artifactId>
        <groupId>com.yuhuofei.servlet</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>03-filter</artifactId>
    <packaging>war</packaging>

    <name>03-filter Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <!--添加Servlet依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <!--添加JSP依赖-->
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <!--添加JSTL表达式的依赖-->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <!--添加standard标签库-->
        <dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
        </dependency>
        <!--连接数据库-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>03-filter</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

为项目配置好 tomcat 服务器

在这里插入图片描述
到此,项目基本的创建就算完成了,接下来就是写处理逻辑

2. 过滤器filter的使用示例

这里以使用过滤器统一处理乱码问题为例,演示过滤器的使用

1、新建一个 Servlet 类——TestServlet.java

package com.yuhuofei.javaweb.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @Description 一个简单的servlet示例
 * @ClassName TestServlet
 * @Author yuhuofei
 * @Date 2022/6/5 16:34
 * @Version 1.0
 */
public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("你好,世界!");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doGet(req, resp);
    }
}

2、新建一个过滤器类——MyFilter.java

package com.yuhuofei.javaweb.filter;

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

/**
 * @Description 自定义一个Filter类,演示过滤效果
 * @ClassName MyFilter
 * @Author yuhuofei
 * @Date 2022/6/5 16:27
 * @Version 1.0
 */
public class MyFilter implements Filter {

    //初始化
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("=====MyFilter开始初始化=====");
    }


    /**
     * 1、过滤中的所有代码,在过滤特定请求的时候都会执行
     * 2、必须要让过滤器继续往后执行,即要加上chain.doFilter(request,response);
     */
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        System.out.println("MyFilter开始执行");
        //这行的作用是让请求继续往后走,如果不写,程序到此会被拦截停止!
        chain.doFilter(request,response);

        System.out.println("MyFilter执行完成");
    }

    //销毁
    @Override
    public void destroy() {
        System.out.println("=====MyFilter销毁=====");
    }
}

3、修改 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">

    <!--配置servlet -->
    <servlet>
        <servlet-name>testServlet</servlet-name>
        <servlet-class>com.yuhuofei.javaweb.servlet.TestServlet</servlet-class>
    </servlet>
    <!--对同一个servlet,配置两个请求路径-->
    <servlet-mapping>
        <servlet-name>testServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>testServlet</servlet-name>
        <url-pattern>/filter/test</url-pattern>
    </servlet-mapping>

    <!--配置Filter-->
    <filter>
        <filter-name>MyFilter</filter-name>
        <filter-class>com.yuhuofei.javaweb.filter.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFilter</filter-name>
        <!--凡是请求 /filter/ 路径下的资源,都会经过MyFilter这个过滤器进行处理-->
        <url-pattern>/filter/*</url-pattern>
    </filter-mapping>
</web-app>

4、启动 tomcat 服务器,测试

(1)启动 tomcat 服务器后,访问 http://localhost:8080/test,会展示乱码,因为这个路径下没有做乱码处理
在这里插入图片描述
(2)返回 http://localhost:8080/filter/test ,会展示中文内容,如下所示,原因是在过滤器中对 /filter/ 路径下的请求,做了乱码处理

在这里插入图片描述

5、过滤器的初始化和销毁

过滤器会随着服务器的启动和关闭,进行初始化和销毁,如下所示

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值