SpringMVC 的三种异常处理方式详解
目录
1. 什么是异常
2. 为什么要全局异常处理
3. SpringMVC异常分类
4. 异常处理思路
5. 三种异常处理方式示例
① 配置 SimpleMappingExceptionResolver 处理器
② 实现 HandlerExceptionResolver 接口
③ 使用@ControllerAdvice+@ExceptionHandler实现全局异常
6. 响应封装类
1. 什么是异常
见字如意,就是编码时所报的错误。异常主要分为两种:编译时异常和运行时异常RuntimeException。前者在编码时如不符合规范代码就会报红,是肉眼也看到的错,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。
在Spring MVC中,异常处理是指对在请求处理过程中可能发生的异常情况进行捕获、处理和响应的机制。它能将所有类型的异常处理从各处理过程解耦出来,既保证了相关处理过程的功能较单一,也实现了异常信息的统一处理和维护。
2. 为什么要全局异常处理
在开发中,不管是dao层、service层还是controller层,都有可能抛出异常。使用全局异常处理有以下几个优点:
-
统一的异常处理逻辑:通过全局异常处理,可以将应用程序中的异常处理逻辑集中到一个地方,避免在每个具体的业务代码中都编写相同或类似的异常处理代码。这样可以提高代码的可维护性,减少代码冗余,使代码更加清晰和易于理解。
-
提高系统的容错性:全局异常处理可以捕获应用程序中的未处理异常,避免异常的传递导致应用程序崩溃或出现未知错误。通过合理地处理异常,可以使系统在出现异常时保持稳定并继续正常运行,提高系统的容错性和健壮性。
-
统一的异常返回格式:全局异常处理可以定义统一的异常返回格式,将异常信息以一致的方式返回给客户端或用户。这样可以提供更友好和一致的错误提示,改善用户体验,并便于客户端对异常进行处理和展示。
-
安全性和安全漏洞的处理:全局异常处理可以捕获和处理应用程序中的安全漏洞或异常情况,例如未授权访问、非法操作等。通过适当的异常处理,可以防止一些潜在的安全问题,提高系统的安全性和防护能力。
-
异常日志记录和监控:全局异常处理可以统一记录应用程序中的异常信息,包括异常类型、发生位置、请求参数等,便于后续的异常分析、故障排查和系统监控。通过对异常进行有效的记录和监控,可以及时发现和解决潜在的问题,提高系统的可靠性和稳定性。
总的来说,全局异常处理能够提高系统的可维护性、容错性和安全性,提供更好的用户体验,方便系统的监控和问题排查。在开发应用程序时,合理利用全局异常处理机制可以有效地处理异常情况,保证应用程序的稳定。
3. SpringMVC异常分类
在Spring MVC中,异常可以分为两类:应用程序异常和系统异常。
-
应用程序异常:应用程序异常是指由应用程序自身业务逻辑引发的异常,通常是预期的异常情况。这些异常可以根据具体业务需求进行分类,例如用户输入验证失败、资源未找到、权限不足等。应用程序异常可以通过自定义异常类来表示,可以添加自定义的异常信息,以便更好地理解异常原因和处理异常。
-
系统异常:系统异常是指由系统运行环境或外部因素引发的异常,通常是非预期的异常情况。这些异常可能包括数据库连接失败、网络连接异常、服务器内部错误等。系统异常是无法通过应用程序自身的逻辑来解决的,需要通过合适的异常处理机制来捕获和处理。
在Spring MVC中,可以通过合理的异常分类和处理机制来对应用程序异常和系统异常进行区分和处理。通常,应用程序异常可以通过@ExceptionHandler
注解或自定义的异常处理器来处理,而系统异常可以通过全局异常处理器(HandlerExceptionResolver
接口的实现)来捕获和处理。这样可以实现对不同类型异常的精细处理,提高系统的可靠性和用户体验。
4. 异常处理思路
系统的dao、service、controller出现异常都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理。springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。
-
确定异常处理的范围和层级:首先,需要确定异常处理的范围,即异常处理应该放在哪个层级。在Spring MVC中,异常处理可以发生在Controller层、Service层或DAO层,具体取决于你的应用架构和需求。一般来说,应用程序异常可以在Controller层处理,而系统异常可以在全局异常处理器中处理。
-
定义异常类:根据你的应用程序需求,可以定义自定义的异常类来表示不同类型的异常。自定义异常类可以继承自
Exception
或RuntimeException
,并添加适当的属性和方法,以便更好地描述异常信息。例如,你可以定义一个ValidationException
来表示用户输入验证失败的异常。 -
异常捕获和处理:在代码中,使用
try-catch
块来捕获可能发生的异常,并在catch
块中进行相应的处理。对于应用程序异常,可以在Controller层的方法中使用@ExceptionHandler
注解来捕获和处理特定类型的异常。对于系统异常,可以在全局异常处理器中实现HandlerExceptionResolver
接口,并在resolveException
方法中进行异常处理逻辑。 -
异常处理逻辑:在异常处理逻辑中,你可以根据具体的异常类型采取适当的处理措施。例如,对于应用程序异常,可以返回特定的错误页面或错误信息给用户,或者记录异常日志以便后续分析。对于系统异常,可以返回一个通用的错误页面或错误信息,或者进行一些系统级的异常处理操作。
-
异常信息传递和展示:在异常处理过程中,你可以将异常信息传递给前端页面或其他组件进行展示。可以通过
ModelAndView
对象、@ResponseBody
注解或其他方式来传递异常信息。在展示异常信息时,可以根据具体需求进行格式化,以便用户能够清晰地理解异常原因。 -
单元测试和异常模拟:为了验证异常处理的正确性,建议编写相应的单元测试,并模拟各种异常情况。通过单元测试,可以确保异常处理逻辑的正确性和稳定性。
总结来说,异常处理的思路是根据异常类型进行分类,确定异常处理的范围和层级,定义自定义异常类,捕获和处理异常,并根据具体情况进行异常处理逻辑和异常信息展示。通过合理的异常处理,可以提高系统的可靠性。
5. 三种异常处理方式示例
在演示下面之前我们现在没有进行异常处理事如何报错的:
1. 随便在那个方法或者controller手动写一个错误信息
2. 运行该路径
这就是没有经过任何异常处理的错误信息,如果将这个界面回显给客户当然是不可观的,请继续往下看。
① 配置 SimpleMappingExceptionResolver 处理器
SpringMVC中自带了一个异常处理器叫SimpleMappingExceptionResolver,该处理器实现了HandlerExceptionResolver 接口,全局异常处理器都需要实现该接口。
1. spring-mvc.xml:
<!-- springmvc提供的简单异常处理器 --><bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"><!-- 定义默认的异常处理页面 --><property name="defaultErrorView" value="error"/><!-- 定义异常处理页面用来获取异常信息的变量名,也可不定义,默认名为exception --><property name="exceptionAttribute" value="xw"/><!-- 定义需要特殊处理的异常,这是重要点 --><property name="exceptionMappings"><props><prop key="java.lang.RuntimeException">error</prop></props><!-- 还可以定义其他的自定义异常 --></property></bean>
注:页面跳转由SpringMVC来接管了,所以此处的定义默认的异常处理页面都应该配置成逻辑视图名。
2. 创建error.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
<%--错误信息--%>
${xw}<br>
<img src="static/imgs/R.jpg">
</body>
</html>
配置异常处理后的界面:
② 实现 HandlerExceptionResolver 接口
1. 创建一个名为GlobalException的自定义异常类,它继承自RuntimeException类。
在Java中,自定义异常类通常需要继承自Exception类或其子类。RuntimeException是Exception的一个子类,它表示在程序执行过程中可能会发生的异常情况。通过继承RuntimeException类,GlobalException可以被视为一个非受检异常(unchecked exception),即在方法签名中不需要显式声明或捕获。
GlobalException类提供了多个构造函数,用于创建不同类型的异常对象。每个构造函数都调用了父类RuntimeException的相应构造函数,以便将异常信息传递给父类进行处理。
package com.ycxw.exception;public class GlobalException extends RuntimeException {public GlobalException() {}public GlobalException(String message) {super(message);}public GlobalException(String message, Throwable cause) {super(message, cause);}public GlobalException(Throwable cause) {super(cause);}public GlobalException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}
}
通过提供不同的构造函数,GlobalException类可以在不同的情况下创建异常对象,并传递相关的异常信息和原因。
自定义异常类的好处在于可以根据应用程序的需求,定义特定类型的异常,以便更好地描述和处理不同的异常情况。在代码中,当某个方法或操作发生异常时,可以抛出GlobalException对象,并在上层进行相应的异常处理逻辑。
2. 定义了一个名为GlobalExceptionHandler的类,并实现了HandlerExceptionResolver接口。同时,使用@Component注解将该类标记为一个Spring组件,以便在应用程序中进行自动扫描和注册。
@Component
public class GlobalExceptionHandler implements HandlerExceptionResolver {@Overridepublic ModelAndView resolveException(HttpServletRequest httpServletRequest,HttpServletResponse httpServletResponse,Object o, Exception e) {ModelAndView mv = new ModelAndView();mv.setViewName("error");if (e instanceof GlobalException){GlobalException globalException = (GlobalException) e;mv.addObject("xw",globalException.getMessage());mv.addObject("msg","全局异常....");}else if (e instanceof RuntimeException){RuntimeException runtimeException = (RuntimeException) e;mv.addObject("xw",runtimeException.getMessage());mv.addObject("msg","运行时异常....");}return mv;}
}
- 这段代码定义了一个名为GlobalExceptionHandler的类,并实现了HandlerExceptionResolver接口。同时,使用@Component注解将该类标记为一个Spring组件,以便在应用程序中进行自动扫描和注册。
- HandlerExceptionResolver接口是Spring MVC框架提供的用于处理异常的接口。通过实现该接口,可以自定义全局异常处理器,用于捕获和处理在请求处理过程中产生的异常。
- 在代码中,resolveException方法是HandlerExceptionResolver接口的一个方法,用于处理异常。它接受HttpServletRequest、HttpServletResponse、Object和Exception等参数,并返回一个ModelAndView对象。
- 在方法内部,首先创建了一个空的ModelAndView对象mv。然后,设置了视图的名称为"error",这意味着当发生异常时,将渲染名为"error"的视图。
- 接下来,通过instanceof判断异常的类型,进行不同的处理逻辑。如果异常是GlobalException类型,将异常信息和自定义的"全局异常...."消息添加到mv对象中。如果异常是RuntimeException类型,将异常信息和"运行时异常...."消息添加到mv对象中。
- 最后,将mv对象返回,以便框架将其渲染并返回给客户端。
通过实现HandlerExceptionResolver接口并定义resolveException方法,可以自定义全局异常处理逻辑,并在应用程序中统一处理异常情况。这样可以提供更好的用户体验,并减少代码中重复的异常处理代码。
利用上一个报错信息:
3. 抛出一个全局错误信息
③ 使用@ControllerAdvice+@ExceptionHandler实现全局异常
定义了一个名为GlobalExceptionResolver的类,并使用@ControllerAdvice注解将其标记为一个全局异常处理器。
package com.ycxw.exception;import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;import java.util.HashMap;
import java.util.Map;@ControllerAdvice
public class GlobalExceptionResolver {// 返回错误json数据@ResponseBody@ExceptionHandlerpublic Map handler(Exception e){Map map = new HashMap();if (e instanceof GlobalException){GlobalException globalException = (GlobalException) e;map.put("xw",globalException.getMessage());map.put("msg","全局异常....");}else if (e instanceof RuntimeException){RuntimeException runtimeException = (RuntimeException) e;map.put("xw",runtimeException.getMessage());map.put("msg","运行时异常....");}else {map.put("xw",e.getMessage());map.put("msg","其它异常....");}return map;}
}
- @ControllerAdvice是Spring MVC框架提供的注解,用于定义全局控制器增强。通过使用@ControllerAdvice注解,可以将该类应用于所有的控制器中,并提供统一的异常处理逻辑。
- 在代码中,使用@ResponseBody注解将handler方法标记为返回JSON数据的方法。@ExceptionHandler注解用于指定该方法处理的异常类型。
- handler方法接受一个Exception类型的参数e,并返回一个Map对象。在方法内部,根据异常的类型进行不同的处理逻辑。
- 如果异常是GlobalException类型,将异常信息和自定义的"全局异常...."消息添加到map对象中。如果异常是RuntimeException类型,将异常信息和"运行时异常...."消息添加到map对象中。如果异常不属于上述两种类型,将异常信息和"其它异常...."消息添加到map对象中。
- 最后,将map对象作为JSON数据返回给客户端。
通过使用@ControllerAdvice注解和@ExceptionHandler注解,可以自定义全局异常处理逻辑,并将异常信息以JSON格式返回给客户端。这样可以提供更好的错误处理和异常信息展示方式。
6. 响应封装类
响应封装类的作用是将响应数据进行统一的封装和格式化,以便在应用程序中进行统一的处理和返回给客户端。
- 通常,在一个应用程序中,不同的接口可能返回不同的数据结构和格式。这样会导致客户端在处理响应数据时需要编写大量的重复代码来解析和处理不同的响应格式,增加了开发和维护的复杂性。
- 为了解决这个问题,可以使用响应封装类来对响应数据进行统一的封装。响应封装类通常是一个自定义的类,其中包含了与响应相关的信息,如状态码、消息、数据等。
- 通过将响应数据封装到一个固定的数据结构中,可以使得所有的接口返回的响应数据格式保持一致。这样客户端只需要针对统一的响应数据结构进行处理,而不需要关注不同接口的具体返回格式。
- 响应封装类还可以提供额外的功能,如异常处理、错误码定义、多语言支持等。通过在响应封装类中定义统一的异常处理逻辑,可以捕获和处理应用程序中的异常,并将异常信息封装到响应数据中返回给客户端。同时,可以在响应封装类中定义错误码,并根据错误码进行国际化处理,以支持多语言环境下的错误提示。
总之,响应封装类的作用是提供一个统一的响应数据格式,简化客户端的处理逻辑,提供额外的功能如异常处理和多语言支持,并提高应用程序的可维护性和可扩展性。
例如:
package com.ycxw.utils;import java.util.HashMap;public class R extends HashMap {public R data(String key, Object value) {this.put(key, value);return this;}public static R ok(int code, String msg) {R r = new R();r.data("success", true).data("code", code).data("msg", msg);return r;}public static R error(int code, String msg) {R r = new R();r.data("success", false).data("code", code).data("msg", msg);return r;}public static R ok(int code, String msg,Object data) {R r = new R();r.data("success", true).data("code", code).data("msg", msg).data("data", data);return r;}public static R ok(int code, String msg, long count, Object data) {R r = new R();r.data("success", true).data("code", code).data("msg", msg).data("count", count).data("data", data);return r;}
}
编写统一响应方法:
// 响应封装类@ResponseBody@ExceptionHandlerpublic R handler(Exception e){if (e instanceof GlobalException){GlobalException globalException = (GlobalException) e;return R.ok(505,"全局异常....",globalException.getMessage());}else if (e instanceof RuntimeException){RuntimeException runtimeException = (RuntimeException) e;return R.ok(505,"运行时异常....",runtimeException.getMessage());}else {return R.ok(505,"其他异常....",e.getMessage());}}
运行测试:
相关文章:

