Java day16 filter

filter

  • 1、入门
  • 2、生命周期
  • 3、执行顺序问题
  • 4、注解

1、入门

在这里插入图片描述

UserServlet.java

package com.cky.servlet;import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletContext;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebInitParam;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;//配置多个url路径 使用value 是一样饿效果
@WebServlet(urlPatterns ={"/s1","/s2"},name="servlet1")
public class UserServlet extends HttpServlet {@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("a");}}

Myfilter.java

package com.cky.filters;import jakarta.servlet.*;import java.io.IOException;public class Myfilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//做三件事/*1、在请求到达目标资源之前的代码 比如登录校验等2、放行3、请求返回给客户端之前的代码*/System.out.println("filterChain.doFilter before");filterChain.doFilter(servletRequest,servletResponse);System.out.println("filterChain.doFilter after");}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"version="5.0"><!--    <context-param>-->
<!--        <param-name>code</param-name>-->
<!--        <param-value>i</param-value>-->
<!--    </context-param>--><filter><filter-name>myfilter</filter-name><filter-class>com.cky.filters.Myfilter</filter-class></filter><filter-mapping><filter-name>myfilter</filter-name>
<!--        servlet -name 是servlet的别名 而不是访问地址--><servlet-name>servlet1</servlet-name>
<!--        这里也可以是模糊也可以是请确匹配-->
<!--        url 是servlet 的访问地址-->
<!--        <url-pattern>/s1</url-pattern>--></filter-mapping>
</web-app>

输出:
filterChain.doFilter before
a
filterChain.doFilter after

我们可以打断点尝试,在我们访问servlet时,会先经过dofilter方形之前的代码,然后执行我们的目标代码,之后再执行放行之后的代码。
注意:导入的filter 是import jakarta.servlet.*; 包下的

2、生命周期

构造 只构造1次 在项目启动时构造
初始化 初始化一次,构造完成之后就立即初始化
dofilter 多次,每次调用
销毁 项目关闭时 只销毁一次。
与servlet的不同之处:
servlet 可以在web.xml文件的标签中添加 </load-on-
startup> 标签,标签中间填写的是整数,正整数表示在服务器加载时创建,值越小优先级越高,负整数或者不填表示第一次访问时创建。
而filter 不能选择,都是在项目启动时创建。
可以在filter中初始化参数

  <filter><filter-name>myfilter</filter-name><filter-class>com.cky.filters.Myfilter</filter-class><init-param><param-name>key</param-name><param-value>value</param-value></init-param></filter><filter-mapping><filter-name>myfilter</filter-name>
<!--        servlet -name 是servlet的别名 而不是访问地址--><servlet-name>servlet1</servlet-name>
<!--        这里也可以是模糊也可以是请确匹配-->
<!--        url 是servlet 的访问地址-->
<!--        <url-pattern>/s1</url-pattern>--></filter-mapping>
package com.cky.filters;import jakarta.servlet.*;import java.io.IOException;public class Myfilter implements Filter {public  Myfilter(){System.out.println("构造");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {System.out.println(filterConfig.getInitParameter("key"));}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("dofilter");}@Overridepublic void destroy() {System.out.println("销毁");}
}

3、执行顺序问题

在web.xml 配置中 如果有多个多滤器就是按照filter-mapping的顺序执行的,哪个在前,先执行哪个filter。
如果是通过注解的方式,则就是按照filter的名称。比如F1_filter,F2_filter,则就是F1 这个先执行。

4、注解

@WebFilter(urlPatterns = "/servlet1",initParams = 
{@WebInitParam(name = "key",value = "v")},
servletNames = "")

value与urlPatterns 是一样的,不过当urlPatterns 只有一个时,可以省略urlPatterns 不写。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770538.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java后端项目性能优化实战-群发通知

背景 公司群发通知模块性能存在问题&#xff0c;我进行全面的系统调优&#xff0c;系统处理能力大幅提升。 原发送流程 优化后的发送流程 优化的点 说明&#xff1a;以下问题基本都是压测过程遇到的&#xff0c;有些问题普通的功能测试暴露不了。优化目标&#xff1a;保证高…

weindos的docker 运行Hyperf 日志

weindos的docker 运行日志 进入cmd窗口 docker run --name hyperf -v D:\phpstudy_pro\WWW\hyperf.com\hyperf-skeleton:/data/project -p 9501:9501 -it --privileged -u root --entrypoint /bin/sh hyperf-skeleton:latest D:\phpstudy_pro\WWW\hyperf.com\hyperf-skeleton是…

Java问题详解

在Java中&#xff0c;问题可能涵盖多个领域&#xff0c;如基础知识、高级特性、设计模式、性能优化、并发编程等。下面&#xff0c;我将提供两个问题以及对它们的详细回答。请注意&#xff0c;2000字的要求可能过于庞大&#xff0c;我将尽量确保回答详细而不过于冗长。 问题1&…

Tomcat 启动闪退问题解决方法

Tomcat 启动闪退问题可能由多种原因引起&#xff0c;下面是一些常见的解决方法&#xff1a; 检查 Tomcat 的日志文件&#xff1a;Tomcat 会生成日志文件&#xff0c;记录启动过程中的错误和异常信息。打开 Tomcat 的日志文件&#xff0c;查找是否有任何错误或异常信息。 检查 …

网络: 套接字

