Hutool - Extra:功能丰富的扩展模块
一、简介
Hutool - Extra 作为 Hutool 工具包的扩展模块,对众多第三方库和功能进行了封装,极大地丰富了 Hutool 的功能体系。它涵盖了模板引擎、邮件发送、Servlet 处理、二维码生成、Emoji 处理、FTP 操作以及分词等多个方面,为开发者在不同场景下提供了便捷的解决方案,让开发者无需深入了解各个第三方库的复杂细节,只需调用简单的 API 即可实现相应功能。
二、具体功能及使用示例
1. 模板引擎封装
模板引擎常用于生成动态内容,如 HTML 页面、邮件模板等。Hutool - Extra 对常见的模板引擎进行了封装,以 Freemarker 为例:
引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 Freemarker 和 Hutool 的依赖:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version>
</dependency>
代码示例
import cn.hutool.extra.template.Engine;
import cn.hutool.extra.template.Template;
import cn.hutool.extra.template.TemplateConfig;
import cn.hutool.extra.template.TemplateUtil;
import java.util.HashMap;
import java.util.Map;public class FreemarkerExample {public static void main(String[] args) {// 创建模板配置TemplateConfig config = new TemplateConfig();config.setResourceMode(TemplateConfig.ResourceMode.CLASSPATH);// 获取模板引擎Engine engine = TemplateUtil.createEngine(config);// 获取模板Template template = engine.getTemplate("test.ftl");// 准备数据Map<String, Object> data = new HashMap<>();data.put("name", "John");// 渲染模板String result = template.render(data);System.out.println(result);}
}
在上述代码中,首先创建了模板配置对象,指定资源模式为从类路径加载模板。然后使用 TemplateUtil.createEngine 方法获取模板引擎,通过引擎获取指定名称的模板。准备好数据后,调用 render 方法将数据填充到模板中,得到最终的渲染结果。
2. 邮件发送
Hutool - Extra 封装了 JavaMail 实现邮件发送功能,简化了邮件发送的流程。
引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 JavaMail 和 Hutool 的依赖:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.6.2</version>
</dependency>
代码示例
import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;public class MailExample {public static void main(String[] args) {// 配置邮件账户MailAccount account = new MailAccount();account.setHost("smtp.example.com");account.setPort(465);account.setAuth(true);account.setUser("your_email@example.com");account.setPass("your_password");account.setSslEnable(true);// 发送邮件String result = MailUtil.send(account, "recipient@example.com", "测试邮件", "这是一封测试邮件。", false);System.out.println(result);}
}
在这个示例中,首先创建了邮件账户配置对象,设置了邮件服务器的主机名、端口、认证信息等。然后使用 MailUtil.send 方法发送邮件,指定收件人、邮件主题、邮件内容等参数。
3. Servlet 处理
Hutool - Extra 提供了一些工具类来简化 Servlet 开发中的常见操作,如获取请求参数、处理响应等。
代码示例
import cn.hutool.extra.servlet.ServletUtil;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/test")
public class TestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 获取请求参数String param = ServletUtil.getParam(req, "param");// 设置响应内容类型resp.setContentType("text/html;charset=UTF-8");// 输出响应信息resp.getWriter().println("接收到的参数:" + param);}
}
在上述 Servlet 中,使用 ServletUtil.getParam 方法获取请求参数,然后设置响应内容类型并输出响应信息。
4. 二维码生成
Hutool - Extra 封装了 ZXing 库来生成二维码。
引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 ZXing 和 Hutool 的依赖:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.1</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.4.1</version>
</dependency>
代码示例
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;public class QrCodeExample {public static void main(String[] args) throws Exception {// 二维码配置QrConfig config = new QrConfig(300, 300);// 生成二维码图片BufferedImage image = QrCodeUtil.generate("https://www.example.com", config);// 保存二维码图片File file = new File("qrcode.png");ImageIO.write(image, "png", file);}
}
在这个示例中,首先创建了二维码配置对象,指定了二维码的尺寸。然后使用 QrCodeUtil.generate 方法生成二维码的 BufferedImage 对象,最后将其保存为 PNG 图片。
5. Emoji 处理
Hutool - Extra 提供了 Emoji 相关的工具类,用于处理 Emoji 表情的编码、解码等操作。
代码示例
import cn.hutool.extra.emoji.EmojiUtil;public class EmojiExample {public static void main(String[] args) {String emojiStr = "😀😄😎";// 将 Emoji 转换为别名String aliasStr = EmojiUtil.toAlias(emojiStr);System.out.println("Emoji 转换为别名:" + aliasStr);// 将别名转换为 EmojiString emojiBack = EmojiUtil.toUnicode(aliasStr);System.out.println("别名转换为 Emoji:" + emojiBack);}
}
在上述代码中,使用 EmojiUtil.toAlias 方法将 Emoji 表情转换为别名,使用 EmojiUtil.toUnicode 方法将别名转换回 Emoji 表情。
6. FTP 操作
Hutool - Extra 封装了 Apache Commons Net 库来实现 FTP 操作,如上传、下载文件等。
引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 Apache Commons Net 和 Hutool 的依赖:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version>
</dependency>
代码示例
import cn.hutool.extra.ftp.Ftp;
import java.io.File;
import java.io.IOException;public class FtpExample {public static void main(String[] args) {Ftp ftp = new Ftp("ftp.example.com", 21, "username", "password");try {// 上传文件ftp.upload("/remote/path", new File("local/file.txt"));// 下载文件ftp.download("/remote/path/file.txt", new File("local/download.txt"));} catch (IOException e) {e.printStackTrace();} finally {ftp.close();}}
}
在这个示例中,创建了 Ftp 对象并连接到 FTP 服务器,然后使用 upload 方法上传文件,使用 download 方法下载文件,最后关闭 FTP 连接。
7. 分词功能
Hutool - Extra 集成了 HanLP 等分词库,提供了简单的分词功能。
引入依赖
如果使用 Maven 项目,在 pom.xml 中添加 HanLP 和 Hutool 的依赖:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version>
</dependency>
<dependency><groupId>com.hankcs</groupId><artifactId>hanlp</artifactId><version>portable-1.8.3</version>
</dependency>
代码示例
import cn.hutool.extra.tokenizer.Result;
import cn.hutool.extra.tokenizer.TokenizerEngine;
import cn.hutool.extra.tokenizer.TokenizerUtil;public class TokenizerExample {public static void main(String[] args) {// 获取分词引擎TokenizerEngine engine = TokenizerUtil.createEngine();// 待分词的文本String text = "我爱自然语言处理";// 进行分词Result result = engine.parse(text);for (String word : result) {System.out.println(word);}}
}
在上述代码中,使用 TokenizerUtil.createEngine 方法获取分词引擎,然后对文本进行分词操作,遍历分词结果并输出每个词语。
三、注意事项
- 依赖管理:使用 Hutool - Extra 的不同功能时,需要根据具体需求引入相应的第三方依赖,确保版本兼容性。
- 资源释放:在使用一些需要连接外部资源的功能,如 FTP 操作时,要注意及时释放资源,避免资源泄漏。
- 性能优化:对于一些性能敏感的场景,如大量文本的分词处理,需要根据实际情况进行性能优化,如调整分词引擎的配置等。
通过使用 Hutool - Extra,开发者可以在一个统一的工具包中方便地使用多种常用功能,提高开发效率,减少代码复杂度。
相关文章:
Hutool - Extra:功能丰富的扩展模块
一、简介 Hutool - Extra 作为 Hutool 工具包的扩展模块,对众多第三方库和功能进行了封装,极大地丰富了 Hutool 的功能体系。它涵盖了模板引擎、邮件发送、Servlet 处理、二维码生成、Emoji 处理、FTP 操作以及分词等多个方面,为开发者在不同…...
C++ 中的继承详解(上)
目录 1、继承的概念及定义 1.1、继承的概念 1.2、继承定义 1.2.1、定义格式 1.2.2、继承方式 1.2.3、继承基类成员访问方式的变化 2、基类和派生类对象赋值转换 3、继承中的作用域 4、派生类的默认成员函数 补充:封装的层次(实际上有很多层的,这…...
halcon三维点云数据处理(二十五)moments_object_model_3d
目录 一、moments_object_model_3d例程二、moments_object_model_3d函数三、效果图 一、moments_object_model_3d例程 这个例子说明了如何使用moments_object_model_3d运算符来将3D数据与x、y、z坐标轴对齐。在实际应用中,通过3D传感器获取的物体模型可能具有一个与…...
Mac M3/M4 本地部署Deepseek并集成vscode
Mac 部署 使用傻瓜集成平台ollama,ollama平台依赖于docker,Mac的M3/M4 因doesn’t have VT-X/AMD-v enabled 所以VB,VM无法使用,导致docker无法启动,需要使用docker的替代品podman, 它完全兼容docker brew install p…...
2024年职高单招或高考计算机类投档线
问题: 这些学校2024年职高单招或高考计算机类投档线分别是多少 回答: 部分学校2024年职高单招或高考计算机类投档线如下: 湖南工业职业技术学院 职高单招:未查询到2024年职高单招计算机类专业明确的录取分数线信息。但在2024年…...
Unity Excel导表工具转Lua文件
思路介绍 借助EPPlus读取Excel文件中的配置数据,根据指定的不同类型的数据配置规则来解析成对应的代码文本,将解析出的字符串内容写入到XXX.lua.txt文件中即可 EPPlus常用API //命名空间 using OfficeOpenXml;//Excel文件路径 var fileExcel new File…...
SpringBoot项目集成MinIO
最近在学习MinIO,所以想让自己的SpringBoot项目集成MinIO,在网上查阅资料,并进行操作的过程中遇到一些问题,所以想把自己遇到的坑和完成步骤记录下来供自己和各位查阅。 一. MinIO的下载安装以及基本使用 1. 下载地址:https://d…...
第30篇 基于ARM A9处理器用C语言实现中断<六>
Q:怎样设计基于ARM A9处理器的C语言程序在数码管上滚动显示字符? A:使用A9 Private Timer中断源,控制字符滚动的速度;按键产生中断可以控制字符暂停/继续滚动。 本实验在DE1-SoC开发板的6个七段数码管*HEX5~HEX0*上…...
Flutter 中的单例模式
传统: class RouterManager {// 单例模式static final RouterManager _instance RouterManager._internal();factory RouterManager() {return _instance;}RouterManager._internal(); }传递参数进行初始化时: class RouterManager {// 私有静态实例&a…...
8.python文件
文章目录 1.**文件**1.1**文件是什么**1.2**文件路径**1.3**文件操作**1.3.1**打开文件**1.3.2**关闭文件**1.3.3**写文件**1.3.4**读文件** 1.4**关于中文的处理**1.5**使用上下文管理器** 大家好,我是晓星航。今天为大家带来的是 python文件 相关的讲解࿰…...
2025vue4.x全栈学习关键技术分析线路图
关键升级点说明: 编译优化 :Vue 4.x采用WASM编译提速300% 智能工具链 :Vite插件市场新增AI代码审查模块 跨平台能力 :Uni-App支持原生ARCore/ARKit调用 安全增强 :默认启用WebAuthn生物认证…...
革新之力:数字科技——重塑未来的超越想象之旅
在21世纪的科技浪潮中,数字科技如同一股不可阻挡的洪流,正以前所未有的速度和广度改变着我们的生活、工作乃至整个社会的结构。它不仅是技术的简单迭代,更是对人类社会认知边界的拓宽,对经济模式、社会治理、文化形态等多方面的深…...
超级详细,知识图谱系统的理论详解+部署过程
知识图谱系统(Knowledge Graph System)是一种用于表示、存储、查询和推理知识的系统。它通过结构化的方式将现实世界中的实体、概念及其相互关系组织成一个图结构,从而帮助机器理解和处理复杂的知识。 知识图谱的核心组成部分 实体(Entities): 实体是知识图谱中的节点,…...
电路笔记 (信号): opa tips 放大器反馈电阻并联电容抑制高频噪声的详细推导(传递函数分析)
1. 高频噪声传递函数分析 (1)电路结构 输入信号通过 R 1 R_1 R1 和 C NI C_{\text{NI}} CNI 的并联组合连接到运放的同相输入端。反馈电阻 R 2 R_2 R2 连接在运放的输出端和反相输入端之间。 Layer 1 - 30p R2 R1 R3R1//R2 IN OUT 反向放大电…...
DeepSeek安装部署笔记(一)
Ollamaopen-WebUI部署 DeepSeek安装部署笔记第一步 Ollama安装1.安装ollama:官网https://ollama.com/下载2.上面安装完成,在cmd命令行: 第二步 给DeepSeek添加OpenWebUI界面(重点)1.安装conda:用它来管理py…...
【JavaEE进阶】Spring MVC(4)-图书管理系统案例
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 图书管理系统 创建书籍类BookInfo import lombok.Data;import java.math.BigDecimal;Data //这个类基本上是和数据库对应起来的 public class BookInfo {private Integer id…...
Ubuntu部署ktransformers
准备工作 一台服务器 CPU:500G GPU:48G(NVIDIA4090) 系统:Ubuntu20.04(github的文档好像用的是22.04) 第一步:下载权重文件 1.下载hfd wget https://hf-mirror.com/hfd/hfd.s…...
助力DeepSeek私有化部署服务:让企业AI落地更简单、更安全
在数字化转型的浪潮中,越来越多的企业选择私有化部署AI技术,以保障数据安全、提升业务效率并实现自主可控。DeepSeek作为行业领先的AI开源技术,其技术可以支持企业私有化部署,企业需要一站式服务私有化部署,涵盖硬件采…...
面试官询问项目前后端人员配比之高分示范回答
面试官询问项目前后端人员配比之高分示范回答 以下是对两个项目前后端人员配置的精准分析,结合 技术复杂度、协作效率、风险控制 三个维度设计回答,突出合理性与团队协作意识: 一、《x能x服》项目(Vue重构) 1. 人员配置与分工 前端:1人(独立开发) 负责旧系统业务逻辑…...
MyBatis中的日志和映射器说明
1.MyBatis中的日志 1.1 什么是日志 在我们编写应用的时候,有一些信息需要及时查看,查看的时候有时需要输出到控制台,有时需要输出到文件。MyBatis也需要日志,一般情况下,使用log4j进行日志管理。 1.2 在MyBatis中…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
Python 高效图像帧提取与视频编码:实战指南
Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