SpringMVC 的三种异常处理方式详解
目录 1. 什么是异常 2. 为什么要全局异常处理 3. SpringMVC异常分类 4. 异常处理思路 5. 三种异常处理方式示例 ① 配置 SimpleMappingExceptionResolver 处理器 ② 实现 HandlerExceptionResolver 接口 ③ 使用ControllerAdviceExceptionHandler实现全局异常 6. 响应…...

莫比乌斯召回系统介绍
当前召回系统只能召回相关性高的广告,但不能保证该广告变现能力强。莫比乌斯做了如下两点创新: 在召回阶段,引入CPM等业务指标作为召回依据在召回阶段,引入CTR模型,从而召回更多相关性高且变现能力强的广告 参考 百度…...

使用ASM修改组件化 ARouter
工程目录图 1. apt生成的字节码文件 2. asm 生成的代码 请点击下面工程名称,跳转到代码的仓库页面,将工程 下载下来 Demo Code 里有详细的注释 代码:TestCompont...

第21章_瑞萨MCU零基础入门系列教程之事件链接控制器ELC
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...

(二十八)大数据实战——Flume数据采集之kafka数据生产与消费集成案例
前言 本节内容我们主要介绍一下flume数据采集和kafka消息中间键的整合。通过flume监听nc端口的数据,将数据发送到kafka消息的first主题中,然后在通过flume消费kafka中的主题消息,将消费到的消息打印到控制台上。集成使用flume作为kafka的生产…...

