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。