当前位置: 首页 > news >正文

Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)

Java-servlet(十)使用过滤器,请求调度程序和Servlet线程

  • 前言
  • 一、Servlet 间通信(了解即可)
  • 二、Servlet 请求处理:getAttribute 和 getParameter 的区别与应用
    • 1.getAttribute 方法
    • 2.getParameter 方法
  • 三、Servlet线程模型
    • 多线程模型
    • 单线程模型
  • 四、servlet过滤器(重点)
    • 4.1 过滤器的作用
    • 4.2 过滤器的使用场景
    • 4.3. 实现过滤器链
    • 4.4. 配置文件优先级


前言

  • 在前几篇博客中,我们学习了 Servlet 的基础配置、生命周期、请求响应处理以及 Java Servlet 环境的配置
  • 接下来,我们将深入探讨 Servlet 间通信、Servlet 响应的相关方法、Servlet 线程模型以及 Servlet 过滤器等重要内容

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-servlet文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482


一、Servlet 间通信(了解即可)

  • Servlet 间通信可以通过请求分配器对象来实现,它实际上是一种转发机制
  • 比如在一个 Web 应用中,当用户请求一个 Servlet 时,该 Servlet 可能需要将请求转发给另一个 Servlet 进行进一步处理。这在多个 Servlet 协同完成一个复杂功能时非常有用
  • 例如,一个 Servlet 负责接收用户的登录请求,验证用户名和密码后,将请求转发给另一个 Servlet 来处理登录成功后的页面跳转或权限分配等操作。

二、Servlet 请求处理:getAttribute 和 getParameter 的区别与应用

  • 在处理 HTTP 请求时Servlet 提供了多种方法来获取请求数据和设置响应内容
  • 其中, getAttribute 和 getParameter 是两个常用的方法,它们的作用和使用方式有所不同。

一句话记忆

  • getAttribute拿自己人(服务器)的数据
  • getParameter拿外人(用户)的数据
 @Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("doPost"+req.getParameter("name"));String username=(String) req.getAttribute("name");String username1= req.getParameter("name");resp.getWriter().write("getAttribute"+username+"---getParameter"+username1);}
  • 例如上面代码中的
String username=(String) req.getAttribute("name");
String username1= req.getParameter("name");

1.getAttribute 方法

getAttribute 方法用于从请求中获取属性值
这些属性可以是其他 Servlet 或过滤器设置的,也可以是我们在当前 Servlet 中设置的。例如:

request.setAttribute("username", "张三");
String username = (String) request.getAttribute("username");
  • 在这个例子中,我们首先通过 setAttribute 方法将一个属性 username 设置到请求中,然后通过 getAttribute 方法获取这个属性的值。

2.getParameter 方法

getParameter 方法用于从请求中获取用户提交的表单参数。例如,用户在登录表单中输入了用户名和密码,我们可以通过 getParameter 方法获取这些参数

String username = request.getParameter("username");
String password = request.getParameter("password");

这两个方法的区别在于getAttribute 获取的是请求中的属性,而 getParameter 获取的是用户提交的表单参数。在实际开发中,我们需要根据具体需求选择合适的方法

对比项getAttributegetParameter
作用从请求中获取属性值(可用于Servlet间传递数据)从请求中获取用户提交的表单参数(如URL参数或表单输入)
数据来源服务器端通过setAttribute设置的数据客户端(浏览器)发送的请求参数(如HTML表单、URL查询字符串)
数据类型可以是任意Java对象(需强制类型转换)始终是字符串类型(即使表单中输入的是数字)
使用场景在多个Servlet/JSP之间共享数据(如登录后的用户信息)处理用户输入(如登录验证、表单提交)
示例代码request.setAttribute("user", userObject);
User user = (User) request.getAttribute("user");
String username = request.getParameter("username");
int age = Integer.parseInt(request.getParameter("age"));
注意事项需手动进行类型转换若参数不存在则返回null,需处理空值情况

简单总结

  • getAttribute:用于服务器内部数据传递(如A Servlet处理完数据后传递给B Servlet)。
  • getParameter:用于获取用户输入数据(如表单提交的用户名、密码)。

