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中…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
Python ROS2【机器人中间件框架】 简介
销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
