摘要: 是的,在默认情况下,一旦 ServletRequest 的输入流(InputStream 或 Reader)被读取,流就被标记为已消费,数据也无法再次读取。这是因为 ServletRequest 的输入流基于 HTTP 请求的字节流实现,读取数据后,流会关闭或标记为已消费状态,从而阻止重复读取。 如 阅读全文
posted @ 2024-10-28 00:04 gongchengship 阅读(334) 评论(0) 推荐(0)
摘要: Servlet 和 Filter 是 Java Web 开发中常用的两种组件,但它们的功能和使用场景不同。以下是它们的主要区别: 1. 作用和用途 Servlet:Servlet 是处理客户端请求和生成响应的主要组件。它可以直接处理 HTTP 请求,生成动态内容,并将响应返回给客户端。Servlet 阅读全文
posted @ 2024-10-28 00:02 gongchengship 阅读(170) 评论(0) 推荐(0)
摘要: Java Servlet 规范是由 Java 社区流程(Java Community Process, JCP)开发的一组标准接口和协议,定义了 Java Web 应用程序中的 Servlet 和相关组件如何与 Web 服务器交互。Servlet 规范旨在为 Java Web 应用开发者提供一个统一 阅读全文
posted @ 2024-10-28 00:01 gongchengship 阅读(113) 评论(0) 推荐(0)
摘要: 在 Java 中,如果你希望仅从 MongoDB 的主节点(primary node)进行读写操作,而避免从从节点(secondary nodes)读写,可以通过以下方式配置 MongoDB 客户端: 1. 使用 ReadPreference.primary() 配置 MongoDB 提供了 Rea 阅读全文
posted @ 2024-10-21 09:52 gongchengship 阅读(49) 评论(0) 推荐(0)
摘要: 这里可以看阮一峰老师关于 OAuth 2.0 的介绍: 理解OAuth 2.0:https://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html OAuth 2.0 的一个简单解释: https://www.ruanyifeng.com/blog/2019 阅读全文
posted @ 2024-10-21 09:09 gongchengship 阅读(74) 评论(0) 推荐(0)
摘要: 可以在这里反解 JWT token https://jwt.io/ 这里可以看阮一峰老师关于JWT 的介绍 https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html JWT(JSON Web Token)是一种用于在各方 阅读全文
posted @ 2024-10-21 00:27 gongchengship 阅读(694) 评论(0) 推荐(0)
摘要: 一. 什么是架构和架构本质 在软件行业,对于什么是架构,都有很多的争论,每个人都有自己的理解。此君说的架构和彼君理解的架构未必是一回事。因此我们在讨论架构之前,我们先讨论架构的概念定义,概念是人认识这个世界的基础,并用来沟通的手段,如果对架构概念理解不一样,那沟通起来自然不顺畅。 Linux有架构, 阅读全文
posted @ 2024-10-20 00:28 gongchengship 阅读(56) 评论(0) 推荐(1)
摘要: 前后端分离的应用(React 前端 + Java 后端)在部署过程中,需要考虑性能、扩展性、安全性、以及维护方便性等多个方面。下面我将详细介绍前后端分离应用的最佳实践,从架构设计、构建和打包、部署策略、CI/CD 集成、安全性措施等几个角度来描述。 微服务架构图示例 壹.总体概述 一、架构设计 1. 阅读全文
posted @ 2024-10-20 00:19 gongchengship 阅读(379) 评论(0) 推荐(0)
摘要: 前后端分离应用指的是将应用的前端部分(用户界面与交互逻辑)和后端部分(业务逻辑、数据处理、服务器响应)拆分成独立的模块,各自通过 API 进行通信。这种架构设计的目的是提高开发效率、增强可扩展性和灵活性,使前端和后端能够独立开发、部署和维护。 一、传统的前后端耦合应用 vs 前后端分离应用 传统的前 阅读全文
posted @ 2024-10-20 00:10 gongchengship 阅读(821) 评论(5) 推荐(2)
摘要: 1.删除 .idea 目录(一般位于项目的根目录下,会随着IDEA 打开项目而重新生成) 2.删除 .iml 文件 3.project structure 移除所有模块 4.reload maven project 5.从磁盘全部重新加载 6.清除缓存 7.项目主目录(右键)-重新加载maven 项 阅读全文
posted @ 2024-10-18 00:27 gongchengship 阅读(73) 评论(0) 推荐(0)
摘要: 方式一: 为了定制 Spring Boot 的 Actuator 来实现你所描述的功能,即在调用自己的 /actuator/health 时,服务端能够自动调用 4 个下游 API 的 /actuator/health,并将其检查结果与自己的健康状态一起返回,可以按照以下步骤进行操作: 实现思路: 阅读全文
posted @ 2024-10-17 01:42 gongchengship 阅读(128) 评论(0) 推荐(0)
摘要: “异常是为了‘’中断”,即异常发生后: (如果什么也不做,亦即没有catch异常)那么异常会沿着方法调用栈往回传播,会让方法调用栈中的每个方法中与该异常相关的代码之后的代码均无法被执行到,直至方法调用栈的栈底。 (如果catch了异常),那么程序会执行 catch 块里面的代码,执行完之后会执行 f 阅读全文
posted @ 2024-10-13 22:34 gongchengship 阅读(103) 评论(0) 推荐(0)
摘要: 在 Java 语言中,理解方法调用栈、栈帧、局部变量表、操作数栈等概念非常重要,它们与方法的执行和内存管理密切相关。下面是对这些概念的详细解释及它们之间的关系: 图片来源于https://blog.csdn.net/qq_35621494/article/details/107351237 原作者的 阅读全文
posted @ 2024-10-13 21:37 gongchengship 阅读(81) 评论(0) 推荐(0)
摘要: 在 C 语言程序中,内存布局通常被分为几个主要的区域,每个区域都有不同的用途。以下是关于代码段、数据段、堆栈、全局变量、局部变量和函数的详细描述,以及它们之间的关系。 1. 代码段(Text Segment) 代码段(也称为 text segment)是程序的只读部分,存储的是程序的指令(即代码)。 阅读全文
posted @ 2024-10-13 20:45 gongchengship 阅读(510) 评论(0) 推荐(0)
摘要: 在 DocumentDB 或者 MongoDB 使用中,收到 "not master" 错误通常表明当前连接的节点不是主节点(primary),因此它不能处理写操作。这种错误一般出现在复制集的环境下,因为只有复制集的主节点能够处理写操作,而次节点(secondary)只能处理读操作。 可能的原因与解 阅读全文
posted @ 2024-10-11 01:31 gongchengship 阅读(122) 评论(0) 推荐(0)
摘要: 为了将日志输出从 IDEA 的 Console 重定向到文件,你可以使用 Logback 作为日志框架,并通过配置文件来实现这一功能。下面是一个示例 logback.xml 配置文件,它会将日志同时输出到 Console 和 文件 中。 logback.xml 配置文件示例 <?xml versio 阅读全文
posted @ 2024-10-11 01:28 gongchengship 阅读(10) 评论(0) 推荐(0)
摘要: 为了将日志输出从 IDEA 的 Console 重定向到文件,你可以使用 Logback 作为日志框架,并通过配置文件来实现这一功能。下面是一个示例 logback.xml 配置文件,它会将日志同时输出到 Console 和 文件 中。 logback.xml 配置文件示例 <?xml versio 阅读全文
posted @ 2024-10-10 02:24 gongchengship 阅读(631) 评论(0) 推荐(0)
摘要: 在 IntelliJ IDEA 中,可以将程序的输出重定向到一个日志文件,而不是直接输出到 Run 窗口。这个可以通过配置 log4j 或者 java.util.logging 等日志框架来实现,也可以使用标准的输出重定向方法将 System.out 和 System.err 输出到文件中。 下面是 阅读全文
posted @ 2024-10-10 02:23 gongchengship 阅读(739) 评论(0) 推荐(0)
摘要: 要人为地触发 ThreadPoolTaskExecutor 的拒绝策略并测试其是否生效,可以通过以下步骤进行设置和操作: 限制线程池的核心线程数:将线程池的核心线程数和最大线程数设置为较小的值,这样更容易填满线程池中的线程。 限制任务队列的大小:将任务队列设置为较小的值,例如1,这样在提交任务时可以 阅读全文
posted @ 2024-10-10 02:08 gongchengship 阅读(3) 评论(0) 推荐(0)
摘要: 在 Spring 中,使用 ThreadPoolTaskExecutor 时,如果线程池中的 任务队列(Queue) 满了,默认情况下并不会直接抛出异常,而是会根据 RejectedExecutionHandler 的策略来决定如何处理被拒绝的任务。ThreadPoolTaskExecutor 继承 阅读全文
posted @ 2024-10-10 02:04 gongchengship 阅读(373) 评论(0) 推荐(0)
摘要: 是的,Java Profilers 可以用来监控线程池以及整个应用程序的性能和资源使用情况,包括线程的创建、执行、阻塞、等待和终止等细节。通过 Java Profilers,您可以深入分析线程池的运行状态,检查活跃线程、阻塞线程和任务队列的情况。 常用的 Java Profilers 下面是几种常见 阅读全文
posted @ 2024-10-10 01:58 gongchengship 阅读(151) 评论(0) 推荐(0)
摘要: 在 Java 程序运行期间,动态查看线程池的使用情况可以通过获取线程池的相关信息,包括当前线程的数量、已完成的任务数量、等待执行的任务数量等。要实现这些功能,通常会使用 ThreadPoolExecutor 提供的监控方法。 ThreadPoolExecutor 类提供了一系列方法来获取线程池的状态 阅读全文
posted @ 2024-10-10 01:56 gongchengship 阅读(27) 评论(0) 推荐(0)
摘要: 在使用 Apache HttpClient 时,如果调用 HttpRequest.execute() 抛出了异常,通常情况下,异常不会直接包含完整的 response entity。特别是当服务器返回错误响应(如 4xx 或 5xx 状态码)时,execute() 方法可能抛出各种类型的 IOExc 阅读全文
posted @ 2024-10-08 14:28 gongchengship 阅读(166) 评论(0) 推荐(0)
摘要: 使用连接池(connection pool)对 Apache HttpClient 的确能够提升性能,但对于你遇到的问题——在 catch 或 finally 块中读取完整的 response entity,连接池本身不会直接解决这个问题。连接池的主要作用是提升网络连接的复用效率,减少频繁建立和关闭 阅读全文
posted @ 2024-10-08 14:27 gongchengship 阅读(143) 评论(0) 推荐(0)
摘要: 如果程序进入 catch 块 时还需要获取 response entity,但此时 try-with-resources 会自动关闭资源,导致无法再从 response 中获取数据,这种情况下,你可以避免在 try-with-resources 中立即关闭 CloseableHttpResponse 阅读全文
posted @ 2024-10-08 14:27 gongchengship 阅读(101) 评论(0) 推荐(0)