0%

Java Web 异常处理:Servlet 错误页面与异常拦截机制

在 Java Web 应用中,异常处理是保障应用稳定性和用户体验的关键环节。Servlet 容器提供了灵活的异常处理机制,允许开发者通过配置错误页面或自定义异常处理器,统一捕获和处理请求过程中出现的异常(如 404 资源不存在、500 服务器错误、自定义业务异常等)。本文将详细解析 Servlet 异常处理的配置方式、核心对象及实践技巧。

Servlet 异常处理的核心机制

Servlet 容器通过错误页面配置异常属性传递实现异常处理:

  1. 当应用抛出未捕获的异常或返回特定错误码(如 404、500)时,容器会拦截请求;
  2. 根据预配置的规则(错误码或异常类型),将请求转发到指定的错误处理器(如 Servlet、JSP);
  3. 容器在请求域中设置异常相关属性,供错误处理器获取详细信息(如错误码、异常堆栈)。

异常处理的配置方式

XML 配置(web.xml

通过 web.xml<error-page> 标签配置错误页面,支持按错误码异常类型匹配:

(1)按错误码配置

针对 HTTP 状态码(如 404、500)指定处理页面:

1
2
3
4
5
6
7
8
9
10
11
<!-- 处理 404 资源不存在错误 -->
<error-page>
<error-code>404</error-code>
<location>/error/404.jsp</location> <!-- 错误处理器路径 -->
</error-page>

<!-- 处理 500 服务器内部错误 -->
<error-page>
<error-code>500</error-code>
<location>/error/500.jsp</location>
</error-page>
(2)按异常类型配置

针对特定异常类型(如 ArithmeticException、自定义 BusinessException)指定处理页面:

阅读全文 »

Spring Cloud Gateway:新一代微服务网关详解

Spring Cloud Gateway 是 Spring Cloud 官方推出的第二代网关组件,旨在替代 Zuul,基于 Spring 5、Spring Boot 2 和 Project Reactor 构建,采用非阻塞响应式编程模型,具备高性能、动态路由、熔断限流等核心能力,是微服务架构中连接客户端与后端服务的理想入口。

Gateway 的核心优势

相比第一代网关 Zuul,Gateway 具有以下显著优势:

  • 响应式编程:基于 Netty 和 WebFlux,采用非阻塞 IO 模型,性能远超 Zuul 的同步阻塞模型,适合高并发场景;
  • 功能丰富:内置动态路由、断言(Predicate)、过滤器(Filter)、负载均衡、熔断、限流等功能;
  • 无缝集成:与 Spring Cloud 生态(如 Eureka、Consul、Hystrix、Sentinel)深度融合;
  • 可扩展性:支持自定义断言和过滤器,灵活满足业务需求。

Gateway 的核心概念

Gateway 的核心功能围绕路由(Route)断言(Predicate)过滤器(Filter) 三个组件展开,三者共同构成了网关的基本工作单元。

路由(Route)

路由是网关的基本转发规则,由以下部分组成:

阅读全文 »

新版本 Hystrix 服务监控:Spring Cloud F 版本及以上配置指南

Spring Cloud 从 D 版本升级到 F 版本后,Hystrix 监控组件(Hystrix Dashboard)在依赖和配置上发生了一些变化。尽管核心功能仍是实时监控服务调用指标,但需要注意新版本中 Servlet 映射和启动类注解的调整,以确保监控面板能正常采集数据。

新版本 Hystrix 监控的核心变化

Spring Cloud F 版本(对应 Hystrix 2.x 相关整合)中,Hystrix Dashboard 的主要调整如下:

  • 依赖坐标变更(统一纳入netflix命名空间);
  • 被监控服务需显式注册HystrixMetricsStreamServlet,否则无法暴露/hystrix.stream端点;
  • 启动类注解保持兼容,但需确保熔断功能正常启用。

详细配置步骤

1. 搭建 Hystrix Dashboard 服务

(1)引入依赖

在监控面板服务的pom.xml中添加依赖(F 版本及以上):

阅读全文 »

Hystrix 配置参数详解:从熔断到线程池的精细化控制

Hystrix 的强大之处在于其灵活的配置能力,通过精细化调整参数,可适配不同业务场景的容错需求。无论是熔断策略、超时控制,还是线程池资源隔离,都可通过@HystrixCommand注解的属性或配置文件进行定制。本文将系统解析 Hystrix 的核心配置参数,帮助理解其背后的设计逻辑和实际应用场景。

@HystrixCommand 核心标识属性

@HystrixCommand注解的基础属性用于标识命令、分组和线程池,是配置的基础:

属性名 作用 示例值
groupKey 命令分组标识,同一分组共享线程池(默认使用commandKey)。 "UserServiceGroup"
commandKey 命令唯一标识(默认使用方法名),用于监控和配置隔离。 "GetUserByIdCommand"
threadPoolKey 线程池标识(默认使用groupKey),用于自定义线程池隔离(不同命令可共用线程池)。 "UserThreadPool"
fallbackMethod 降级方法名,需与原方法参数和返回值一致。 "getUserFallback"
defaultFallback 类级别的默认降级方法(需配合@DefaultProperties),无参数,返回值需匹配。 "globalFallback"
ignoreExceptions 忽略的异常类型(不触发降级)。 {NullPointerException.class}

commandProperties:命令级核心配置

commandProperties通过@HystrixProperty配置命令的熔断、隔离、超时等核心策略,对应HystrixCommandProperties类,主要分为以下几类:

阅读全文 »

OpenFeign 超时配置详解

OpenFeign 的超时机制与底层依赖的负载均衡组件密切相关,在不同的 Spring Cloud 版本中,配置方式可能存在差异,以下是详细说明:

超时机制的底层依赖

  • Spring Cloud Edgware 及之前版本:OpenFeign 默认整合 Ribbon 实现负载均衡,超时配置通过 Ribbon 参数控制。
  • Spring Cloud Greenwich 及之后版本:部分版本开始支持将 OpenFeign 与 Spring Cloud LoadBalancer 结合,此时超时配置需使用 Feign 自身参数。

常见超时配置方式

方式一:基于 Ribbon 的配置(适用于整合 Ribbon 的场景)

阅读全文 »