vue3:22、vue-router的使用
import { createRouter, createWebHistory } from vue-router//history模式:createWebHistory //hash模式:createWebHashHistory//vite中的环境变量 import.meta.env.BASE_URL 就是vite.config.js中的base配置项 const router createRouter({history:…...

深入理解JVM虚拟机第五篇:一些常用的JVM虚拟机(二)
文章目录 一:JRockit VM的介绍 二:J9 VM的介绍 三:KVM和CDC/CLDC Hotspot 四:Azul VM的介绍 五:Liquid VM的介绍 六:Apache Harmoney 七:Microsoft JVM 八:Taobao JVM 九&a…...

导数公式及求导法则
目录 基本初等函数的导数公式 求导法则 有理运算法则 复合函数求导法 隐函数求导法 反函数求导法 参数方程求导法 对数求导法 基本初等函数的导数公式 基本初等函数的导数公式包括: C0(x^n)nx^(n-1)(a^x)a^x*lna(e^x)e^x(loga(x))1/(xlna)(lnx)1/x(sinx)cos…...

SpringMVC系列(六)之JSON数据返回以及异常处理机制
目录 前言 一. JSON概述 二. JSON数据返回 1. 导入pom依赖 2. 添加配置文件(spring-mvc.xml) 3. ResponseBody注解使用 4. 效果展示 5. Jackson介绍 三. 全局异常处理 1. 为什么要全局异常处理 2. 异常处理思路 3. 异常处理方式一 4. 异常处…...