一句话记忆

  • getAttribute拿自己人(服务器)的数据
  • getParameter拿外人(用户)的数据

三、Servlet线程模型

  • 在 Java Web 应用中,Servlet 的线程模型是一个非常重要的概念。
  • 它决定了 Servlet 如何处理并发请求,以及如何管理线程资源
  • 常见的线程模型有两种:多线程模型和单线程模型

多线程模型

  • 多线程模型是 Servlet 的默认线程模型。
  • 在这种模型下,每个请求都会被分配到一个独立的线程中处理。
  • 这种方式的优点是可以同时处理多个请求,提高应用的响应速度
  • 然而,多线程模型也存在一些缺点,比如线程安全问题。
  • 由于多个线程可能会同时访问共享资源,如果没有进行适当的同步处理,可能会导致数据不一致等问题

单线程模型

  • 单线程模型通过实现 SingleThreadModel 接口来实现。
  • 在这种模型下,Servlet 的每个实例只会被一个线程访问,从而避免了线程安全问题。然
  • 而,单线程模型也有其缺点,比如性能较低。由于每次只能处理一个请求,当请求量较大时,可能会导致应用响应缓慢

以下是 Servlet 线程模型的对比表格

对比项多线程模型单线程模型
线程处理方式每个请求分配独立线程,并发处理多个请求同一时间仅一个线程处理请求(排队执行)
默认情况是(Servlet 的默认行为)否(需手动实现 SingleThreadModel 接口)
优点响应速度快,支持高并发无需处理线程安全问题
缺点需自行处理线程安全(如同步代码块)性能低,请求量大时易阻塞
适用场景高并发 Web 应用(如电商网站、社交平台)线程安全敏感但并发量低的场景(如简单管理后台)
注意事项共享资源(如成员变量)需同步控制Servlet 2.4 后 SingleThreadModel 已废弃,推荐使用其他线程安全方案(如局部变量)

一句话总结

  • 多线程模型:快但需小心线程安全。
  • 单线程模型:安全但性能差,已过时。

四、servlet过滤器(重点)

  • 过滤器是 Java-servlet 中的一个重要特性,它可以对请求和响应进行拦截和处理
  • 过滤器的作用非常广泛,比如可以用于日志记录、权限校验、请求编码设置等

4.1 过滤器的作用

  • 过滤器的主要作用是对请求和响应进行预处理和后处理。
  • 例如,在请求到达 Servlet 之前,过滤器可以对请求进行校验,如果用户没有登录,可以直接返回错误信息,而不需要让请求到达 Servlet
  • 在响应返回给客户端之前,过滤器也可以对响应内容进行处理,比如添加一些额外的信息

4.2 过滤器的使用场景

过滤器的使用场景非常多,以下是一些常见的场景:

  • 日志记录:记录请求的详细信息,方便后续的分析和排查问题。
  • 权限校验:检查用户是否具有访问某个资源的权限。
  • 请求编码设置:设置请求的编码格式,避免出现乱码问题。
  • 响应压缩:对响应内容进行压缩,减少传输数据量。

4.3. 实现过滤器链

过滤器链是指多个过滤器按照一定的顺序依次对请求和响应进行处理。在 Java-servlet 中,可以通过实现 Filter 接口并注册多个过滤器来实现过滤器链。以下是一个简单的例子:

// FilterDemo1
public class FilterDemo1 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化过滤器}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {System.out.println("执行了过滤器-FilterDemo1");chain.doFilter(request, response); // 将请求传递给下一个过滤器或 Servlet}@Overridepublic void destroy() {// 销毁过滤器}
}

在 doFilter 方法中, chain.doFilter(request, response) 语句用于将请求传递给下一个过滤器或 Servlet。通过这种方式,多个过滤器可以依次对请求和响应进行处理。

4.4. 配置文件优先级

在 Java-servlet 中,过滤器的配置可以通过 web.xml 文件或注解来完成。如果同时使用了 web.xml 文件和注解,配置文件的优先级会高于注解。以下是一个 web.xml 文件的配置示例:

