
build.gradle.kts
piranha-embedded は組み込み用のランタイム。
piranha-embedded はHTTPサーバを含まないため、piranha-http-impl でサーバ実装 DefaultHttpServer を使う。
plugins {
application
}
repositories {
mavenCentral()
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}
dependencies {
implementation("cloud.piranha:piranha-embedded:22.8.0")
implementation("cloud.piranha.http:piranha-http-webapp:22.8.0")
implementation("cloud.piranha.http:piranha-http-impl:22.8.0")
testImplementation("org.junit.jupiter:junit-jupiter:5.7.2")
}
application {
mainClass.set("piranha.example.helloworld.App")
}
tasks.named<Test>("test") {
useJUnitPlatform()
}
HelloWorldServlet.java
単純なサーブレット。
public class HelloWorldServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); try (PrintWriter out = response.getWriter()) { out.println(""" <!DOCTYPE html> <html> <head> <title>Hello World!</title> </head> <body> <h1>Hello World!</h1> </body> </html> """); } } }
App.java
EmbeddedPiranhaBuilder でサーブレットを登録し、DefaultHttpServer でサーバプロセスに組み込み。
import cloud.piranha.embedded.EmbeddedPiranha; import cloud.piranha.embedded.EmbeddedPiranhaBuilder; import cloud.piranha.http.impl.DefaultHttpServer; import cloud.piranha.http.webapp.HttpWebApplicationServerProcessor; public class App { public static void main(String[] args) { EmbeddedPiranha piranha = new EmbeddedPiranhaBuilder() .servletMapped(HelloWorldServlet.class, "/*") .buildAndStart(); DefaultHttpServer server = new DefaultHttpServer(8080, new HttpWebApplicationServerProcessor(piranha), false); server.start(); System.out.println("server started."); } }
実行
$ ./gradlew run $ open http://localhost:8080

AppTest.java
先程は、DefaultHttpServer で処理していた箇所を単一のリクエストとレスポンスを指定。
class AppTest { @Test void test() throws Exception { EmbeddedPiranha piranha = new EmbeddedPiranhaBuilder() .servletMapped(HelloWorldServlet.class, "/*") .buildAndStart(); EmbeddedRequest request = new EmbeddedRequestBuilder().build(); EmbeddedResponse response = new EmbeddedResponseBuilder().bodyOnly(true).build(); piranha.service(request, response); assertTrue(response.getResponseAsString().contains("Hello World!")); } }
実際のアプリケーションとしてテストできる。