Skip to content
程序猿DD程序猿DD
主页
最新发布
Java新特性
玩转IDEA
旧版博客open in new window
社区交流open in new window
  • Java 18

    • 指定UTF-8为默认字符集
      • 简单Web服务器
        • jwebserver
          • HTML页面准备
            • jwebserver命令启动
            • Java代码启动
            • 新增@snippet标签
            • Java 17

              • 密封类
                • switch的模式匹配(预览)
                • Java 16

                  • record类
                    • instanceof增强
                      • Stream转List增强
                        • Stream.toList()的性能比较
                        • Java 15

                          • 文本块
                            • 隐藏类
                            • Java 14

                              • switch表达式增强
                              • Java 13

                                • Java 12

                                  • Java 11

                                    • 移除JavaEE和CORBA模块
                                    • Java 10

                                      • 局部变量的类型推断
                                      • Java 9

                                        • 交互式编程环境JShell
                                          • 不可变集合的快捷创建方法

                                          Java 18 新特性:简单Web服务器

                                          程序猿DD原创2022年4月20日
                                          • Java
                                          • Java 18
                                          大约 3 分钟

                                          此页内容
                                          • jwebserver
                                            • HTML页面准备
                                            • jwebserver命令启动
                                          • Java代码启动

                                          # Java 18 新特性:简单Web服务器

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

                                          # jwebserver

                                          本篇内容对应视频已完成录制,点击查看:Java 18 新特性:Simple Web Server(1)open in new window

                                          该工具的定位官方文档中说了一堆:

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

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

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

                                          # HTML页面准备

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

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

                                          第三步:随便写点HTML内容,比如下面这样(懒的敲的话,可以根据图片内的提示直接获取本案例需要的所有内容):

                                          # jwebserver命令启动

                                          打开终端,输入命令:

                                          $ jwebserver
                                          

                                          启动速度很快,可以看到如下输出:

                                          尝试访问一下http://127.0.0.1:8000/,就可以获得之前准备的HTML内容了。

                                          同时,在终端也看到了请求日志:

                                          127.0.0.1 - - [20/4月/2022:00:10:58 +0800] "GET / HTTP/1.1" 200 -
                                          127.0.0.1 - - [20/4月/2022:00:10:58 +0800] "GET /banner-spring-boot.png HTTP/1.1" 200 -
                                          

                                          关于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/,可以看到根目录/下的文件夹和文件:

                                          怎么样?是不是还挺简单好用的?好了,今天的分享就到这里!如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群open in new window,参与交流与讨论,更好的学习与进步!

                                          # Java代码启动

                                          详细步骤我录了个视频放到B站了,感兴趣的小伙伴可以点击查看Java 18 新特性:Simple Web Server(2)open in new window

                                          代码比较简单,直接贴出来了:

                                          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();
                                              }
                                          }
                                          

                                          巩固一下上一篇jwebserver的内容,根据上面的代码,如果用jwebserver来实现,实际上就是下面的命令:

                                          jwebserver -p 9000 -d / -o info
                                          

                                          关于命令模式和Java代码模式,可以对照着一起去理解,看看自己的理解对不对吧。

                                          如果您学习过程中如遇困难?可以加入我们超高质量的技术交流群open in new window,参与交流与讨论,更好的学习与进步!另外,不要走开,关注我!持续更新Java新特性教程open in new window!

                                          上次编辑于: 2022/5/21 02:29:53
                                          贡献者: dd
                                          上一页
                                          指定UTF-8为默认字符集
                                          下一页
                                          新增@snippet标签
                                          © 2016 - 2022 didispace.com 版权所有
                                          沪ICP备14037150号-3
                                          Copyright © 2022 程序猿DD