套接字: 在网络上进行进程间通信 网络字节序与主机字节序的转化 sockaddr sockaddr struct sockaddr {sa_family_t sa_family; // 地址族char sa_data[14]; // 地址数据&#xff0c;具体内容与地址族相关 };sockaddr_in :主要是地址类型, 端口号, IP地址. 基于IPv4编程…

数学系的数字信号处理:连续信号、滤波器与采样定理

本专栏&#xff1a;数学系的数字信号处理 的前置知识主要有&#xff1a;数学分析&#xff08;傅立叶级数的部分&#xff09;&#xff0c;泛函分析&#xff08; L p L^p Lp空间的部分&#xff09; 连续信号、滤波器与采样定理 我们在数学上粗略地定义信号和滤波器&#xff0c;目…

React 抽屉显示和隐藏

<div className{styles.content}><div className{styles.left} ref{leftRef}><div className{styles.drawer} onClick{drawerChange}>我是抽屉开关</div><div>我是左边内容</div></div><div className{styles.right} ref{rightRe…

6.使用个人用户登录域控的成员服务器,如何防止个人用户账号的用户策略生效?

&#xff08;1&#xff09;需求&#xff1a; &#xff08;2&#xff09;实战配置步骤 第一步:创建新的策略-并编辑策略 第二步&#xff1a;将策略应用到服务器处在OU 第三步&#xff1a;测试 &#xff08;1&#xff09;需求&#xff1a; 比如域控&#xff0c;或者加入域的…

【iOS ARKit】3D文字

首先&#xff0c;3D场景中渲染的任何虚拟元素都必须具有网格&#xff08;顶点及顶点间的拓扑关系&#xff09;&#xff0c;没有网格的元素无法利用GPU 进行渲染&#xff0c;因此&#xff0c;在3D 场景申渲染 3D文字时&#xff0c;文字也必须具有网格。在计算机系统中&#xff0…

springboot实现热搜后端elk

需求描述&#xff1a;热搜方式的分词查询。 数据环境&#xff1a;mysql中存在已爬数据表名t_bj(id,titile,content,publishtime)&#xff0c;使用logstash同步到es中&#xff0c;springboot连接es实现rest接口给前端页面。 springboot dom文件&#xff1a; <dependency>…

Ruoyi若依框架下载流程详细解读(SpringBoot-Vue)

图解&#xff1a; 前端设计&#xff1a; 前端设计一个link文字连接或者按钮&#xff08;ElementUI&#xff09;Element - The worlds most popular Vue UI framework 前端请求设计&#xff1a; import request from /utils/request //下载示例模型定义语言的JSON export const…

零售商品计划新篇章:智能管理系统的挑战与机遇

在零售企业管理中&#xff0c;商品计划管理在零售企业运营中占据核心地位。面对日益激烈的市场竞争和消费者需求的多样化&#xff0c;零售企业在商品计划管理方面面临着诸多挑战和需求。以下针对这些挑战和需求的分析&#xff0c;以及对一套智能商品计划管理系统应具备的功能和…

基于SpringBoot IP黑白名单的实现2

业务场景 IP黑白名单是网络安全管理中常见的策略工具&#xff0c;用于控制网络访问权限&#xff0c;根据业务场景的不同&#xff0c;其应用范围广泛&#xff0c;以下是一些典型业务场景&#xff1a; 服务器安全防护&#xff1a; 黑名单&#xff1a;可以用来阻止已知的恶意IP地…

每日一练:LeeCode-200、岛屿数量【DFS递归+BFS队列】

给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假设该网格的四条边…

特种兵旅游-扬州、南京Citywalk

一、扬州 Day01 西安咸阳机场->扬州泰州机场&#xff08;扬州地界但是离泰州也嘎嘎近&#xff09;->大运河博物馆&#xff08;需要提前预约&#xff01;&#xff09;&#xff08;超级震撼&#xff09; Day02 瘦西湖&#xff08;门票有点贵&#xff0c;但是蛮值得&#x…

【微服务】Eureka(服务注册,服务发现)

文章目录 1.基本介绍1.学前说明2.当前架构分析1.示意图2.问题分析 3.引出Eureka1.项目架构分析2.上图解读 2.创建单机版的Eureka1.创建 e-commerce-eureka-server-9001 子模块2.检查父子pom.xml1.子 pom.xml2.父 pom.xml 3.pom.xml 引入依赖4.application.yml 配置eureka服务5.…

【数据结构刷题专题】—— 二叉树

二叉树 二叉树刷题框架 二叉树的定义&#xff1a; struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode(int x) : val(x), left(NULL), right(NULL); };1 二叉树的遍历方式 【1】前序遍历 class Solution { public:void traversal(TreeNode* node, vector&…

CI/CD 搭建jenkins基础测试环境构建项目(一)

Jenkins是一个开源的持续集成工具&#xff0c;可以帮助开发团队自动化构建、测试和部署他们的软件项目。通过Jenkins&#xff0c;开发团队可以实现快速、高效地交付软件&#xff0c;并及时发现和解决问题&#xff0c;从而提高团队的生产力和软件质量。持续集成/持续交付&#x…

后端常问面经之操作系统

请简要描述线程与进程的关系,区别及优缺点&#xff1f; 本质区别&#xff1a;进程是操作系统资源分配的基本单位&#xff0c;而线程是任务调度和执行的基本单位 在开销方面&#xff1a;每个进程都有独立的代码和数据空间&#xff08;程序上下文&#xff09;&#xff0c;程序之…

计算机网络面试题二

1.什么是计算机网络拓扑结构&#xff1f;计算机网络拓扑结构有哪五种基本形式&#xff1f; 计算机网络的拓扑结构是指网络中各个结点之间相互连接的几何形式。计算机网络拓扑结构的基本形式有&#xff1a;总线型网络、环形网络、星形网络、树形网络、网状网络。 2.什么是协议…