Java Web——Servlet的过滤器接口(Filter)

简介: Java Web——Servlet的过滤器接口(Filter)

文章目录:


1.介绍

2.作用

3.Filter接口实现类开发步骤

4.过滤器接口的第一个例子

5.过滤器接口的第二个例子

6.过滤器拦截地址


1.介绍


Filter接口来自于Servlet规范。

Filter接口实现类由项目开发人员实现。

Filter接口可以在tomcat调用资源文件之前进行拦截 。


2.作用


拦截tomcat之后,帮助tomcat检测本次请求合法性。

拦截tomcat之后,对本次拦截的请求做增强服务。


3.Filter接口实现类开发步骤


创建Filter接口实现类。

重写doFilter方法。

在web.xml中注册过滤器接口实现类。


4.过滤器接口的第一个例子


拦截tomcat之后,帮助tomcat检测本次请求合法性。

package com.songzihao.filter;
import javax.servlet.*;
import java.io.IOException;
/**
 *
 */
public class OneFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //从拦截得到的请求对象中的请求头参数,得到用户年龄
        String age=servletRequest.getParameter("age");
        //根据用户年龄判断本次请求是否合法
        if (Integer.valueOf(age)<70) {
            filterChain.doFilter(servletRequest,servletResponse);
        }else {
            servletResponse.setContentType("text/html;charset=utf-8");
            servletResponse.getWriter().print("抱歉,您无法查看此图片!!!");
        }
    }
}

在web目录下任意添加一张图片


<?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>oneFilter</filter-name>
        <filter-class>com.songzihao.filter.OneFilter</filter-class>
    </filter>
    <!-- 通知tomcat在调用何种文件之前需要由过滤器进行拦截 -->
    <filter-mapping>
        <filter-name>oneFilter</filter-name>
        <url-pattern>/美国队长.jpg</url-pattern>
    </filter-mapping>
</web-app>


通过在浏览器中输入参数 age 的值。


当小于70时,filterChain 这个过滤器链条对象,将会把拦截到的请求对象和响应对象,重新交还给tomcat,tomcat将相应的信息写入响应体中,推送给浏览器。


当大于等于70时,就没必要去找tomcat了,直接进行拦截,通过响应对象获取输出流,将对应的信息直接返回给浏览器。




5.过滤器接口的第二个例子


拦截tomcat之后,对本次拦截的请求做增强服务。


当请求对象中的信息到达tomcat之前,对请求体(浏览器以post方式发起请求,写入请求体)中的内容进行 utf-8 字符集解析。之后过滤器链条对象 filterChain 将拦截对象进行放行,此时到达tomcat之后,就是正确的 utf-8 字符集。


package com.songzihao.controller;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
public class OneServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //得到请求对象之后,直接从请求体中读取参数信息
        String value=request.getParameter("userName");
        System.out.println("从请求体读取到的参数信息===" + value);
    }
}
package com.songzihao.filter;
import javax.servlet.*;
import java.io.IOException;
/**
 *
 */
public class OneFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //在请求对象到达目的地之前,对请求对象进行增强处理
        servletRequest.setCharacterEncoding("utf-8");
        //放行
        filterChain.doFilter(servletRequest,servletResponse);
    }
}
<?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>oneFilter</filter-name>
        <filter-class>com.songzihao.filter.OneFilter</filter-class>
    </filter>
    <!-- 通知tomcat在调用何种文件之前需要由过滤器进行拦截 -->
    <filter-mapping>
        <filter-name>oneFilter</filter-name>
        <url-pattern>/one</url-pattern>
    </filter-mapping>
    <servlet>
        <servlet-name>OneServlet</servlet-name>
        <servlet-class>com.songzihao.controller.OneServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>OneServlet</servlet-name>
        <url-pattern>/one</url-pattern>
    </servlet-mapping>
</web-app>


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/myWeb/one" method="post">
        参数:<input type="text" name="userName" /><br/>
        <input type="submit" value="post方式访问OneServlet" />
    </form>
