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容器一起使用,即Tomcat,Jetty和Undertow。Micronaut Servlet包括一些扩展,以简化Servlet API的使用。这包括以下功能:接收传统的Servlet API接口,**HTTPServletRequest
以及HttpServletResponse
作为方法参数;利用Micronaut接口Readable
和Writable
**简化servlet的读/写操作;并支持多部分表格。
在传统的Servlet API的开发,它需要覆盖的方法,doGet()
,**doPost()
等,使用HTTPServletRequest
和HTTPServletResponse
**接口,用于处理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 **Readable
和Writable
**接口,以简化从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 AWS,Micronaut GCP,Micronaut Data,Micronaut for Spring和Micronaut Test。