Object Computing,Inc. 推出了 Micronaut Servlet,这是一个新的Micronaut项目,该项目实现了一个Micronaut HTTP服务器,该服务器返回到Servlet API,该API允许流行的Servlet容器作为服务器运行。Micronaut Servlet为熟悉传统Servlet容器并在Servlet生态系统中进行大量投资的开发人员提供了一种替代方法。特别是,这些开发人员通常属于以下三类之一:[1]那些想使用Micronaut,但目标部署环境基于servlet的开发人员;[2]与默认的基于Netty的Micronaut HTTP服务器提供的事件循环模型相比,更喜欢Servlet API的每连接线程模型的人;[3]那些希望与Micronaut结合使用的现有servlet和/或servlet过滤器。

Micronaut最初称为Project Particle,它是一个基于JVM的全栈框架,用于创建可以用Java,Groovy和Kotlin编写的基于微服务的,云原生和无服务器的应用程序。Micronaut 由首席软件工程师Graeme Rocher以及OCI的Grails和Micronaut产品负责人于2018年3月推出,随后于2018年5月开源

Micronaut的HTTP内置服务器的特定非Netty功能可与受支持的servlet容器一起使用,即TomcatJettyUndertow。Micronaut Servlet包括一些扩展,以简化Servlet API的使用。这包括以下功能:接收传统的Servlet API接口,**HTTPServletRequest以及HttpServletResponse作为方法参数;利用Micronaut接口ReadableWritable**简化servlet的读/写操作;并支持多部分表格。

在传统的Servlet API的开发,它需要覆盖的方法,doGet(),**doPost()等,使用HTTPServletRequestHTTPServletResponse**接口,用于处理HTTP动词servlet应用的生命周期内。现在可以将这些接口传递到用户定义的方法中,如下所示:

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Get("/hello")
void process(HttpServletRequest request, HttpServletResponse response) throws IOException {
    response.addHeader(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_PLAIN);
    response.setStatus(HttpStatus.ACCEPTED.getCode());
    try (final PrintWriter writer = response.getWriter()) {
        writer.append("Hello ").append(request.getParameter("name"));
        writer.flush();
        }
    }
    

该**process()方法用@Get注释修饰,以定义REST端点/hello**,并接受两个HTTP接口来构建服务器响应。这为Servlet API方法提供了更优雅的解决方案。

提供了Micronaut Servlet中的new **ReadableWritable**接口,以简化从servlet请求读取和写入servlet响应的操作:

import io.micronaut.core.io.Readable;
import io.micronaut.core.io.Writable;

@Post(value = "/writable", processes = "text/plain")
Writable readAndWrite(@Body Readable readable) throws IOException {
    return out -> {
        try (BufferedReader reader = new BufferedReader(readable.asReader())) {
            out.append("Hello ").append(reader.readLine());
            }
        };
    }
    

Micronaut批注**@Part可以应用于方法参数,以指示它们已绑定到multipart/form-data POST**请求的特定部分。请考虑以下方法:

@Post(value = "/multipart", consumes = MediaType.MULTIPART_FORM_DATA, produces = "text/plain")
String multipart(
        String attribute,
        @Part("one") Person person,
        @Part("two") String text,
        @Part("three") byte[] bytes,
        @Part("four") javax.servlet.http.Part raw,
        @Part("five") CompletedPart part) {
    return "Ok";
    }
    

第一个参数,**attribute中,内multipart()方法表示与匹配的属性,参数名称的属性的列表。用@Part**注解修饰的其余参数声明为:

  • **application/json**可能绑定到POJO的内容类型
  • 类型 String
  • 类型 byte
  • javax.servlet.http.Part,一个Servlet API接口
  • CompletedPart,一个Micronaut界面,代表多部分请求的完整部分。

默认情况下,多部分处理是禁用的,但可以通过遵循配置属性来启用。

GraalVM支持也可用于Micronaut Servlet,但是此时只有Tomcat和Jetty可以利用GraalVM。使用Undertow的应用程序将无法与GraalVM一起编译

Micronaut Servlet加入了许多Micronaut 项目。例如Micronaut AWSMicronaut GCPMicronaut DataMicronaut for SpringMicronaut Test

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