服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - 使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

2021-01-30 12:26tuicool Java教程

Undertow是一个非常轻量并高性能的web server,它来自 JBoss。支持blocking和non-blocking两种NIO API。接下来通过本文给大家介绍使用Spring Boot 内嵌容器 Undertow创建服务器的方法,感兴趣的朋友一起看看吧

undertow是一个web服务器,那么它就需要具备的现代web服务器的基本特性,比如servlet,jsp,文件服务器,代理服务器,安全认证等。undertow目前已经实现了绝大多数功能,并且因为wildfly通过了javaee7 tck认证,所以可以说undertow是一个通过servlet 3.1认证的web服务器和容器。这篇文章只分析undertow的主干流程上的主要功能,即undertow-core和undertow-servlet。

1、简介

undertow是一个非常轻量并高性能的web server,它来自 jboss。支持blocking和non-blocking两种nio api。

由于它是用java写的,所以它可以被那些jvm-based 的应用通过内嵌的方式来使用。甚至jboss的wilffly服务器在内部使用undertow来提高服务器的性能。

在本文中,我们将介绍undertow的主要功能并给出使用代码。

2. 为什么要选择undertow?

  • 轻量级 :undertow 是非常小的,只有不到1mb。在内嵌模式下,运行时只占heap空间的4mb左右。
  • servlet 3.1:完美支持 servlet 3.1
  • web socket :支持 web socket (包括jsr-356)
  • 长连接 :默认情况下 ,undertow 通过添加keep-alive 的response header来支持长连接。它通过重用连接信息(connection details)来改善长连接的性能。

3. 使用undertow

不多说,让我们使用undertow来创建一个简单的web server吧!

3.1. maven 依赖

加入如下依赖:

要构建一个可运行的jar,我们还需要添加一个maven-shade-plugin。像下面这样:

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

最新版的undertow已经放到了maven 中央仓库,随便玩耍吧。

3.2. 简单的server

仅仅需要下面的几行代码,就可以创建一个简单的web server,undertow的入口使用的是builder api。

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

这里我们使用builder api把server绑定到8080端口上。同时我们使用了lambda表达式配置了一个handler。你也可以不用lambda表达式做同样的事情:

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

最主要的事情就是这里对httphandler api的使用。这个是根据我们的需要定制undertow应用程序的最重要的武器。

在这里,我们添加了一个自定义的handler,逻辑就是让每个request都有一个content-type: text/plain response header。

同样的,如果你想让每个response都返回默认的text文本,你可以像下面这样来定义:

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

3.3.安全访问

在大多数情况下,我们不希望所有的用户都可以访问我们的server。通常,只有那些携带了合法“护照”的才可以访问。在undertow上,我们同样可以实现这样的机制。

要想实现这个,我们只需要创建一个认证管理器,这个管理器会检查每个请求的用户信息。

下面我们就来实现一个自定义的identitymanager:

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

一旦认证mananger被创建,我们需要创建一个“领地”来保存用户的信息。

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

这里我们使用了 authenticationmode.pro_active,表示每个来到这个server的请求都将会经过我们指定的认证机制来踊跃的进行认证。

如果我们使用了authenticationmode.constraint_driven模式,那么只有那些被明确要求过滤的请求才会经过认证机制。

现在,我们只需要把保存用户信息的“领地”和认证管理器关联起来就可以了。

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

截止目前,我们已经创建了两个用户实例。一旦server启动了以后,要想访问,我们就需要使用这个两个证书才行。

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

3.4. web socket

使用undertow的websockethttpexchange api创建web socket exchange channel 同样非常简单。

下面,我们就打开一个socket通信channel,在/importsourceapp path上:

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

然后我们就可以创建一个html页面 index.html,然后使用js的websocket api来连接到这个channel上了。

3.5. file server

使用undertow,我们也可以创建一个文件服务器(file server),它可以显示目录内容,并直接从目录中提供文件:

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

你甚至都不需要穿件任何ui来显示目录。undertow 为你提供了一个开箱即用的页面。

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

4. spring boot plugin

spring boot把undertow也内嵌进去了,作为继tomcat和jetty之后第三个内嵌的servlet 容器。要想在spring boot中使用undertow只需要加下面的依赖就是了:

使用 Spring Boot 内嵌容器 Undertow创建服务器的方法

5. 总结

在本文中,我们了解了undertow以及如何使用它创建不同类型的服务器。

以上所述是小编给大家介绍的spring boot 内嵌容器 undertow,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:https://www.tuicool.com/articles/RVvMNzV

延伸 · 阅读

精彩推荐