<filter><filter-name>filter2</filter-name><filter-class>filter.FilterDemo2</filter-class>
</filter>
<filter-mapping><filter-name>filter2</filter-name><url-pattern>/index</url-pattern>
</filter-mapping><filter><filter-name>filter1</filter-name><filter-class>filter.FilterDemo1</filter-class>
</filter>
<filter-mapping><filter-name>filter1</filter-name><url-pattern>/index</url-pattern>
</filter-mapping><filter><filter-name>filter3</filter-name><filter-class>filter.FilterDemo3</filter-class>
</filter>
<filter-mapping><filter-name>filter3</filter-name><url-pattern>/index</url-pattern>
</filter-mapping>
  • 在上面的配置中, filter1 、 filter2 和 filter3 是三个过滤器,它们都会对 /index 路径的请求进行处理。过滤器的执行顺序由 filter-mapping 的配置顺序决定

核心概念速记

  • Servlet 间通信要点
    • 借助请求分配器对象实现转发机制。
    • 适用于多个 Servlet 协同完成复杂功能场景,如登录验证与后续处理的转发。
  • 请求处理方法区别
    • getAttribute:获取服务器内部设置的属性值,数据类型为任意 Java 对象(需强制类型转换),用于 Servlet 间数据共享。
    • getParameter:获取用户提交的表单参数,数据类型为字符串,用于处理用户输入。
  • 线程模型特性
    • 多线程模型:默认模型,每个请求分配独立线程,能并发处理请求但需处理线程安全问题,适用于高并发场景。
    • 单线程模型:实现 SingleThreadModel 接口(已废弃),同一时间仅一个线程处理请求,无线程安全问题但性能低,适用于并发量低且线程安全敏感场景。
  • 过滤器关键应用
    • 对请求和响应进行拦截和处理,可用于日志记录、权限校验、请求编码设置、响应压缩等。
    • 实现过滤器链,多个过滤器按顺序处理请求和响应,配置文件(web.xml)优先级高于注解,过滤器执行顺序由 filter-mapping 配置顺序决定。

Java-servlet 相关对比

对比项getAttributegetParameter多线程模型单线程模型
数据来源服务器端设置的数据客户端发送的请求参数每个请求分配独立线程同一时间仅一个线程处理请求
数据类型任意 Java 对象(需强制类型转换)字符串支持高并发性能低,请求量大时易阻塞
使用场景Servlet 间共享数据处理用户输入高并发 Web 应用线程安全敏感但并发量低的场景
注意事项需手动进行类型转换若参数不存在则返回 null,需处理空值情况共享资源需同步控制Servlet 2.4 后已废弃,推荐其他线程安全方案

知识图谱

Java-servlet(十) 使用过滤器,请求调度程序和 Servlet 线程  
├─ Servlet 间通信  
│  └─ 请求分配器对象实现转发  
├─ 请求处理方法  
│  ├─ getAttribute(拿服务器数据)  
│  └─ getParameter(拿用户数据)  
├─ 线程模型  
│  ├─ 多线程模型(默认,快但需线程安全处理)  
│  └─ 单线程模型(已废弃,安全但性能差)  
├─ 过滤器  
│  ├─ 作用(请求响应拦截处理)  
│  ├─ 使用场景(日志、权限、编码、压缩)  
│  ├─ 实现过滤器链(多个过滤器按序处理)  
│  └─ 配置文件优先级(`web.xml` 高于注解)  
└─ 关键术语  ├─ 请求分配器、`getAttribute`、`getParameter`  ├─ 多线程模型、`SingleThreadModel`  └─ 过滤器、`Filter`、`filter-mapping`  

重点提炼

  1. Servlet 间通信

    • 理解请求分配器的转发机制,用于 Servlet 间协同工作。
    • 实际应用中合理利用转发,优化业务逻辑处理流程。
  2. 请求处理方法

    • 明确 getAttributegetParameter 的区别,根据需求正确选择使用。
    • 注意 getAttribute 的类型转换和 getParameter 的空值处理。
  3. 线程模型

    • 掌握多线程模型的并发处理优势和线程安全问题。
    • 了解单线程模型的原理及废弃原因,避免错误使用。
  4. 过滤器应用

    • 熟悉过滤器的多种使用场景,在项目中合理应用以提升系统功能。
    • 掌握过滤器链的实现和配置文件优先级,正确配置过滤器顺序。
  5. 技术实践要点

    • 在处理并发请求时,对共享资源进行同步控制,确保数据一致性。
    • 配置过滤器时,根据实际需求和优先级选择合适的配置方式。

