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!")); } }
実際のアプリケーションとしてテストできる。