javaweb入门 -- 过滤器Filter

filter.jar 每次项目都是要写登录和字符编码过滤器很是麻烦 立即下载
过滤器基本介绍

过滤器的大致功能如下所示
在这里插入图片描述
一般来说我们使用过滤器来拦截请求,并且对拦截的请求进行特别处理。

Servlet中的过滤器接口

我们可以看到Filter类的结构如下:

Filter过滤器的简单使用案例

在本个案例中,我们将创建一个简单的过滤器,其主要功能为拦截/servlet/*URL路径下的请求,并且设置拦截到请求的字符格式。
1.导入对应的jar包
我们使用的Filter接口需要导入javax.servlet.Filter包,一般来说,我们可以直接导入javax.servlet

<dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

2.创建一个拦截器
创建一个类,实现Filter接口,并且在doFilter()方法中编写对应的拦截方法

package com.kuang.filter;

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

public class CharacterEncodingFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("Filter创建完成...");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("UTF-8");
        servletResponse.setCharacterEncoding("UTF-8");
        servletResponse.setContentType("text/html;charset=utf-8");
//        继续完成链后面的过滤器类
        filterChain.doFilter(servletRequest,servletResponse);//如果不加这个那么请求就不会往下运行
    }

    @Override
    public void destroy() {
        System.out.println("Filter销毁完成...");
    }
}

3.添加对应的Filter映射
在web.xml中添加我们编写的Filter对应的映射<ilter和filter-mapping

    <filter>
        <filter-name>characterEncoding</filter-name>
        <filter-class>com.kuang.filter.CharacterEncodingFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>characterEncoding</filter-name>
        <url-pattern>/servlet/*</url-pattern>
    </filter-mapping>

4.编写一个简单的Servlet,用于测试Filter
我们可以编写一个简单的Servlet类,它只用于输出一串简单的中文字符,并且给这个Servlet设置两个对应的servlet-mapping,一个URL路径在’/servlet/*'路径下,另外一个不在

package com.kuang.servlet;

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

public class FilterTestServlet 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 {
        doGet(req, resp);
    }
}

添加Servlet类的映射(两个)

    <servlet>
        <servlet-name>filterTest</servlet-name>
        <servlet-class>com.kuang.servlet.FilterTestServlet</servlet-class>
    </servlet>
    <!-- 添加两个映射路径-->
    <servlet-mapping>
        <servlet-name>filterTest</servlet-name>
        <url-pattern>/servlet/show</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>filterTest</servlet-name>
        <url-pattern>/show</url-pattern>
    </servlet-mapping>

5.启动服务器,进行测试
在这里插入图片描述
在这里插入图片描述
我们可以看到当我们发出在’/servlet’目录下的请求时,请求会被过滤器拦截并且被过滤器进行了字符格式设置的处理所以页面输出的字符不是乱码;而当我们访问不是‘/servlet’目录下的请求时,请求没有被拦截,所以字符格式没有被设置,页面输出的字符为乱码

另外我们可以看到,当服务器启动时,过滤器被创建,调用init()方法;当服务器终结时,过滤器被销毁,调用destroy()方法。
在这里插入图片描述
在这里插入图片描述

Filter过滤器实用案例 : 过滤未登录用户

在此案例中我们将编写一个只用当用户登录之后才可以访问的页面,当用户没有登录时想要访问此页面会被过滤器拦截。
在此案例中我们判断用户是否登录的方法是在用户登录之后在Session中添加一个USER_ID属性,其内容就是此Session的ID。
1.创建简单的JSP
我们主要创建登录页面、登录成功页面、登录失败页面、未登录页面这四个JSP。
它们代码如下:
登录页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
</head>
<body>
<form method="post" action="/servlet/login">
    <input type="text" name="username"/>
    <input type="submit">
</form>

</body>
</html>

登录成功页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录成功</title>
</head>
<body>
登录成功!!!
<a href="/servlet/logout">注销</a>
</body>
</html>

登录失败页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录失败</title>
</head>
<body>
登录失败
<a href="Login.jsp">再次登录</a>
</body>
</html>

未登录页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
 未登录,请先<a href="Login.jsp">登录</a>
</body>
</html>

2.编写登录Servelt已经注销Servlet
登录Servetl:

package com.kuang.servlet;

import com.kuang.utils.Constant;

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

public class LoginServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1.获取前端输入数据
        String username = (String) req.getParameter("username");
//        2.根据前端输入数据进行判断
        if ( "BugMaker".equals(username) ){
//            2.1 用户名输入正确,在session中添加一个字段以便’标记‘此Session登录成功
            req.getSession().setAttribute(Constant.USER_ID,req.getSession().getId());
            resp.sendRedirect("/sys/LoginSuccess.jsp");
        }else{
//            2.2 用户名输入错误,返回登录失败页面
            resp.sendRedirect("/LoginFailed.jsp");
        }
    }

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

注销Servlet

package com.kuang.servlet;

import com.kuang.utils.Constant;

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

public class LogoutServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        1.获取Session
        HttpSession session = req.getSession();
        String userId = (String) session.getAttribute(Constant.USER_ID);
//        2,如果Session中有USER_ID或者USER_ID异常那么就将此属性移除
        if(userId != null || "".equals(userId)){
            session.removeAttribute(Constant.USER_ID);
        }
//        3.重定向到登录页面
        resp.sendRedirect("/Login.jsp");
    }

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

3.编写过滤器

package com.kuang.filter;

import com.kuang.utils.Constant;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class LoginFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();
        if (session.getAttribute(Constant.USER_ID) == null){
            response.sendRedirect("/Error.jsp");
        }

        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

运行结果:
当我们没有登录就访问登录成功页面时:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

cors-filter-1.7.jar,cors-filter-2.5.jar,cors-filter-2.10.jar Tomcat 在设置跨域 jar包的一部分,cors-filter-1.7.jar,cors-filter-2.5.jar,cors-filter-2.10.jar 立即下载

相关推荐

手把手教你:如何为自制的STM32H7飞控板适配PX4固件(基于NuttX)

本文详细介绍了如何为自制的STM32H7飞控板适配PX4固件,基于NuttX系统进行移植。从硬件设计规范到软件环境配置,再到PX4固件的移植与调试,提供了完整的实战指南。特别分享了如何复用FMU-v6u参考设计以节省开发时间,并解决了常见问题,帮助开发者快速实现高性能飞控系统的搭建。

weixin_27697385的博客 475

JavaWeb21(过滤器Filter)

过滤器的作用 过滤器是用来过滤网站数据的 处理中文乱码 登陆验证 过滤垃圾信息等 所以过滤器也需要request和response及过滤器与Servlet本质上是一样的 Filter开发步骤 1.导入所需的包 <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-a

qq_51224492的博客 190

告别降级CUDA!手把手教你为RTX 50系显卡(5080/5090)配置专属的PyTorch Nightly + vLLM推理环境

本文详细指导如何为RTX 50系显卡(5080/5090)配置专属的PyTorch Nightly和vLLM推理环境,特别针对CUDA 12.8的适配问题提供解决方案。从硬件准备到源码编译,再到模型部署与性能调优,手把手教你构建高效AI推理系统。

weixin_33724046的博客 408

过滤器

过滤器如何编写? 1.写一个类实现Filter接口 2.在web.xml中进行配置 Filter接口: public void init(FilterConfig filterConfig) 创建之后,马上执行;Filter会在服务器启动时就创建! public void destroy(): 销毁之前执行!在服务器关闭时销毁 public void doFilter(ServletRequest servletRequest, ServletResponse servletRespons

Ting1king的博客 418

【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法

【YOLOv7-环境搭建】PyTorch安装后输出版本显示No module named ‘Torch’的解决方法:①检查PyCharm导入的环境是否错误②添加Torch包

qq_59942266的博客 4970

基于phpstudy搭建pikachu靶场

一、phpstudy下载安装配置 phpstudy介绍 简单介绍一下phpstudy,详细请参考百度解读。pikachu是基于PHP环境搭建的,需要数据库支持,所以装pikachu之前需要先安装它需要的环境,就像你养鱼需要给它提供水环境一样。安装phpstudy能满足pikachu的需求,所以先安装phpstudy。 phpStudy是一个PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是

ptxybird的博客 1万+

编码过滤器

先在web.xml配置好 <filter> <filter-name>MyFilter</filter-name> <filter-class>com.chenyu.www.util.MyFilter</filter-class> </filter> <filter-mapping> <filter-name...

weixin_44773374的博客 385

从零开始学习信号完整性(SIPI)--1 简介

信号完整性就是研究如何让驱动芯片发出的信号经过传输通道被接收芯片正确接收的学问。 信号完整性包含了三个要素: 信号:是被传输的主体,我们首先要了解、熟悉信号的特性。 芯片:分为驱动芯片和接收芯片,信号完整性工程师就是要实现信号在驱动芯片和接收芯片之间的正确传输。 传输通道:是传输信号的介质,是信号所走的“路”。如何实现信号的正确传输呢?那就要信号完整性工程师为信号“修路”、“搭桥”。

qq_29476769的博客 4万+

Java拦截器(Interceptor)和过滤器(Filter)实例详解

过滤器和拦截器的区别,以及使用代码使用案例。

帅帅气气的黑猫警长 8044

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

【从零开始学习 SystemVerilog】1.1、SystemVerilog 概述

努力,加油每一天鸭~ 1037

让 SAP HANA 查询飞起来:彻底避开隐式类型转换的性能暗礁

SAP HANA性能优化:警惕隐式类型转换陷阱 隐式类型转换是SAP HANA项目中常见的性能隐患。当SQL表达式两侧数据类型不匹配时,系统会自动进行类型转换,这种看似便利的操作可能导致: 过滤条件无法下推,扫描范围扩大 列存引擎优势丧失,触发中间结果物化 执行计划走向低效路径 治理方案包括: 从源头统一数据类型,确保常用比较字段类型一致 将显式转换应用于常量而非整列 使用生成列预先转换存储,避免运行时计算 排查方法: 通过SQL Plan Cache定位高频查询 分析执行计划中的转换迹象 重点关注VARC

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 11万+

JavaWeb--------服务器端组件Filter过滤器

一. Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行...

詹煜彪9527 8342

四足狗机器人硬件开发技术栈详解

本文系统介绍了四足狗机器人的硬件开发技术,重点分析了五大核心模块:机械结构(骨架设计)、动力系统(关节驱动)、感知系统(环境监测)、控制系统(决策中枢)和电源系统(能源管理)。文章详细阐述了各模块的选型标准、技术要点和协同设计原则,提供了从需求定位到组装调试的完整开发流程,并针对常见问题给出解决方案。随着材料轻量化、模块标准化和AI集成化的发展趋势,四足机器人硬件将向更灵活、更智能的方向演进,为工业巡检、应急救援等场景提供更强大的移动平台支持。

start_up_go的博客 284

JavaWeb Filter过滤器入门

JavaWeb 中的过滤器(Filter)是一种重要的组件,用于对请求和响应进行过滤和处理。它可以在请求进入 Servlet 之前进行预处理,也可以在响应返回客户端之前进行后处理。过滤器通常用于执行一些共享的任务,如身份验证、日志记录、字符编码转换等,以提高应用程序的可维护性和可重用性。总之,过滤器是在请求进入 Servlet 之前进行预处理,或者在响应返回客户端之前进行后处理的组件。它们可以用于各种任务,如身份验证、日志记录、字符编码转换等。通过使用过滤器,你可以增强网站的安全性、可维护性和可重用性。

罗不丢的博客 418

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JavaWeb——Filter过滤器快速入门与是否登录验证&过滤敏感词汇案例实战(Filter配置方式、执行流程、生命周期方法、过滤器链)

目录 1 Filter过滤器基本概念 2 Filter过滤器快速入门 3 过滤器使用细节 3.1 web.xml配置 3.2 过滤器执行流程 3.3 过滤器生命周期方法 3.4 过滤器配置详解 3.5 过滤器链(配置多个过滤器) 4 Filter案例实战 4.1 案例1:登录验证 4.2 案例2:过滤敏感词汇 1 Filter过滤器基本概念 Servlet、Filter、Listener被称为JavaWeb的三大组件,Filter需要重点掌握,Listener了解即可。 过滤器,

数字世界 万物互联 1615

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JavaWeb零基础入门之Filter过滤器

学完之后学习JavaWeb零基础入门之 视频链接:https://www.bilibili.com/video/BV1Y7411K7zz?p=1 参考手册:https://tool.oschina.net/apidocs/apidoc?api=javaEE6 一、Filter过滤器的介绍 Filter过滤器是JavaWeb三大组件之一,其余组件是:Servlet程序、Listener监听器 Filter过滤器是JavaEE规范,也就是一个接口 Filter过滤器的作用是:拦截请求、过滤响应 二、Filt

aaenen 的博客 347

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

JavaWeb--快速入门Filter过滤器

Filter一、Filter 过滤1. Filter什么是过滤器2. Filter的初体验2.1 编写AdminFilter实现接口2.2在xml中配置访问路径2.3 打断点debug部署服务进行测试3. Filter的生命周期4. FilterConfig类5. FilterChain 过滤器链6. Filter的拦截路径精确匹配目录匹配后缀名匹配 一、Filter 过滤 1. Filter什么是过滤器 1、Filter过滤器它是JavaWeb的三大组件之一 三大组件分别是: Servlet 程序、Lis

全网粉丝10W+、全栈领域优质创作者、掘金、阿里云等社区博客专家、专注于全栈领域和毕业项目实战 772

JavaWeb学习-Filter-1-过滤器Filter快速入门

开始学习Filter这个知识点,单词是过滤器和拦截器的作用。Filter是Javaweb中的过滤器,可以拦截所有访问web资源的请求或响应操作。Filter这个知识点很重要,在javaweb开发中,这个是我们需要重点掌握的一个知识点。 1.使用场景 使用Filter主要场景是拦截判断是否登录,权限管理,例如不同角色权限是不同,请求在这个角色之外的操作会被拦截。还有一个使用场景就是全局给项...

Anthony_tester的博客 836

黑马AI+JavaWeb开发入门,Filter过滤器的过滤没效果

在练习黑马2024的WEB入门时候,Filter代码写的正确无误,但是过滤器不工作,在网上查阅之后可能是没有被spring boot扫描。解决办法:将过滤器对象引入IOC容器中,即可完美解决,即添加注解@Component,就没问题了。

2402_88610255的博客 255

Filter过滤器

过滤器(Filter)用于根据预定义的条件对输入数据进行筛选,只保留满足条件的数据项。这个过程类似于在现实生活中使用筛子筛选谷物,去除杂质,留下纯净的部分。在计算机科学中,过滤器通常接收一个数据集作为输入,并返回一个新的数据集,其中包含原始数据集中符合特定标准的元素。是 JavaWeb三大组件(Servlet、Filter、Listener)之一。

2302_77758423的博客 2381

【JavaWeb】Filter快速入门、执行流程、拦截路径配置、过滤器链

【转载黑马教学文档】【JavaWeb】Filter快速入门、执行流程、拦截路径配置、过滤器链

Zh0uKal1的博客 1212

javaweb--Filter过滤器快速入门

1.过滤器实现类 package cn.liu.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; //过滤器快速入门 @WebFilter("/*")//访问所有资源都会执行该过滤器 public class FilterDemo1 implements Filter { @Override public void init(Fil

刘向阳的博客 272

JavaWeb--快速入门Filter过滤器,java面试问题

Override。

m0_60634964的博客 748

入门JavaWeb之 MVC、Filter 过滤器和监听器

监听器在 GUI 图形用户界面中经常使用,小窗体,可以监听用户操作,关闭、缩小、放大等。比如 /admin/*、/servlet/*,表示这个路径下的全部都会走过滤器。处理用户的请求,获取用户登录的参数,username、password。Model(模型)、View(视图)、Controller(控制器)2.提供链接发起 Servlet 请求(a、form、img 等)1.接收用户的请求(req:请求参数、Session 信息等)控制业务操作,保存数据、修改数据、删除数据、查询数据。

m0_58838332的博客 660
上一篇: JavaWeb -- 入门到入土
下一篇: javaweb 实战项目 --遇见狂神说 SMBMS 超市订单管理系统 数据库创建使用SQL
BugMaker2000
博客等级 码龄7年 84粉丝 21原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值