民安智库(北京第三方窗口测评)开展汽车消费者焦点小组座谈会调查
民安智库近日开展了一场汽车消费者焦点小组座谈会,旨在深入了解目标消费者对汽车功能的需求和消费习惯,为汽车企业提供有针对性的解决方案。 在焦点小组座谈会中,民安智库公司(第三方市容环境指数测评)邀请了一群具有…...

【CVPR2021】MVDNet论文阅读分析与总结
Challenge: 现有的目标检测器主要融合激光雷达和相机,通常提供丰富和冗余的视觉信息 利用最先进的成像雷达,其分辨率比RadarNet和LiRaNet中使用的分辨率要细得多,提出了一种有效的深度后期融合方法来结合雷达和激光雷达信号。 MV…...

IDEA指定Maven settings file文件未生效
背景:在自己电脑上配置的时候,由于公司项目和我自己的项目的Maven仓库不一致,我就在项目中指定了各自的Maven配置文件。但是我发现公司的项目私有仓库地址IDEA总是识别不到! 俩个配置文件分别是: /Users/sml/Mine/研发…...

swift UI 和UIKIT 如何配合使用
SwiftUI和UIKit可以在同一个iOS应用程序中配合使用。它们是两个不同的用户界面框架,各自有自己的优势和特点。在现实开发中,很多iOS应用程序并不是一开始就完全采用SwiftUI或UIKit,而是根据需要逐步引入SwiftUI或者使用两者共存。 SwiftUI的…...

