轻量级奇迹:Java 18迎来迷你Web服务器的时代

简介: 轻量级奇迹:Java 18迎来迷你Web服务器的时代

JEP 408,是这次 Java 18 推出的一个比较独立的全新功能点。我们可以通过命令行工具来启动一个提供静态资源访问的迷你 Web 服务器。

jwebserver

这里我简单总结几点,方便大家理解:

  • 构建目的是应用于测试与教学,不是为了替代 Jetty、Nginx 等高级服务器
  • 不提供身份验证、访问控制或加密等安全功能
  • 仅支持 HTTP/1.1,不支持 HTTPS
  • 仅支持 GET、HEAD 请求
  • 可以通过命令行、Java 类启动

下面我们通过一个构建 HTML 页面的例子,来尝试一下 jwebserver 的功能。

HTML 页面准备

第一步:创建一个文件夹,比如就叫 jwebserver

第二步:创建一个 html 文件,就叫 index.html

第三步:随便写点 HTML 内容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
  <h1>Hello World</h1>
</body>
</html>

jwebserver 命令启动

打开终端,输入命令:

$ jwebserver

尝试访问一下 http://127.0.0.1:8000/ ,就可以获得之前准备的 HTML 内容了,同时,在终端也看到了请求日志。

关于 jwebserver 还有一些可选的参数,具体有这些:

-h or -? or --help
 Prints the help message and exits.
-b addr or --bind-address addr
 Specifies the address to bind to.  Default: 127.0.0.1 or ::1 (loopback).  For
 all interfaces use -b 0.0.0.0 or -b ::.
-d dir or --directory dir
 Specifies the directory to serve.  Default: current directory.
-o level or --output level
 Specifies the output format.  none | info | verbose.  Default: info.
-p port or --port port
 Specifies the port to listen on.  Default: 8000.
-version or --version
 Prints the version information and exits.

其中比较有用的是

  • -b:要绑定的 IP 地址
  • -p:要启动的访问端口
  • -d:要提供服务的目录
  • -o:控制台的输出级别

所以一个较为完整的启动命令是这样的:

jwebserver -p 9000 -d / -b 127.0.0.1 -o info

这条命令是一个以根目录 / 启动的服务器,服务端口是 9000,绑定地址是 127.0.0.1,控制台输出级别使用 info。

再尝试访问一下:http://127.0.0.1:9000/,可以看到根目录 / 下的文件夹和文件:

Java 代码启动

public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world!");
        var addr = new InetSocketAddress(9000);
        var server = SimpleFileServer.createFileServer(
                addr, Path.of("/"), SimpleFileServer.OutputLevel.INFO);
        server.start();
    }
}


相关文章
|
6天前
|
Java Maven Spring
Java Web 应用中,资源文件的位置和加载方式
在Java Web应用中,资源文件如配置文件、静态文件等通常放置在特定目录下,如WEB-INF或classes。通过类加载器或Servlet上下文路径可实现资源的加载与访问。正确管理资源位置与加载方式对应用的稳定性和可维护性至关重要。
|
9天前
|
存储 安全 搜索推荐
理解Session和Cookie:Java Web开发中的用户状态管理
理解Session和Cookie:Java Web开发中的用户状态管理
31 4
|
8天前
|
Java 持续交付 项目管理
使用Maven进行项目管理:提高Java Web开发的效率
Maven 是一款强大的项目管理和构建自动化工具,广泛应用于Java社区。它通过依赖管理、构建生命周期管理、插件机制和多模块项目支持等功能,简化了项目的构建过程,提高了开发效率。本文将介绍Maven的核心功能及其在Java Web开发中的应用。
24 0
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
34 1
|
1月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
72 4
|
1月前
|
Java Shell Maven
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
Flink-11 Flink Java 3分钟上手 打包Flink 提交任务至服务器执行 JobSubmit Maven打包Ja配置 maven-shade-plugin
95 4
WK
|
14天前
|
安全 Java 编译器
C++和Java哪个更适合开发web网站
在Web开发领域,C++和Java各具优势。C++以其高性能、低级控制和跨平台性著称,适用于需要高吞吐量和低延迟的场景,如实时交易系统和在线游戏服务器。Java则凭借其跨平台性、丰富的生态系统和强大的安全性,广泛应用于企业级Web开发,如企业管理系统和电子商务平台。选择时需根据项目需求和技术储备综合考虑。
WK
17 0
|
前端开发 Java Linux
Java服务器宕机解决方法论(上)
Java服务器宕机解决方法论(上)
744 0
Java服务器宕机解决方法论(上)
|
Java 调度
Java服务器宕机解决方法论(下)
Java服务器宕机解决方法论(下)
369 0
|
6天前
|
安全 Java 测试技术
Java并行流陷阱:为什么指定线程池可能是个坏主意
本文探讨了Java并行流的使用陷阱,尤其是指定线程池的问题。文章分析了并行流的设计思想,指出了指定线程池的弊端,并提供了使用CompletableFuture等替代方案。同时,介绍了Parallel Collector库在处理阻塞任务时的优势和特点。