Hier werden wir das Hello World-Beispiel von Erster Artikel etwas komplizierter machen und versuchen, uns an das Wasser namens Ratpack zu gewöhnen.
Da der Typ hier angegeben ist, wird er absichtlich redundant geschrieben. Wirf keine Steine.
public final class Sample3_HelloWorldRevisited {
public static void main( String[] args ) throws Exception {
ServerConfig config = ServerConfig.builder()
.port( 5050 )
.connectTimeoutMillis( 10000 )
.threads( 8 )
.development( true )
.build();
Registry registry = Registry.empty();
Action<Chain> handlers = ( Chain chain ) -> {
Handler handler = ( Context ctx ) -> {
ctx.render( "hello, world" );
};
chain.get( handler );
};
RatpackServer.of( spec -> spec.serverConfig( config )
.registry( registry )
.handlers( handlers ) )
.start();
}
}
ServerConfig
Eine Klasse zum Ändern von Servereinstellungen. Hier können Sie die Portnummer usw. einstellen.
Ich denke, es ist am einfachsten, "ServerConfigBuilder" zu verwenden, sobald es verfügbar ist. Es gibt auch Methoden zum Lesen von Einstellungen aus Dateien, z. B. "json ()" und "yaml ()". Es gibt andere Methoden zum Festlegen von Systemeigenschaften und Argumenten, sodass Sie "ServerConfig" nach Belieben erstellen können.
development(boolean)
Ein Flag, das den Entwicklungsmodus aktiviert. Wenn aktiviert, wird automatisch ein Handler hinzugefügt, wenn ein Fehler auftritt.
Nachfolgend finden Sie einen Vergleich, wenn ein tatsächlicher 404-Fehler auftritt. Zusätzlich zum Vorhandensein oder Fehlen der 404-Fehlerseite von Ratpack werden Sie gewarnt, Ihren eigenen Handler im Protokoll zu definieren.
development(true)
19:02:26.231 [ratpack-compute-1-2] ERROR ratpack.error.internal.DefaultDevelopmentErrorHandler - 404 client error for request to /hoge
development(false)
19:00:55.861 [ratpack-compute-1-4] WARN ratpack.error.internal.DefaultProductionErrorHandler - Default production error handler used to render client error, please add a ratpack.error.ClientErrorHandler instance to your application (method: GET, uri: /hoge)
development (true)
ist einfach zu bedienen, es wird jedoch empfohlen, einen eigenen ErrorHandler
in einer Produktionsumgebung zu erstellen.
Es gibt zwei Arten von Fehlerbehandlungsroutinen: "ClientErrorHandler" und "ServerErrorHandler".
ClientErrorHandler
wird aufgerufen, wenn ein Problem mit der Clientanforderung vorliegt, z. B. 404.
Überschreibt die Methode "error ()", die die Statuscodes "Context" und "int" als Argumente verwendet.
ServerErrorHandler
wird aufgerufen, wenn im Handler ein Fehler auftritt.
Es gibt eine error ()
Methode, die einen Context
und eine Throwable
verwendet, die die aufgetretene Ausnahme darstellt.
Da "ServerErrorHandler" der letzte Schritt bei der Fehlerbehandlung in Ratpack ist, wird grundsätzlich empfohlen, keine Ausnahme auszulösen.
Übrigens, da diese Methode "Throwable" als Argument anstelle von "Exception" hat, wird sie verarbeitet, selbst wenn "Error" auftritt. In Java wird im Allgemeinen empfohlen, "Fehler" nicht abzufangen. In diesem Fall ist es besser, nicht zu versuchen, eine Wiederherstellung durchzuführen.
Registry
Diese Klasse registriert Teile wie Module im Ratpack-Server. Wir werden diesmal nichts verwenden, also werden wir eine leere Implementierung verwenden. Die oben genannten Fehlerbehandlungsroutinen usw. können durch Registrierung in dieser Registrierung verwendet werden.
handlers
Ratpack-Routen von mehreren "Handlern", gruppiert nach "Kette". Die Methode "Chain.get (String, Handler)" bindet eine HTTP-GET-Anforderung an einen Argumenthandler. Die Zeichenfolge des ersten Arguments ist der Pfad. Wenn dies wie folgt weggelassen wird, wird es der Route zugeordnet.
Context.render (Object)
ist die Methode, die den Hauptteil der Antwort ausgibt.
Da String diesmal als Argument übergeben wird, wird diese Zeichenfolge unverändert ausgegeben. Es ist jedoch auch möglich, ein anderes Objekt als die Zeichenfolge zu übergeben.
render ()
ist ein Mechanismus, bei dem der in Registry
registrierte Renderer
je nach Typ aufgerufen und in eine Antwort umgewandelt wird.
String hat einen eingebauten "Renderer" (um genau zu sein, CharSequence), so dass Sie ihn mit "Context.render ()" aufrufen können, ohne einen Renderer explizit zu registrieren.
RatpackServer.of( spec -> spec.serverConfig( config )
.registry( registry )
.handlers( handlers ) )
.start();
Erstellen Sie eine "RatpackServer" -Instanz, indem Sie "ServerConfig", "Registry" und "Handler" in der Methode "of ()" festlegen.
Die Methode start ()
startet den Server und akzeptiert Anforderungen.
Jede Methode von "RatpackServerSpec" ("serverConfig ()", "registry ()", "handler ()" und "handlers ()") hat eine Instanz der entsprechenden Klasse als Argument und über "Action". Es gibt verschiedene Dinge zu setzen. Persönlich finde ich es, wie im Beispiel erwähnt, einfacher, Instanzen für Konfigurationen und Registrierung und "Aktion" für Handler zu verwenden. Dieser Bereich ist subjektiv, daher empfehlen wir Ihnen, verschiedene Dinge auszuprobieren.
Recommended Posts