以上就是这篇博客的全部内容,下一篇我们将继续探索 Java-servlet 的更多精彩内容。

我的个人主页,欢迎来阅读我的其他文章
https://blog.csdn.net/2402_83322742?spm=1011.2415.3001.5343
我的Java-servlet文章专栏
欢迎来阅读指出不足
https://blog.csdn.net/2402_83322742/category_12907265.html?spm=1001.2014.3001.5482

非常感谢您的阅读,喜欢的话记得三连哦

在这里插入图片描述

相关文章:

Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)

Java-servlet&#xff08;十&#xff09;使用过滤器&#xff0c;请求调度程序和Servlet线程 前言一、Servlet 间通信&#xff08;了解即可&#xff09;二、Servlet 请求处理&#xff1a;getAttribute 和 getParameter 的区别与应用1.getAttribute 方法2.getParameter 方法 三、…...

【环路补偿】环路补偿的九种类型-mathcad计算书免费下载

环路补偿的九种类型-mathcad计算书免费下载 通过网盘分享的文件&#xff1a;环路补偿的9种类型.xmcd 链接: https://pan.baidu.com/s/1QIwsKsbv-WyyYgGc4P1eqg?pwd4sar 提取码: 4sar --来自百度网盘超级会员v3的分享...

【极速版 -- 大模型入门到进阶】LORA:大模型轻量级微调

文章目录 &#x1f30a; 有没有低成本的方法微调大模型&#xff1f;&#x1f30a; LoRA 的核心思想&#x1f30a; LoRA 的初始化和 r r r 的值设定&#x1f30a; LoRA 实战&#xff1a;LoraConfig参数详解 论文指路&#xff1a;LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE M…...

六十天前端强化训练之第三十二天之Babel 转译配置大师级深度讲解

欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗&#xff0c;谢谢大佬&#xff01; 目录 一、核心概念与知识体系详解 1. Babel 工作原理全景解析 二、完整配置方案&#xff08;带详细注释&#xff09; 1. 进阶版 .babelrc 配置 2. Webpack 集成配置&#xff08…...

nginx部署前端项目(linux、docker)

引言 在CentOS 7系统上使用docker安装nginx&#xff0c;使用nginx部署一个由Vue开发、打包的项目 docker安装nginx 这里不多赘述&#xff0c;直接上docker-compose.yml代码 nginx:container_name: nginximage: nginx:1.27.2ports:- "80:80"volumes:- /docker/ngin…...

支付页面安全与E-Skimming防护----浅谈PCI DSS v4.0.1要求6.4.3与11.6.1的实施

关键词&#xff1a;支付页面安全、E-Skimming、PCI DSS v4.0.1、第三方脚本、风险管理、持卡人数据、数据安全、第三方服务提供商、TPSP、内容安全、网页监控、恶意脚本攻击 本文为atsec和作者技术共享类文章&#xff0c;旨在共同探讨信息安全的相关话题。转载请注明&#xff…...

配置完nfs后vmware虚拟机下ubuntu/无法联网问题

背景&#xff1a;我在用imx6ull配置完nfs和tftp后&#xff0c;哪怕还原了设置也连不上网&#xff0c;网上的教程都没用&#xff0c;什么配置路由&#xff0c;配置ip&#xff0c;配置什么用户文件&#xff0c;都没用&#xff0c;最后试出来了一个方法&#xff0c;解决问题。 方法…...

【含文档+PPT+源码】基于大数据的交通流量预测系统

项目介绍 本课程演示的是一款基于大数据的交通流量预测系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项目附带的源码…...

关于Qt的各类问题