c语言练习题55:IP 地址⽆效化
IP 地址⽆效化 题⽬描述: 给你⼀个有效的 IPv4 地址 address ,返回这个 IP 地址的⽆效化版本。 所谓⽆效化 IP 地址,其实就是⽤ "[.]" 代替了每个 "."。 • ⽰例 1: 输⼊:address "1.1.1.…...

nvidia-persistenced 常驻
本文地址:blog.lucien.ink/archives/542 发现每次执行 nvidia-smi 都特别慢,发现是需要 nvidia-persistenced 常驻才可以,这个并不会在安装完驱动之后自动配置,需要手动设置一个自启。 cat <<EOF >> /etc/systemd/sy…...

leetcode 42, 58, 14(*)
42. Trapping Rain Water 1.暴力解法(未通过) class Solution { public:int trap(vector<int>& height) {int n height.size();int res 0;for(int i0; i<n; i){int r_max 0, l_max 0;for(int j i; j<n; j)r_max max(r_max, heigh…...

SpringCloud-微服务CAP原则
接上文 SpringCloud-Config配置中心 到此部分即微服务的入门。 总的来说,数据存放的节点数越多,分区容忍性就越高,但要复制更新的次数就越多,一致性就越难保证。同时为了保证一致性,更新所有节点数据所需要的时间就…...

K8S:Yaml文件详解
目录 一.Yaml文件详解 1.Yaml文件格式 2.YAML 语法格式 二.Yaml文件编写及相关概念 1.查看 api 资源版本标签 2.yaml编写案例 (2)Deployment类型编写nginx服务 (3)k8s集群中的port介绍 (5)快速编写yaml文件 …...

机器人连续位姿同步插值轨迹规划—对数四元数、b样条曲线、c2连续位姿同步规划
简介:Smooth orientation planning is benefificial for the working performance and service life of industrial robots, keeping robots from violent impacts and shocks caused by discontinuous orientation planning. Nevertheless, the popular used quate…...

三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析
三维模型3DTile格式轻量化压缩的遇到常见问题与处理方法分析 三维模型的轻量化压缩是一项技术挑战,特别是在处理复杂的3DTile格式时。下面列举了一些处理过程中可能遇到的常见问题以及相应的处理方法: 模型精度损失:在进行压缩处理时&#x…...

2023-简单点-开启防火墙后,ping显示请求超时;windows共享盘挂在不上
情景描述 树莓派 挂载 windows共享盘 之前一直可以,突然有一天不行了 ping xxxx不通了 一查,或许是服务器被同事开了防火墙,默认关闭了ping的回显 操作: 开启ping回显cmd ping通了,但是挂载还是不行, 显示 dmesg命…...

华为Java工程师面试题
常见问题: 什么是Java虚拟机(JVM)?它与现实中的计算机有什么不同?Java中的基本数据类型有哪些?它们的范围是什么?什么是引用类型?Java中的引用类型有哪些?什么是对象&am…...

大数据Flink(七十四):SQL的滑动窗口(HOP)
文章目录 SQL的滑动窗口(HOP) SQL的滑动窗口(HOP) 滑动窗口定义:滑动窗口也是将元素指定给固定长度的窗口。与滚动窗口功能一样,也有窗口大小的概念。不一样的地方在于,滑动窗口有另一个参数控制窗口计算的频率(滑动窗口滑动的步长)。因此,如果滑动的步长小于窗口大…...

Hystrix和Sentinel熔断降级设计理念
目录 1 基本介绍2 Hystrix信号量和线程池区别2.1 信号量模式2.2 线程池模式2.3 注意 3 Sentinel介绍 1 基本介绍 Sentinel 和 Hystrix 的原则是一致的: 当检测到调用链路中某个资源出现不稳定的表现,例如请求响应时间长或异常比例升高的时候,则对这个资源…...

获取Windows 10中的照片(旧版)下载
Windows 10中的新版照片应用,目前发现无法直接打开部分iOS设备上存储的照片。需要使用照片(旧版)才行。 但目前应用商店中无法直接搜索到照片(旧版),因此笔者提供如下链接,可以直接访问并呼出W…...

【Redis】Redis作为缓存
【Redis】Redis常见面试题(2) 文章目录 【Redis】Redis常见面试题(2)1. 缓存2. Redis作为缓存2.1 缓存雪崩2.2 缓存穿透2.3 缓存击穿2.4 缓存雪崩、缓存穿透、缓存击穿的区别2.5 缓存预热2.6 如何保证缓存和MySQL双写一致 【Redis…...

IDEA(2023)解决运行乱码问题
😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。 🎆学习格言:不读书的人,思想就会停止。——狄德罗 ⛪️个人主页:进入博主主页 🗼专栏系列:无 🌼…...

零基础学前端(二)用简单案例去理解 HTML 、CSS 、JavaScript 概念
该篇适用于从零基础学习前端的小白 初学者不懂代码得含义也要坚持模仿逐行敲代码,以身体感悟带动头脑去理解新知识 一、导言 HTML,CSS,JavaScript 都是单独的语言;他们构成前端技术基础; (1)HTM…...

线性矩阵不等式(LMI)在控制理论中的应用
目录 (一)Matlab中的LMI处理工具包 (二)为什么LMI成为控制理论领域重要工具? (三)LMI在与Lyapunov不等式的关系 (1)线性矩阵不等式 (2)线性矩阵…...

如何在Python爬虫程序中使用HTTP代理?
在进行网络爬虫时,我们经常需要使用代理服务器来隐藏自己的真实IP地址,以避免被目标网站封禁或限制访问。本文将介绍如何将HTTP代理配置到Python爬虫程序中使用。 什么是HTTP代理? HTTP代理是一种网络代理,它充当客户端和服务器之…...