由于昨天要写的文章没有写完,于是今天早上我四点半就“自然醒”了,心里面有事,睡觉也不安稳。洗漱完毕后,我打开电脑,正襟危坐,摆出一副要干架的态势,不能再拖了。
要写的文章中涉及到一串代码,关于 Undertow 的一个入门示例,贴出来大家看一下。
public class UndertowTest {public static void main(final String[] args) {
Undertow server = Undertow.builder()
.addHttpListener(8080, "localhost")
.setHandler(new HttpHandler() {
@Override
public void handleRequest(final HttpServerExchange exchange) throws Exception {
exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "text/plain");
exchange.getResponseSender().send("Hello World");
}
}).build();
server.start();
}
}
Undertow 是大名鼎鼎的 Red Hat(红帽子)公司开发的一款基于 NIO 的高性能 Web 服务器软件,不需要单独安装软件,只需要几行代码就可以在 Java 应用程序中启动一个 Web 服务,就像上面那段代码。
前提条件是你已经在 pom.xml 文件中引入了 Undertow 的依赖。
<dependency><groupId>io.undertow</groupId>
<artifactId>undertow-core</artifactId>
<version>2.0.28.Final</version>
</dependency>
没有任何错误提示,真的是郁闷。主机名 localhost 没有问题,端口 8080 也没有被占用,但 main 方法在没有任何外力的因素下直接结束了。在浏览器地址栏中输入 :8080 自然也无法显示“Hello World”。
回看 Run 面板中的输出信息,唯一让我感到疑惑的就是下面这行:
进程已结束,退出代码-1073741819 (0xC0000005)
正常来说,程序执行的输出结果如下所示:
进程已结束,退出代码0
退出代码是 0,表示程序正常结束;退出代码是 1073741819,它代表什么意思呢?
肯定是非正常呗。我第一时间想到的原因是,会不会是我代码写错了?于是查看了 Undertow 的官网,一个单词一个单词的检查,甚至上了 beyond compare 进行比较,也没有找到任何可疑之处。
折腾得够呛,于是不得不上了谷歌大法:
换了各种关键词,查阅了各种文章,没有找到可行的解决办法。谷歌无果,我想那就试试某度吧,结果搜到了游戏,天地良心啊。
搜索引擎靠不住,那就只能靠自己了。于是我写下了这段代码:
public class TestClose {public static void main(String[] args) {
try {
Thread.sleep(10000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
运行结果大吃一惊。我揉了好几次眼睛,甚至上了倍清亮眼药水,结果也是非正常退出,错误代码和之前的 Undertow 一致。
搞什么嘛,这可是 Thread.sleep(10000000) 休眠大法啊,也能在一秒内结束,那一定不是 Undertow 的代码示例写错了,而是 IDEA 在作妖。
事到如今,我想起了被打入冷宫的 Eclipse。同样的代码,进程没有立即结束掉。
Undertow 的代码示例也没有问题,程序没有立即结束。
在浏览器中输入 :8080 也能正常访问。