目录 1、问题&#xff1a;Qt中文乱码 2、问题&#xff1a;启动时避免ComBox控件出现默认值 博客会不定期的更新各种Qt开发的Bug与解决方法,敬请关注! 1、问题&#xff1a;Qt中文乱码 问题描述&#xff1a;我在设置标题时出现了中文乱码 this->setWindowTitle("算法…...

Oracle19C的启动及停止

在 Oracle 19c 中&#xff0c;停止和启动数据库实例是常见的操作。以下是详细的步骤&#xff0c;涵盖单实例和 RAC 环境。 1. 停止 Oracle 19c 数据库实例 1.1 使用 SQL*Plus 停止数据库 连接到数据库实例&#xff1a; sqlplus / as sysdba 停止数据库&#xff1a; 正常关闭…...

端侧设备(如路由器、家庭网关、边缘计算盒子、工业网关等)的典型系统、硬件配置和内存大小

🏠 家用/工业级边缘设备硬件概览 类型常见设备示例CPU 架构内存范围操作系统类型家用路由器TP-Link、小米、华硕、OpenWrtARM Cortex-A7/A964MB~256MBOpenWrt / DD-WRT / Embedded Linux智能家庭网关华为、绿米、天猫精灵、Aqara HubARM Cortex-M/R128MB~512MBEmbedded Lin…...

tcp接发json字符串

因工作需要对接硬件设备,需要通过tcp协议接收发送字符串,而字符串里面全是json字符串,登陆用json对象发送,心跳也用json发送,设备检测到信号后自动推送的也是json字符串,只要登陆后心跳就要每过10秒发送一次,而信号的推送则是在登陆后的任意时间发生.每个json与json之间没有换行…...

string模拟实现-C++

一、目标 string函数是C中常用的库函数&#xff0c;在string中有许多操作函数&#xff0c;对于一些常用的操作函数&#xff0c;我们可以自己模拟实现一下。 实现的操作有&#xff1a; 迭代器 构造函数 拷贝构造函数 析构函数 赋值运算符重载 c_str() size() [ ]运算符重…...

uni-app AES 加密

uni-app 官网没有 加密 API 我们 可以 安装 crypto-js npm install crypto-js他会保存到项目中 node_modules import CryptoJS from ../node_modules/crypto-js //引用AES源码js const keyCode 012345678 //密钥 const ivCode 012345678 //偏移量const key CryptoJS.enc.Ut…...

【STM32】GPIO输入(按键)

目录 一、如何分辨GPIO输入使用什么电频二、输入抖动问题如何消抖三、示例代码 一、如何分辨GPIO输入使用什么电频 先看原理图 即可知道他的初始输入状态需要高电平 判断可知使用上拉输入 二、输入抖动问题如何消抖 电路图中, 按键输入有额外的电容电阻, 是为了消抖 消抖方…...

Manus AI 与多语言手写识别技术解析

Manus AI 与多语言手写识别技术解析 Manus AI 是一家专注于人工智能技术的公司&#xff0c;其多语言手写识别技术在多个领域展现了强大的应用潜力。本文将从技术原理、应用场景、优势与挑战等方面&#xff0c;深入解析 Manus AI 的多语言手写识别技术。 1. 技术原理 (1) 手写…...

每日总结3.28

蓝桥刷题 3227 找到最多的数 方法一&#xff1a;摩尔投票法 #include <bits/stdc.h> using namespace std; #define int long long signed main() { int n,m; cin>>n>>m; int a[m*n]; for(int i0;i<n*m;i) { cin>>a[i]; } int cand…...

NX二次开发刻字功能——预览功能

这个预览功能其实在NX软件中很常见,有利于建模者确定刻字的位置,这个功能早在唐康林老师的超级长方体教程中出现过。我只是学以致用。把该功能集成刻字中。 在勾选预览的同时,如果点击放大镜也就是显示预览结果,要刻字的对象透明度数值为70,同时预览结果文字会变成撤销,如…...

算法 | 2024最新算法:鳑鲏鱼优化算法原理,公式,应用,算法改进研究综述,matlab代码

