Micronaut Servlet-針對Servlet API開發人員的新Micronaut項目

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章