自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(44)
  • 收藏
  • 关注

原创 基于百度地图开放平台的地址距离校验的开发步骤

百度地图开放平台(

2024-10-16 19:34:32 681

原创 补充--Vue的生命周期钩子

Vue的生命周期钩子(Lifecycle Hooks)是Vue组件在其实例化、编译、挂载、更新、销毁等各个阶段被调用的函数。这些钩子为开发者提供了在不同阶段执行代码的机会,从而可以执行诸如数据获取、DOM操作、事件监听/移除等操作。

2024-10-16 19:29:43 312

原创 关于Vue的生命周期钩子created和mounted

created:适用于数据初始化、不依赖DOM的异步操作等场景。mounted:适用于DOM操作、依赖第三方库的初始化、需要DOM结果的外部API访问等场景。在选择使用created或mounted时,需要根据具体的需求和操作时机来决定哪个更适合。同时,也需要注意Vue的生命周期顺序和异步操作的特性,以避免出现不必要的错误或性能问题。

2024-10-16 19:29:07 419

原创 在使用Apache POI向客户端浏览器写入文件时

当你通过HTTP请求触发服务器上的一个操作时,比如导出Excel报表,服务器会执行相应的代码,但这些代码是在服务器端的环境中运行的,因此任何文件操作(如创建、读取、写入文件)都是在服务器上进行的。当你编写一个方法,特别是用于文件下载(如导出Excel报表)时,你需要能够控制响应的各个方面,包括响应的内容类型、字符集、响应头(如。但是,更常见和更高效的做法是直接生成文件内容(例如,使用Apache POI库来生成Excel文件),并将这些内容直接写入响应输出流,而不在磁盘上创建临时文件。的输出流中来实现的。

2024-10-16 19:28:18 362

原创 @RequestParam和@PathVariable,@RequestBody

用于处理URL的查询参数。用于处理URL模板变量,即从URL的路径部分提取变量。用于处理HTTP请求的正文内容,通常用于处理POST和PUT请求的非表单数据。这三个注解共同构成了Spring MVC中处理HTTP请求参数的重要机制,它们使得开发者能够灵活地处理各种HTTP请求。

2024-10-16 19:27:14 123

原创 关于Spring MVC的参数绑定

但是,通过在Controller的方法参数上使用`@RequestParam List<Long> ids`,Spring MVC能够自动地将这个字符串参数解析成一个`List<Long>`类型的集合。需要注意的是,如果你没有显式地使用`@RequestParam`注解,但在方法参数名称与请求参数名称相匹配的情况下,Spring MVC仍然会尝试进行参数绑定。然而,使用`@RequestParam`注解可以使你的代码更加清晰,特别是在处理多个请求参数时,或者当你需要自定义请求参数的名称时。

2024-10-16 19:24:58 62

原创 路径参数和Query参数(查询参数)

在Spring中,接收查询参数通常不需要特别的注解,因为Spring会自动将查询参数的值绑定到控制器方法的参数上,前提是这些参数的名称与查询参数的名称相匹配。路径参数(Path Parameters)和查询参数(Query Parameters)在Web开发中扮演着不同的角色,并且在使用Spring框架(如Spring MVC或Spring Boot)时,它们通过不同的注解来接收。虽然在这个简单的例子中可能看起来是多余的,但当你需要指定参数是可选的(通过。开始,后面跟着一系列的参数名和值,参数之间用。

2024-10-16 19:19:44 90

原创 ​channel.basicNack​ 和 ​channel.basicReject​ 之间的区别

当消费者无法处理某条消息时,它会告诉RabbitMQ丢弃这条消息(或者根据队列的配置,可能将消息重新放回队列的头部以便稍后重试)。在RabbitMQ中,处理消息确认(acknowledgment)是确保消息被正确处理的关键部分。特别是,它可以用于拒绝多条消息(虽然在实际应用中,通常一次只拒绝一条消息),并且它还支持批量处理未确认的消息。还允许你指定是否希望RabbitMQ将消息重新入队,以及是否应该将该通道上所有之前未确认的消息都标记为拒绝。这些方法主要用于消息消费时的确认和拒绝处理。

2024-10-16 19:18:56 144

原创 RabbitMQ概述

RabbitMQ是一个基于AMQP(高级消息队列协议)的开源信息代理软件(简称消息中间件),它使用Erlang语言编写,由于Erlang语言的高并发特性,RabbitMQ在性能上表现优异。RabbitMQ支持集群部署,以提高系统的可靠性和扩展性。在集群部署中,可以将多个RabbitMQ节点组合在一起,形成一个逻辑上的整体。集群中的节点可以相互通信,共同处理消息。

2024-10-16 19:18:15 555

原创 @Transactional(rollbackFor = Exception.class)​

被注解的方法或类中的所有公共方法(如果注解在类上)在执行时将被视为一个事务的边界。如果它应用于非公共方法(如受保护的、私有的或默认访问级别的方法),那么它将不会被Spring的代理所拦截,因此事务管理将不会生效。这个注解可以应用于类或方法上,以指示被注解的类或方法在执行时应该被事务管理。但是,如果某个方法也需要特定的事务属性(如不同的回滚策略),你可以在该方法上再次使用。(或其子类)的实例,那么事务将被回滚。这是一个相对宽松的策略,因为它会回滚几乎所有类型的异常导致的事务,而不仅仅是运行时异常(

2024-10-16 19:17:16 164

原创 EasyExcel.read(is, TClueDO.class, new ClueDataListener(tClueMapper)).sheet().doRead();

但知道它已经被 EasyExcel 读取完毕时),你可能需要查阅 EasyExcel 的文档或源代码来确认是否真的会自动关闭,或者考虑在调用。如果你想读取特定的工作表,可以通过传递工作表的索引(从 0 开始)或名称作为参数。可能是一个 MyBatis 的 Mapper 接口,用于将读取到的数据保存到数据库中。)会自动关闭(这取决于 EasyExcel 的内部实现,但通常是这样的)。方法后手动关闭它(尽管这通常不是必要的,因为一旦数据被读取,: 这是一个自定义的监听器,用于处理读取到的每一行数据。

2024-10-16 19:01:08 209

原创 ​insertSelective​ 和 ​insert​

这意呀着,无论你的实体对象(或DTO)中哪些字段被赋值,哪些字段为null,MyBatis都会尝试将这些字段的值插入到数据库表中。这意味着,如果实体对象中的某个字段为null,MyBatis在生成SQL语句时会自动忽略这个字段,不会尝试将其插入到数据库中。方法通常用于向数据库中插入数据,但它们之间存在一些关键的区别,主要体现在它们如何处理插入语句中的字段。方法(如果可用)适用于部分字段插入的场景,它会自动忽略为null的字段,只插入非null的字段。方法,可以考虑自定义SQL或使用其他方式实现类似的功能。

2024-10-16 19:00:14 89

原创 delete请求

虽然HTTP规范没有明确禁止在DELETE请求中包含请求体,但实践中很少这样做,因为DELETE请求的主要目的是删除资源,而不是发送新数据。总的来说,对于DELETE请求,路径参数是最常用的参数传递方式,用于标识要删除的资源。查询参数可以用于传递额外的选项或标志(如果需要的话),而请求体则应该谨慎使用,并确保它在你的API设计中是合适的。如果你决定在DELETE请求中使用请求体,请确保你的API文档清楚地说明了这一点,以便API的使用者知道如何正确地调用你的API。是一个查询参数,它是可选的,并通过。

2024-10-16 18:59:17 180

原创 nextTick函数

Vue 的响应式系统是基于异步队列的,这意味着当你改变一个响应式数据(如一个 data 属性、computed 属性或 prop)时,DOM 不会立即更新,而是会等待同一个事件循环中的所有数据变化都完成之后,再进行一次性的 DOM 更新。函数接受一个回调函数作为参数,这个回调函数会在“下次 DOM 更新循环结束之后”执行。在修改数据之后立即使用它,然后等待 DOM 更新。然而,在某些情况下,你可能希望在 DOM 更新完成后立即执行某些操作。函数会确保在控制台中输出更新后的文本内容,而不是旧的文本内容。

2024-10-16 18:57:50 274

原创 不同的Mapping注解

特定的Mapping注解(如@GetMapping、@PostMapping)直接表明了它们各自处理的HTTP请求类型,使得代码阅读者能够一目了然地知道每个方法处理的是哪种类型的请求。如果知道一个请求的HTTP方法,并且只处理特定类型的请求,使用@GetMapping、@PostMapping等特定注解更方便。相比之下,@RequestMapping注解虽然功能强大且通用,但如果不显式指定method属性,它会处理所有类型的HTTP请求,这可能会让代码的阅读和维护变得更加困难。

2024-10-15 16:59:48 248

原创 Spring MVC 传参注解

这些注解在控制器(Controller)的方法参数上使用,以指示如何将HTTP请求中的参数绑定到方法参数上。要使用这些注解,你需要在你的Spring Boot项目中包含Spring MVC的依赖,并在你的控制器类中使用它们。确保你的方法参数与你的请求中的参数匹配,并且你已经为。用于将HTTP请求体中的数据绑定到控制器方法的参数上,通常用于处理JSON、XML等复杂数据格式。用于从请求参数(通常是URL查询参数或表单参数)中绑定数据到控制器方法的参数上。在Spring框架中,特别是在Spring MVC中,

2024-10-15 16:58:31 426

原创 全局异常捕获

以下是一个示例方法体,它返回了一个自定义的响应对象(在这里假设为 ​R​ 类型),并包含了验证失败的详细信息。:用于指示用户表单中存在更广泛的错误,这些错误可能跨越多个字段,或者与表单的整体状态有关。类应该有一个无参数的构造函数,并且它的所有字段都应该有getter方法(可能还有setter方法,尽管对于只读字段来说可能不需要)。:通常包含一个全局错误消息,该消息与表单中的多个字段或整个表单的状态有关。// 假设您的R类是一个通用的响应类,它至少包含一个状态码和一个消息。

2024-10-15 16:57:49 359

原创 ​Authentication​ 和 ​Principal​ 的区别和联系

在Spring Security中,它可以是用户名、电子邮件地址、唯一标识符或其他任何可以用来标识用户的信息。都是Spring Security用于实现用户认证和授权的重要组件,它们的共同目标是确保只有经过身份验证和授权的用户才能访问受保护的资源。通常用于整个认证和授权过程,它包含了用户认证的全部信息,可以用于判断用户是否已经通过认证、获取用户的权限等。的主要功能是提供用户认证的信息,包括用户是否已经通过认证、用户的身份信息、用户所拥有的权限等。的主要功能是提供用户的身份信息,用于标识和区分不同的用户。

2024-10-15 16:55:46 210

原创 关于Spring中单例的理解

注解的方法定义了一个Bean,并且这个Bean被注入到其他组件中时,Spring会确保这个Bean是单例的(默认情况下),即在整个应用程序上下文中只会有一个实例。这意味着,无论你在应用程序的哪个部分请求这个Bean,Spring都会返回同一个实例。总结一下,你的理解中有一个常见的误区:即认为在方法调用中传递方法返回的对象会创建新的实例。)的调用是Spring容器管理的,而不是由你手动控制的。方法定义的Bean是单例的,并且会在需要时注入到依赖它的组件中。定义的是同一个对象,即Spring容器中的那个单例。

2024-10-15 16:54:30 186

原创 extends ResourceServerConfigurerAdapter

是Spring Security OAuth2提供的一个适配器类,它允许你通过重写其方法来自定义资源服务器的安全配置。例如,你可以配置哪些HTTP请求路径需要被保护、使用哪种令牌存储机制(如JWT)、如何验证访问令牌的有效性等。**资源服务器(Resource Server)**是存储受保护资源的服务器,它负责验证客户端发来的访问令牌是否有效,并根据验证结果允许或拒绝客户端对受保护资源的访问。方法,以便为你的资源服务器定义具体的安全配置。类的方法,你可以灵活定义资源服务器的安全策略。

2024-10-15 16:53:30 88

原创 PasswordEncoder(密码解析器)

PasswordEncoder是Spring Security中用于处理密码加密和验证的重要组件,它通过散列函数和随机盐等机制确保密码的安全性。在实际应用中,应选择合适的PasswordEncoder实现类,并遵循最佳的安全实践来保护用户密码。PasswordEncoder(密码解析器)是Spring Security中用于加密和验证密码的接口。

2024-10-15 16:52:37 190

原创 authorizeHttpRequests

是 Spring Security 中用于配置 HTTP 请求授权的一个关键方法,它允许你根据特定的 URL 模式或请求属性来定义授权规则。还可以结合 Spring Security 的其他功能,如自定义 403 异常返回处理等,来提供更友好的用户体验和安全保障。支持链式写法,使得配置更加简洁和易读。连接多个匹配规则和授权策略,形成一条完整的授权链。:要求用户具有列表中的任何一个角色或权限。:要求用户具有指定的角色或权限。:要求用户已认证(即已登录)其他所有请求都需要用户已认证。

2024-10-15 16:51:16 423

原创 session、cookie和token的区别

Session:存储在服务器端,相对更安全,但如果攻击者能够获取到session ID,也可以冒充合法用户。- Cookie:有效期可以通过设置cookie的属性来控制,可以是临时的(关闭浏览器即失效)或长期的(设置过期时间)。- Token:通常也存储在客户端(浏览器中),但它是作为一种身份验证的凭证,用于授权用户访问特定资源。- Cookie:主要用来跟踪用户的状态,如会话状态、登录状态等,也可以存储一些简单的用户偏好设置。- Token:通常用于身份验证和授权,包含了用户的身份信息、权限等信息。

2024-10-15 16:47:31 337

原创 openSession()不传参时

直接调用openSession(), sqlSession = factory.openSession();时,发现控制台虽然打印输出了影响条数,但是并没有成功更新到数据库表中。,所以其实没有修改数据库,刚刚新增完后立即返回的结果其实是从mybatis为了提高性能设置的缓存里读取的,不是从数据库里读取的。即:openSession(true)默认是不会自动提交事务的。

2024-10-15 16:46:12 60

原创 【Connection的close和null的问题】SQLNonTransientConnectionException 和 ConnectionIsClosedException

当第二次调用给方法是,会直接返回被释放连接的conn,到此第二次访问数据库是报SQLException Connection is closed异常。在平时的练习中一个Service中只调用一次dao操作,所以该方法的问题没有被发现;只是做连接数据库资源的释放,内存对象还会存在也就是。

2024-10-15 16:44:42 403

原创 Group By是否允许SELECT非聚合列

一般情况下,我们在使用group by的时候,select中的列都要出现在group by中,比如select id,name,age from tuser group by id,name,age。在非严格模式下,使用group by后,可以在select 非聚合列(也就是没有出现group by后面的字段),这是获取的非聚合列,是自然顺序的第一条;例如要统计超市水果的种类,需要用count函数,要统计哪个水果价格最高,要用MAX()函数。any_value(字段名)更为详细的,可以参考。

2024-10-15 16:42:10 122

原创 使用泛型T创建数组时遇到报错 Type parameter ‘T‘ cannot be instantiated directly

所以由于类型擦除的原因,Java是禁止直接创建泛型数组实例的 解决方法:使用一个泛型数组包装器,维护一个原始类型的数组,通过数组入口方法进行元素编译期的类型安全检测(对应返回值)和强制类型转换(对于运行时不重要),从而保证类型安全。如在代码中定义的List<object>和List<String>等类型,在编译后都会变成List。JVM看到的只是List,而由泛型附加的类型信息对JVM。Java编译器会在编译时尽可能的发现可能出错的地方,但是仍然无法避免在运行时刻出现类型转换异常的情况。

2024-10-15 16:41:19 141

原创 字符流复制文件时的大小翻倍问题

在使用BufferReader和BufferWriter复制文件夹(及其子目录、文件)时,发现存在复制后的文件大小是源文件2倍的情况。复制的是视频文件,而不是普通的文本文件,所以这里不能使用字符流BufferedReader,而应该使用字节流inputStream。

2024-10-15 16:40:23 132

原创 枚举类型中想使用特殊字符(串)

枚举类型中想使用特殊字符(串)

2024-10-15 16:39:09 89

原创 typeAliasesPackage

typeAliasesPackage

2024-10-12 19:17:42 100

原创 Servlet和Service的区别和联系

综上所述,Servlet和Service在Java Web应用中各自扮演着不同的角色,具有明确的职责和关注点。同时,它们之间也存在着紧密的联系和协作关系,共同构成了完整的Web应用架构。Service和Servlet在Java Web应用中各自扮演着不同的角色,它们之间存在明显的区别和一定的联系。

2024-10-12 19:15:54 294

原创 Session,Cookie和Token

但token不同,token是开发者为了防范csrf而特别设计的令牌,浏览器不会自动添加到headers里,攻击者也无法访问用户的token,所以提交的表单无法通过服务器过滤,也就无法形成攻击。服务器端接受客户端请求后,建立一个session,并发送一个http响应到客户端,这个响应头,其中就包含Set-Cookie头部。该头部包含了sessionId。现在大多都是Session + Cookie,但是只用session不用cookie,或是只用cookie,不用session在理论上都可以保持会话状态。

2024-10-12 19:15:21 814

原创 request的getParameter和getAttribute

关系时,服务端的转发源通过setAttribute()设置传递的参数,然后转发目的通过getAttribute()获取传递的参数,这样转发时数据就不会丢失,注意此种方法。只有getParameter(),没有setParameter()setAttribute()和getAttribute()是一对;关系时,如get和post表单提交请求,传。:响应的是两个web组件之间为。传递数据,代表HTTP请求数据。:响应的两个web组件之间为。递请求参数,注意此种方法是。只存在于web容器内部。

2024-10-12 19:14:07 188

原创 编译异常.

throw抛出try/catch。

2024-10-12 19:12:30 119

原创 default关键字

另外这里既然提到了接口的修饰符default,那么就要注意一点,如果一个类实现了两个接口(可以看做是“多继承”),这两个接口又同时都包含了一个名字相同的default方法,那么会发生什么情况?这里的(default)指的是一种场景,既类中成员没有被访问修饰符修饰,所以属于(default)的情况,效果是(default)情况的成员只能在Demo类所在的包内被访问。使用比较简单,就是当case里的值与switch里的key没有匹配的时候,执行default里的方法。没有匹配的值,那么肯定是星期日。

2024-10-12 19:09:33 540

原创 String的常用方法

String的常用方法。

2024-10-12 19:08:48 57

原创 数组的三种扩容方式

Arrays中定义了一个copyOf(原数组,新数组的长度) 可以实现数组复制,返回一个新的数组。但是该方法体中依然使用System.arraycopy实现数组扩容的。2、System.arraycopy(原数组名称,原数组的起始位置,新数组名称,新数组的起始位置,复制元素的个数);3、在java.util包中提供一个Arrays工具类。

2024-10-12 19:07:48 124

原创 接口注意事项

接口里 【jdk8之前接口里的方法不能有方法体,但是在8之后,可以包含方法体】公有静态常量(默认有public static final)、抽象方法(默认有public abstract)、public static修饰的方法、public default修饰的方法。普通类里没有 default修饰的方法。修饰的方法必须有方法体,且不能重写。,必须有方法体,可以重写。

2024-10-12 19:06:09 93

原创 Jdk8后内存结构变化

由于java是一门高级语言,离硬件底层比较远,有时候无法操作底层的资源,于是,java添加了native关键字,被native关键字修饰的方法可以用其他语言重写,这样,我们就可以写一个本地方法,然后用C语言重写,这样来操作底层资源。由于在编译过程中并不知道每个类的地址,因为可能这个类还没有加载,所以如果你在一个类中引用了另一个类,那么你完全无法知道他的内存地址,那怎么办,我们只能用他的类名作为符号引用,在类加载完后用这个符号引用去获取他的内存地址。字符串常量池存储的是字符串对象的引用,而不是字符串本身。

2024-10-12 19:04:59 926

原创 抽象类的知识点

当子类不重写父类的抽象方法时,必须将子类也设置成抽象类。

2024-10-12 19:04:08 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除