0%

正则表达式常用语法与实例详解

正则表达式(Regular Expression)是一种用于匹配字符串模式的工具,广泛应用于文本检索、验证、替换等场景。本文基于常用正则语法,结合实例解析其核心规则,帮助快速掌握正则表达式的使用。

基础匹配符号

1. 普通字符与转义符(\

  • 普通字符:直接匹配自身(如 a 匹配 “a”,123 匹配 “123”)。

  • 转义符 \:将特殊字符转为普通字符,或表示特殊含义:

    • 匹配特殊字符(如 \. 匹配 “.”,\* 匹配 “*”)。
    • 表示不可见字符(如 \n 匹配换行,\t 匹配制表符)。

    示例

    • 正则 a\.b 匹配 “a.b”(而非 “acb” 等)。
    • 正则 \t 匹配字符串中的制表符。

2. 锚点:定位匹配位置

  • ^:匹配字符串的开始位置(如 ^abc 匹配以 “abc” 开头的字符串,如 “abc123”)。

  • $$`:匹配字符串的结束位置(如 `xyz$$ 匹配以 “xyz” 结尾的字符串,如 “123xyz”)。

  • \b:匹配单词边界(单词与非单词字符的分界,如 er\b 匹配 “never” 中的 “er”,但不匹配 “verb” 中的 “er”)。

  • \B:匹配非单词边界(如 er\B 匹配 “verb” 中的 “er”,但不匹配 “never” 中的 “er”)。

    示例

    • 正则 ^hello$ 仅匹配字符串 “hello”(精确匹配)。
    • 正则 \bcat\b 匹配 “cat” 或 “a cat”,但不匹配 “category”(”cat” 不是独立单词)。

量词:控制匹配次数

量词用于指定前面的子表达式匹配的次数,默认是贪婪模式(尽可能多匹配),加 ? 可变为非贪婪模式(尽可能少匹配)。

阅读全文 »

Java Web 国际化(i18n):多语言应用的实现方案

国际化(Internationalization,简称 i18n,因 “internationalization” 首尾字母中间有 18 个字母而得名)是指应用程序能根据用户的语言或地区自动适配内容,提供本地化(Localization,简称 l10n)体验。在 Java Web 中,通过 Locale 类、资源束(ResourceBundle)及格式化工具,可轻松实现多语言支持。本文将详细介绍国际化的核心概念、实现步骤及最佳实践。

国际化的核心概念

区域设置(Locale)

Locale 类代表特定的语言和地区,由语言代码(如 zh 表示中文,en 表示英文)和国家 / 地区代码(如 CN 表示中国,US 表示美国)组成,格式为 语言代码_国家/地区代码(如 zh_CNen_US)。

常用 Locale 实例

1
2
3
Locale china = Locale.CHINA; // 等同于 new Locale("zh", "CN")
Locale us = Locale.US; // 等同于 new Locale("en", "US")
Locale japan = new Locale("ja", "JP"); // 日语(日本)

Locale 核心方法

方法 作用描述
getLanguage() 获取语言代码(如 zhen
getCountry() 获取国家 / 地区代码(如 CNUS
getDisplayLanguage() 获取本地化的语言名称(如 Locale.CHINA 下返回 “中文”)
getDisplayCountry() 获取本地化的国家 / 地区名称(如 Locale.US 下返回 “美国”)

资源束(ResourceBundle)

资源束是存储多语言文本的配置文件集合,通过 ResourceBundle 类加载,根据 Locale 自动匹配对应的语言资源。

命名规则
资源文件以基础名开头,后跟 _语言代码_国家代码.properties,默认文件(无区域后缀)作为 fallback:

阅读全文 »

Java Web 文件上传:从表单到服务器的完整实现

文件上传是 Web 应用的常见功能(如头像上传、文档提交等)。由于 HTTP 表单默认编码格式不支持二进制数据传输,需使用 multipart/form-data 格式处理文件上传。本文将详细介绍文件上传的原理、基于 commons-fileupload 工具的实现方式及最佳实践。

文件上传的核心原理

表单编码格式

默认情况下,表单使用 application/x-www-form-urlencoded 编码,会将数据转换为键值对字符串(如 name=zhangsan&age=20),不适合传输二进制文件(如图片、视频)。

文件上传需指定表单编码为 multipart/form-data,该格式将表单拆分为多个 “部分(part)”,每个部分对应一个表单项(文本或文件),并通过分隔符区分,支持二进制数据传输。

1
2
3
4
5
6
7
8
<!-- 文件上传表单 -->
<form method="post" enctype="multipart/form-data" action="/upload">
<!-- 文本字段 -->
<input type="text" name="username" />
<!-- 文件字段 -->
<input type="file" name="avatar" />
<button type="submit">上传</button>
</form>
  • method="post":文件上传必须使用 POST 方法(GET 有长度限制);
  • enctype="multipart/form-data":指定二进制编码格式;
  • type="file":文件选择框,用于选择本地文件。

上传数据格式

multipart/form-data 格式的请求体示例:

阅读全文 »

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)

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

阅读全文 »