2024最新鳑鲏鱼优化算法(BFO)研究综述 鳑鲏鱼优化算法(Bitterling Fish Optimization, BFO)是2024年提出的一种新型群智能优化算法,受鳑鲏鱼独特的繁殖行为启发,通过模拟其交配、产卵和竞争机制进行全局优化。该算法在多个领域展现出优越性能,尤其在解决复杂非线性问题中…...

WPF基础知识(续)

六、WPF 中的样式和模板 样式定义&#xff1a; 可以在 XAML 中定义样式来统一 UI 元素的外观和风格。样式可以定义在资源字典中&#xff0c;也可以直接在窗口或控件的Resources属性中定义。例如&#xff0c;定义一个按钮的样式&#xff1a; <Window.Resources><Sty…...

Go 语言 sync 包使用教程

Go 语言 sync 包使用教程 Go 语言的 sync 包提供了基本的同步原语&#xff0c;用于在并发编程中协调 goroutine 之间的操作。 1. 互斥锁 (Mutex) 互斥锁用于保护共享资源&#xff0c;确保同一时间只有一个 goroutine 可以访问。 特点&#xff1a; 最基本的同步原语&#x…...

MybatisPlus(SpringBoot版)学习第四讲:常用注解

目录 1.TableName 1.1 问题 1.2 通过TableName解决问题 1.3 通过全局配置解决问题 2.TableId 2.1 问题 2.2 通过TableId解决问题 2.3 TableId的value属性 2.4 TableId的type属性 2.5 雪花算法 1.背景 2.数据库分表 ①垂直分表 ②水平分表 1>主键自增 2>取…...

集成开发环境革新:IntelliJ IDEA与Cursor AI的智能演进

集成开发环境革新&#xff1a;IntelliJ IDEA 与 Cursor AI 的智能演进 集成开发环境&#xff08;IDE&#xff09; 是软件开发者必不可少的工具。一个优秀的 IDE 不仅能够帮助编写和调试代码&#xff0c;还能集成版本控制和代码优化等多种功能。如今&#xff0c;随着人工智能&a…...

Qt弹出新窗口并关闭(一个按钮)

参考&#xff1a;Qt基础 练习&#xff1a;弹出新窗口并关闭的两种实现方式&#xff08;两个按钮、一个按钮&#xff09;_qt打开一个窗口另一个关闭-CSDN博客 实现&#xff1a; 一个按钮&#xff0c;点击一次&#xff0c;按钮的名字从open window变为close window&#xff0c;…...

暴力搜索算法详解与TypeScript实战

# 暴力搜索算法详解与TypeScript实战## 什么是暴力搜索&#xff1f;暴力搜索&#xff08;Brute Force Search&#xff09;是算法领域最基础的解题方法之一&#xff0c;其核心思想是**系统性地枚举所有可能的候选解**&#xff0c;并验证每个候选解是否满足问题条件。这种方法不依…...

[识记]Mysql8 远程授权

今天在测试docker时&#xff0c;因更换为Mysql8&#xff0c;使用SQL方式实现远程授权&#xff0c;其方式方法同于Mysql&#xff0c;但语句稍有不同&#xff0c;仅供参考。 登录mysql mysql -u root -p 输入密码: [请依据交互输入你的mysql密码]切换数据库 use mysql;选择需要…...

5.1 WPF路由事件以及文本样式

一、路由事件 WPF中存在一种路由事件&#xff08;routed event&#xff09;&#xff0c;该事件将发送到包含该控件所在层次的所有控件&#xff0c;如果不希望继续向更高的方向传递&#xff0c;只要设置e.Handled true即可。 这种从本控件-->父控件->父的父控件的事件&am…...

