当前位置: 首页 > news >正文

Vert.x,Web - 静态资源/模板

静态资源

Vert.x-Web带有开箱即用的处理器(StaticHandler),用于处理静态Web资源(.html, .css, .js, …), 因此可以非常轻松地编写静态Web服务器。
默认静态文件目录为类路径下的webroot目录,对于maven的项目,按规范放在src/main/resources/webroot下,但可以配置。例如:
在这里插入图片描述
Vert.x Web相关代码如下:

public class WebServer1 {public static void main(String[] args) {Vertx vertx = Vertx.vertx();HttpServer server = vertx.createHttpServer();Router router = Router.router(vertx);// StaticHandler来处理静态文件// 需要注意的是静态文件要放到webroot(resources/webroot)里面StaticHandler staticHander = StaticHandler.create()//.create("D:/www/test/") // 指定web-root, 注意Windows下的路径格式, 是"/", 而不是"\".setCachingEnabled(true).setDirectoryListing(false).setIndexPage("index.html");router.route("/html/*").handler(staticHander);server.requestHandler(router).listen(8080);}
}

index.html的代码如下:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>Hello Vert.X</title><link rel="stylesheet" href="./static/layui/css/layui.css"><script src="./static/layui/layui.js"></script>
</head>
<body><div class="layui-container"><div class="layui-row layui-col-space12" style="margin-top: 18px;"></div><div class="layui-card"><div class="layui-card-header" style="background-color: #dddddd;"><b>Hello Vert.x Web</b></div><div class="layui-card-body">Vert.x-Web is a set of building blocks for building web applications with Vert.x.</div></div></div></div>
</body>
</html>

通过浏览器访问http://127.0.0.1:8080/html/,浏览器返回index.html页面的内容。
在这里插入图片描述

模板

Vert.x Web为若干流行的模板引擎提供了开箱即用的支持,通过这种方式来提供生成动态页面的能力。TemplateEngine定义了使用模板引擎的接口。 当渲染模板时会调用render方法。

最简单的使用模板的方式不是直接调用模板引擎,而是使用模板处理器TemplateHandler。 这个处理器会根据 HTTP 请求的路径来调用模板引擎。

缺省情况下,模板处理器会在类路径下的templates目录中查找模板文件。这是可以配置的。该处理器会返回渲染的结果,并默认设置Content-Type消息头为text/html 。这也是可以配置的。

Vert.x Web提供了每一种模板引擎的配置。 使用模板引擎需要先引入对应依赖,并在创建模板处理器时提供所使用的模板引擎实例。 接下来以使用Thymeleaf模板引擎为例,首先需要在maven项目中引入依赖:

<dependency><groupId>io.vertx</groupId><artifactId>vertx-web-templ-thymeleaf</artifactId><version>4.5.10</version>
</dependency>

注意,对于Thymeleaf模板引擎,不同版本的用法是有比较大的区别的,网上很多案例都是基于4.x版本之前的。4版本的用法建议参考github上的官方案例"vertx-examples-4.x"。

以下写个thymeleaf模板,并进行渲染,模板存放目录: webroot/templates/thymeleaf/
在这里插入图片描述
Vert.x Web相关代码:

ThymeleafTemplateEngine engine = ThymeleafTemplateEngine.create(vertx);
router.route("/thy/hello.html").handler(routingContext -> {JsonObject data = new JsonObject().put("osName", System.getProperty("os.name")).put("osArch", System.getProperty("os.arch")).put("osVersion", System.getProperty("os.version")).put("jvmName", System.getProperty("java.runtime.name")).put("jvmVersion", System.getProperty("java.runtime.version"));engine.render(data, "webroot/templates/thymeleaf/hello-templ.html", ar -> { // 模板位置if (ar.succeeded()) {routingContext.response().end(ar.result());} else {routingContext.fail(ar.cause());}});
});

模板相关代码:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"><title>Hello Vert.X</title><link rel="stylesheet" href="../html/static/layui/css/layui.css"><script src="../html/static/layui/layui.js"></script>
</head>
<body><div class="layui-container"><div class="layui-row layui-col-space15"><div class="layui-col-md8"><table class="layui-table"><thead><tr style="background-color: #94BDD8;"><th>服务器属性</th><th>属性值</th></tr></thead><tbody><tr><td>OS Info</td><td th:text="${osName} + ', ' + ${osVersion} + ', ' + ${osArch}"></td></tr><tr><td>JVM Info</td><td th:text="${jvmName} + ', ' + ${jvmVersion} "></td></tr></tbody></table></div></div></div>
</body>
</html>

浏览器访问http://127.0.0.1:8080/thy/hello.html, 返回如下:
在这里插入图片描述

相关文章:

Vert.x,Web - 静态资源/模板

静态资源 Vert.x-Web带有开箱即用的处理器(StaticHandler)&#xff0c;用于处理静态Web资源(.html, .css, .js, …)&#xff0c; 因此可以非常轻松地编写静态Web服务器。 默认静态文件目录为类路径下的webroot目录&#xff0c;对于maven的项目&#xff0c;按规范放在src/main/…...

OpenAI今天Open了一下:开源多智能体框架Swarm

来源 | 机器之心 毫无疑问&#xff0c;多智能体肯定是 OpenAI 未来重要的研究方向之一&#xff0c;前些天 OpenAI 著名研究科学家 Noam Brown还在 X 上为 OpenAI 正在组建的一个新的多智能体研究团队招募机器学习工程师。 就在几个小时前&#xff0c;这个或许还没有组建完成的新…...

车辆重识别(2021NIPS无分类器扩散指南)论文阅读2024/10/08

[1] CLASSIFIER-FREE DIFFUSION GUIDANCE&#xff08;无分类器扩散指导&#xff09; (NIPS 2021) 作者&#xff1a;Jonathan Ho & Tim Salimans 单位&#xff1a;Google Research, Brain team&#xff08;谷歌团队&#xff09; 摘要&#xff1a; 分类器指导是最近引入的一…...

JavaSE——认识异常

1.概念 在生活中&#xff0c;人有时会生病&#xff0c;在程序中也是一样&#xff0c;程序猿是一帮办事严谨、追求完美的高科技人才。在日常开发中&#xff0c;绞尽脑汁将代码写的尽善尽美&#xff0c;在程序运行过程中&#xff0c;难免会出现一些奇奇怪怪的问题。有时通过代码很…...

嵌入式数据结构中顺序栈用法

第一:嵌入式C语言中栈特点 栈是限制在一端进行插入操作和删除操作的线性表(俗称堆栈),允许进行操作的一端称为“栈顶”,另一固定端称为“栈底”,当栈中没有元素时称为“空栈”。特点 :后进先出(LIFO)。...

PE结构之绑定导入表

打印绑定导入表 //打印 绑定导入表 BOOL PrintBoundImport(__in char* m_fileName) {char* Filebuffer NULL;if (!GetFileBuffer(m_fileName, &Filebuffer)) return FALSE;PIMAGE_DOS_HEADER LPdosHeader NULL;PIMAGE_NT_HEADERS LPntHeader NULL;LPdosHeader (PIMAGE…...

【python学习】1-2 配置python系统环境变量

1.点击“我的电脑”右键&#xff0c;点击属性&#xff0c;点击“高级系统设置”&#xff0c;再点击环境变量。 2.选择“系统变量”中的Path后&#xff0c;点击编辑。 3.点击新建&#xff0c;添加如图两个路径&#xff0c;即是python安装的路径位置后&#xff0c;点击确定。...

日均千万订单的交易平台设计稿

业务背景 平台主要售卖电子商品和少量特定的实物商品。 经营模式&#xff0c;主要分为平台商家和自营店&#xff0c;自营店的流量占整个平台业务的50%以上&#xff0c;我负责自营店交易履约相关业务。 以前的架构&#xff0c;平台交易和履约中心是所有流量共享&#xff0c;在…...

如何在 iPad 上恢复已删除的历史记录?

iPad 配备了一个名为 Safari 的内置网络浏览器。这是一种在旅途中保持联系和浏览网页的强大且便捷的方式。但如果您不小心删除了浏览历史记录&#xff0c;则尝试恢复它可能会很令人沮丧。 幸运的是&#xff0c;您可以通过多种方法在 iPad 上恢复已删除的 Safari 历史记录。您应…...

Haar cascade训练人脸小模型做人脸辨别

代码讲解 1. 导入必要的库 import cv2 import os from pathlib import Path import shutil import numpy as np import loggingcv2: OpenCV 库&#xff0c;用于图像处理和计算机视觉。os: 提供了一种便携的方式使用操作系统依赖的功能。pathlib.Path: 提供了对象导向的路径处…...

DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中?

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 原文链接&#xff1a;DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中? 如何将 (.mdf) 和 (.ldf) 的SQL Server 数据库文件导入到当前数据库中? Step 1.登录到 Sql Server 服…...

【差分数组】个人练习-Leetcode-3229. Minimum Operations to Make Array Equal to Target

题目链接&#xff1a;https://leetcode.cn/problems/minimum-operations-to-make-array-equal-to-target/description/ 题目大意&#xff1a;给出两个数组nums[]和target[]&#xff0c;可以对nums[]数组进行这样两种操作 给某个区间内的子列全加1给某个区间内的子列全减1 求…...

HTML5--裸体回顾

免责声明&#xff1a;本文仅做分享~ 详情请参考以下&#xff1a; HTML 系列教程 (w3school.com.cn) 菜鸟教程 - 学的不仅是技术&#xff0c;更是梦想&#xff01; --本文是光秃秃的空壳. 标题标签 段落标签 换行和水平线 文本格式化标签 &#xff08;一般用左边的&#xff…...

【网络安全】CVE-2024-46990: Directus环回IP过滤器绕过实现SSRF

未经许可,不得转载。 文章目录 背景漏洞详情受影响版本解决方案背景 Directus 是一款开源 CMS,提供强大的内容管理 API,使开发人员能够轻松创建自定义应用程序,凭借其灵活的数据模型和用户友好的界面备受欢迎。然而,Directus 存在一个漏洞,允许攻击者绕过默认的环回 IP …...

问:JVM的垃圾收集算法你知道哪些,有什么区别?

GC&#xff08;垃圾回收器&#xff09;的概念 GC&#xff0c;即垃圾回收&#xff08;Garbage Collection&#xff09;&#xff0c;是计算机程序中一种自动管理内存的机制。其目的是自动回收不再被使用的对象所占用的内存空间&#xff0c;从而避免内存泄漏和内存溢出&#xff0…...

Python selenium库学习使用实操四

系列文章目录 Python selenium库学习使用实操 Python selenium库学习使用实操二 Python selenium库学习使用实操三 文章目录 系列文章目录[TOC](文章目录) 前言一、元素获取二、选项解析总结 前言 在Python selenium库学习使用实操二中提到了下拉框的操作&#xff0c;一种是标…...

用Go开发跨平台GUI

本篇内容是根据2023年3月份#271 Cross-platform graphical user interfaces音频录制内容的整理与翻译 这一期与 Wails 和 Fyne 的创建者一起深入研究为不同架构和操作系统编写 Go 代码。 译者注: Wails的作者是在澳大利亚悉尼的威尔士人,github头像是威尔士的旗帜,Wails也是Wa…...

云原生开发 - 工具镜像(简约版)

在微服务和云原生环境中&#xff0c;容器化的目标之一是尽可能保持镜像小型化以提高启动速度和减少安全风险。然而&#xff0c;在实际操作中&#xff0c;有时候需要临时引入一些工具来进行调试、监控或问题排查。Kubernetes提供了临时容器&#xff08;ephemeral containers&…...

Mac 电脑pink 后端ip地址进行本地联调

文章目录 0: 使用ping 192.39.192.180查看是否能ping通1:点击访达2:在访达里面 shift commit g 打开前往路径的窗口3:在窗口中输入地址/private/etc/hosts4:打开hosts文件 添加后端地址&#xff08;如&#xff1a;192.39.192.180 localhost:80805:保存 后端ip为192.39.192.180…...

iPhone使用指南:如何在没有备份的情况下从 iPhone 恢复已删除的照片

本指南将向您展示如何在没有备份的情况下从 iPhone 恢复已删除的照片。我们所有人在生活中的某个时刻都一定做过一些愚蠢的事情&#xff0c;例如从手机或电脑中删除一些重要的东西。这是很自然的&#xff0c;没有什么可羞耻的。您可能在辛苦工作一天后回来。当突然想看一些照片…...

ollama部署本地大模型|embeddinggemma-300m嵌入质量评估方法论

ollama部署本地大模型&#xff5c;embeddinggemma-300m嵌入质量评估方法论 1. 引言&#xff1a;为什么需要本地嵌入模型&#xff1f; 想象一下&#xff0c;你正在开发一个智能搜索系统&#xff0c;需要快速理解用户查询的语义含义&#xff0c;并在海量文档中找到最相关的内容…...

DDrawCompat:老游戏兼容性修复与性能优化终极解决方案

DDrawCompat&#xff1a;老游戏兼容性修复与性能优化终极解决方案 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDrawC…...

Android项目中的Gradle文件详解:从基础配置到高级技巧

Android项目中的Gradle文件详解&#xff1a;从基础配置到高级技巧 在Android开发的世界里&#xff0c;Gradle文件就像是一个项目的"大脑"&#xff0c;它控制着构建过程的方方面面。对于有一定经验的Android开发者来说&#xff0c;深入理解Gradle文件的配置不仅能够提…...

intv_ai_mk11快速上手:浏览器输入URL→发送‘帮我写周报’→获得带数据亮点的Word格式草稿

intv_ai_mk11快速上手&#xff1a;浏览器输入URL→发送帮我写周报→获得带数据亮点的Word格式草稿 1. 什么是intv_ai_mk11 intv_ai_mk11是一款基于Llama架构的AI对话助手&#xff0c;拥有7B参数规模&#xff0c;运行在GPU服务器上。它能像真人助手一样理解你的需求&#xff0…...

Qwen3.5-4B-Claude-Opus保姆级教程:Web端UI功能分区与高级参数联动说明

Qwen3.5-4B-Claude-Opus保姆级教程&#xff1a;Web端UI功能分区与高级参数联动说明 1. 模型与平台介绍 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF 是一个基于 Qwen3.5-4B 的推理蒸馏模型&#xff0c;重点强化了结构化分析、分步骤回答、代码与逻辑类问题的处理能…...

如何让你的论文表达直接提升一个等级

在科研写作的道路上&#xff0c;许多科研人员常陷入一种难以言说的困境&#xff1a;明明实验数据详实&#xff0c;研究过程严谨&#xff0c;但落笔成文后&#xff0c;语言却显得平淡无力。文章往往停留在“描述事实”的层面&#xff0c;仅仅机械地陈述“做了什么”和“发现了什…...

鸿蒙 ArkTS 高级样式复用:@Extend 装饰器完全解析(比 @Styles 更强大)

&#x1f525;前言&#xff1a;在上一篇文章《鸿蒙 ArkTS 样式复用&#xff1a;Styles 装饰器从入门到实战》中&#xff0c;我们学习了使用 Styles 实现基础样式复用。 但 Styles 不支持传参、不能使用组件专有属性&#xff0c;在复杂 UI 场景下能力有限。 &#x1f4cc; 本文…...

从智能门铃到工业质检:拆解5个嵌入式AI落地案例,看模型压缩和硬件选型怎么选

从智能门铃到工业质检&#xff1a;5个嵌入式AI实战案例与选型策略 智能门铃的摄像头突然捕捉到一张陌生面孔&#xff0c;300毫秒内完成本地人脸比对并推送到主人手机——这背后是嵌入式AI在消费电子领域的典型应用。当算法工程师面对瑞芯微RK3588和地平线旭日X3两颗芯片的选型表…...

避开深沟槽工艺的“坑”:从DLTS数据到TCAD仿真的硅光电二极管陷阱态优化实战

硅光电二极管陷阱态优化的工程实践&#xff1a;从DLTS表征到TCAD仿真 在半导体制造领域&#xff0c;深沟槽隔离&#xff08;DTI&#xff09;工艺虽然能有效解决器件间的串扰问题&#xff0c;但其引入的界面陷阱态却成为光电二极管性能提升的"隐形杀手"。工艺工程师们…...

芯片研发的残酷真相:流片成功只是开始

芯片成功"点亮"那一刻&#xff0c;项目算完成了吗&#xff1f;如果你认为算&#xff0c;那大概率还没经历过真正的芯片项目后期。事实是&#xff0c;点亮和demo跑通&#xff0c;只不过是拿到了入场券而已。真正的战斗&#xff0c;从客户拿到样片那一刻才开始。很多工…...