</body>
</html>


6.过滤器拦截地址


1)通知tomcat调用某个具体资源文件时需要调用当前过滤器

    <url-pattern>/文件名.后缀名</url-pattern>


2)通知tomcat调用某个文件夹下资源文件时需要调用当前过滤器

    <url-pattern>/文件夹名/*</url-pattern>


3) 通知tomcat调用某种类型文件时需要调用当前过滤器

    <url-pattern>*.jpg</url-pattern>


4) 通知tomcat在调用当前网站下任意资源文件时需要调用当前过滤器

    <url-pattern>/*</url-pattern>


目录
打赏
0
0
0
0
85
分享
相关文章
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
java spring 项目若依框架启动失败,启动不了服务提示端口8080占用escription: Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that’s listening on port 8080 or configure this application to listen on another port-优雅草卓伊凡解决方案
80 7
小团队 CI/CD 实践:无需运维,Java Web应用的自动化部署
本文介绍如何使用GitHub Actions和阿里云Kubernetes(ACK)实现Java Web应用的自动化部署。通过CI/CD流程,开发人员无需手动处理复杂的运维任务,从而提高效率并减少错误。文中详细讲解了Docker与Kubernetes的概念,并演示了从创建Kubernetes集群、配置容器镜像服务到设置GitHub仓库Secrets及编写GitHub Actions工作流的具体步骤。最终实现了代码提交后自动构建、推送镜像并部署到Kubernetes集群的功能。整个过程不仅简化了部署流程,还确保了应用在不同环境中的稳定运行。
112 9
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
124 7
Spring Boot 入门:简化 Java Web 开发的强大工具
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
102 7
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
130 4
java会话跟踪和拦截器过滤器
本文介绍了Web开发中的会话跟踪技术——Cookie与Session,以及过滤器(Filter)和监听器(Listener)的概念和应用。Cookie通过在客户端记录信息来识别用户,而Session则在服务器端保存用户状态。过滤器用于拦截和处理请求及响应,监听器则监控域对象的状态变化。文章详细解释了这些技术的实现方式、应用场景和主要方法,帮助开发者更好地理解和使用这些工具。
69 1
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
107 0
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
TIS 是一款基于Web-UI的开源大数据集成工具,通过与人大金仓Kingbase的深度整合,提供高效、灵活的实时数据集成方案。它支持增量数据监听和实时写入,兼容MySQL、PostgreSQL和Oracle模式,无需编写复杂脚本,操作简单直观,特别适合非专业开发人员使用。TIS率先实现了Kingbase CDC连接器的整合,成为业界首个开箱即用的Kingbase CDC数据同步解决方案,助力企业数字化转型。
57 5
基于Flink CDC 开发,支持Web-UI的实时KingBase 连接器,三大模式无缝切换,效率翻倍!
Python 高级编程与实战:深入理解 Web 开发与 API 设计
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧以及数据科学和机器学习。本文将深入探讨 Python 在 Web 开发和 API 设计中的应用,并通过实战项目帮助你掌握这些技术。
|
5月前
|
ServiceStack:不仅仅是一个高性能Web API和微服务框架,更是一站式解决方案——深入解析其多协议支持及简便开发流程,带您体验前所未有的.NET开发效率革命
【10月更文挑战第9天】ServiceStack 是一个高性能的 Web API 和微服务框架,支持 JSON、XML、CSV 等多种数据格式。它简化了 .NET 应用的开发流程,提供了直观的 RESTful 服务构建方式。ServiceStack 支持高并发请求和复杂业务逻辑,安装简单,通过 NuGet 包管理器即可快速集成。示例代码展示了如何创建一个返回当前日期的简单服务,包括定义请求和响应 DTO、实现服务逻辑、配置路由和宿主。ServiceStack 还支持 WebSocket、SignalR 等实时通信协议,具备自动验证、自动过滤器等丰富功能,适合快速搭建高性能、可扩展的服务端应用。
322 3

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等