做规控算法时用到的一些简单函数和功能(c++)(持续更新中)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、将偏航角转换为四元数二、RCLCPP_INFO_STREAM(rclcpp::get_logger("mission_planner"),"&#xff08;打印标志位&#xff09;"<<…...

android studio 运行flutter项目

在Android Studio中运行Flutter项目 简介 Flutter是一个流行的跨平台移动应用开发框架&#xff0c;而Android Studio是一种强大的集成开发环境&#xff0c;支持Flutter开发。本文将介绍如何在Android Studio中运行Flutter项目&#xff0c;让开发者能够更加方便地进行Flutter应…...

如何用 Postman 进行高效的 Mock 测试?

Postman 是一个强大的 API 开发和测试工具&#xff0c;它可以让你轻松地创建和发送各种 HTTP 请求&#xff0c;查看响应结果&#xff0c;并进行调试和优化。但是有时候&#xff0c;你可能还没有开发好后端服务&#xff0c;或者想要模拟不同的响应场景&#xff0c;这时候就可以使…...

1718_js事件

目录 事件基础 一 DOM0级事件 1.1添加事件 1.2删除事件 二 DOM2级事件 2.1 添加事件 2.2 移除事件 三 常见的鼠标事件 四 其他事件 五 事件对象 5.1 获取事件对象 5.2 兼容写法 六 七、键盘事件 7.2键盘码 7.3 组合键 八、事件对象的属性 九、 事件冒泡 十…...

OpenCV图像输入输出模块imgcodecs

《OpenCV计算机视觉开发实践&#xff1a;基于Python&#xff08;人工智能技术丛书&#xff09;》(朱文伟&#xff0c;李建英)【摘要 书评 试读】- 京东图书 要处理图像&#xff0c;第一步就是把图像文件从磁盘上读取到内存&#xff0c;处理完毕后再保存到内存&#xff0c;所以…...

OAS光学分析软件 | 高光束反射器设计案例

简介 在光学设计领域&#xff0c;满足特定的光束要求并符合相关标准规范是设计的关键目标。本次设计旨在借助 OAS 光学分析软件&#xff0c;打造一个符合欧洲经委会&#xff08;ECE&#xff09;规定的高光束反射器。欧洲经委会对狭窄宽度&#xff08;高&#xff09;波束图案有…...

检查指定的IP地址和端口号是否可以连接

是的&#xff0c;Socket 类可以直接用来检查指定的IP地址和端口号是否可以连接。以下是一个简单的Java代码示例&#xff0c;展示如何使用 Socket 类来检查连接是否可用&#xff1a; import java.net.Socket; import java.net.UnknownHostException; public class NetworkCheck…...

【商城实战(93)】商城高并发实战:分布式锁与事务处理深度剖析

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

【C++】模拟实现一颗二叉搜索树

❤️欢迎来到我的博客❤️ 前言 搜索二叉树是在二叉树的基础上加了一个特征&#xff1a;左子树的所有节点都小于根&#xff0c;右子树的所有节点都大于根&#xff08;每一颗子树都要满足&#xff09; 因为这个特性的存在&#xff0c;使得他特别擅长搜索数据 比如我要寻找10&a…...

vue 点击放大,图片预览效果

背景&#xff1a; 在vue框架element组件的背景下&#xff0c;我们对图片点击放大(单张)&#xff1b;如果是多张图片&#xff0c;要支持左右滑动查看多张图片(多张)。 图片单张放大&#xff0c;el-image图片组件&#xff0c;或者原生的img标签。previewSrcList string[单个] 图片…...

AI知识补全(七):AI Agent 智能代理是什么?

名人说&#xff1a;人生如逆旅&#xff0c;我亦是行人。 ——苏轼《临江仙送钱穆父》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;AI知识补全&#xff08;六&#xff09;&#xff1a;RLHF 人类反馈…...

Java 中各种锁的使用详解

Java 锁的使用详解 Java 提供了多种锁机制来处理并发编程中的同步问题。下面我将通过代码示例来展示各种锁的使用方法和特点。 锁的选择指南 以下是选择合适锁的指南&#xff1a; 基本锁类型演示 // 由于这是在 Node.js 环境中模拟 Java 锁的概念&#xff0c;我们将使用注释…...

【GreenHills】GHS解决客户端在连接的时候提示在黑名单

1、 文档目标 解决GHS网络版客户在客户端连接的时候出现黑名单的问题 2、 问题场景 用于解决GHS的网络版客户在搭建完服务端后&#xff0c;客户端去连接服务的时候出现提示“在黑名单中”等情况&#xff08;如图2-1和图2-2&#xff09;。但是在服务器上面并没有设置黑名单。 …...

智能运维时代的网络拓扑管理:乐维监控的架构可视化实践

在数字化转型的浪潮中&#xff0c;企业IT基础设施正经历着前所未有的复杂化进程。当数以千计的网络设备、服务器、存储系统构成庞大网络体系时&#xff0c;如何实现全局可视化管理已成为企业数字化转型的关键命题。乐维监控网络拓扑系统作为新一代智能运维平台的核心组件&#…...

GitHub美化个人主页3D图表显示配置操作

这个功能主要是用的这个开源仓库&#xff1a;https://github.com/yoshi389111/github-profile-3d-contrib 想看效果的话&#xff0c;我的个人主页&#xff1a;https://github.com/Sjj1024 开始操作 1.创建自己的github主页属性项目——跟你github用户名一致即可&#xff0c;…...

Arduino示例代码讲解:Serial Event example 连续事件例子

Arduino示例代码讲解:Serial Event example 连续事件例子 Serial Event example 连续事件例子功能概述硬件部分:软件部分:代码逐行解释定义变量`setup()` 函数`loop()` 函数`serialEvent()` 函数工作原理Serial Event example 连续事件例子 这段代码是一个Arduino示例程序,…...

Java基础关键_031_反射(一)

目 录 一、概述 二、获取 Class 的三种方式 1.Class.forName("完整全限定类名") 2.getClass() 3.class 属性 三、通过反射机制实例化对象 1.newInstance()&#xff08;已过时&#xff09; 2.配置文件利用反射机制实例化对象 四、反射 Class 的 Field 1.获取 P…...

verilog/systemverilog中的位序问题

verilog或者systemverilog中在使用位选择时&#xff0c;必须按照定义的大小端顺序进行位选操作&#xff0c;比如定义了reg [11:0] data&#xff0c;在使用data的中间4位时&#xff0c;必须使用data[7:4]&#xff0c;不能使用data[4:7]。 如下示例&#xff1a; module tb;reg […...

JVM考古现场(十三):混沌重启——从量子永生到宇宙热寂的终极编译

开篇&#xff1a;鸿蒙初判熵火燎原"诸君可曾窥见《诛仙剑阵》终章里那冻结的量子递归&#xff1f;当Project Omega的热寂算法冰封时空熵增&#xff0c;当意识编译器的玻尔兹曼大脑撕裂熵障&#xff0c;此刻我们将踏碎归墟晶壁&#xff0c;在第十三维度叩问&#xff1a;从代…...

CARLA常见技术问题集锦(一)地图与场景构建篇

编者荐语&#xff1a; 在自动驾驶技术加速落地的今天&#xff0c;CARLA 仿真引擎凭借其开源生态与高保真仿真能力&#xff0c;已成为全球开发者构建智能驾驶算法的核心工具之一。随着虚幻引擎 5.5 的全面升级&#xff0c;CARLA 0.10.0 版本实现了视觉革命&#xff1a;Lumen 全…...

视图、MySQL、触发器、存储过程、流程控制语句

DAY19.1 Java核心基础 MySQL 视图 数据库中的一张虚拟的表&#xff0c;允许不同用户和不同程序以不同的方式查询同一张表的数据 基于数据表&#xff0c;创建一个虚拟的表&#xff0c;然后可以选择需要展示的字段 为不同的用户创建不同的视图&#xff0c;一个视图包含薪资&…...

多层感知机(MLP)全面指南

多层感知机(MLP) 是一种人工神经网络,由多个神经元层组成。MLP中的神经元通常使用非线性激活函数,使得网络能够学习数据中的复杂模式。MLP 在机器学习中非常重要,因为它能够学习数据中的非线性关系,使其成为分类、回归和模式识别等任务中的强大模型。 神经网络基础 神经…...

【第13届蓝桥杯C/C++B组省赛】顺子日期

答案&#xff1a;14 1.数组办法解决 思路&#xff1a;前四个元素已经确定&#xff0c;分别枚举其他元素的合法性 #include <stdio.h> int main() {int a[8] {2,0,2,0,0,0,0,0};int month[13]{0,31,28,31,30,31,30,31,31,30,31,30,31};int i,j;int count 0;for(i 1;…...