
RIFE2 ist ein Full-Stapel, eine No-Declaration, ein Rahmen, um schnell und mühelos Webanwendungen mit modernem Java zu erstellen.
RIFE2 basiert auf den Fundamenten des ursprünglichen Rife-Frameworks, das von 2002 bis 2010 beliebt war. Seitdem haben sich die Welt und Java verändert, und viele der ursprünglichen Rife-APIs konnten schließlich durch reine Java, No-XML, No-Yaml ersetzt werden, wodurch nur der Typ-Safe-Ausdruckscode zurückbleibt.
RIFE2 bewahrt die meisten ursprünglichen Funktionen und fügt neue hinzu, für einen Bruchteil des Fußabdrucks und mit noch größerer Entwicklerproduktivität als zuvor. RIFE2 wird von Geert Bevin erstellt, einem der ersten Java -Champions und Sprecher auf vielen Java -Konferenzen.
Tipp: Wenn Sie Intellij IDEA als IDE verwenden, sollten Sie das RIFE2 Idea-Plug-In installieren.
Es wird Ihre Codierungserfahrung erheblich verbessern.
Dies ist ein kurzes Tutorial. Die vollständige Dokumentation enthält viel mehr Informationen.
Die RIFE2 Javadocs ergänzen die Dokumentation mit vielen weiteren Details.
Eine häufig gestellte Frage lautet: "Warum RIFE2 gegenüber anderen beliebten Frameworks wählen?"
Die kurze Antwort lautet, dass RIFE2 anders ist und so konzipiert wurde, dass es mit kleinen Teams schnell Webanwendungen erstellt. Es hat den Status-Quo herausgefordert und wird immer herausfordern. Es ist nicht dazu gedacht, Frameworks auf Unternehmensebene wie Spring oder JEE zu ersetzen, obwohl ich es für Unternehmensanwendungen verwendet habe. RIFE2 nutzt die Leistung der Java -Plattform für Webanwendungen, die Sie normalerweise mit Skriptsprachen schreiben würden. Produktivität und Wartbarkeit sind der Schlüssel, und Sie werden feststellen, dass Sie 90% der Arbeiten für 10% der Anstrengungen erledigen und sich weiterhin in andere Java -Bibliotheken und -Filegien integrieren können, in denen Sie sie benötigen.
RIFE2 verfügt über Funktionen, die nach 20 Jahren noch nicht anderswo gefunden werden können:
Web-Kontinuationen, bidirektionale Vorlagen-Engine, bean-zentriertes Metadatensystem, Vollstapel ohne Abhängigkeiten, metadatengesteuerte SQL-Bauherren, Content-Management-Framework, vollständige Lokalisierungsunterstützung, Ressourcenabstraktion, persistierte Cron-ähnliche Scheduler, kontinuationsbasierte Workflow-Engine.
Die meisten dieser Funktionen haben den Test der Zeit bestanden, und nach 20 Jahren ist immer noch eine großartige Möglichkeit für die Entwicklung von Webanwendungen. RIFE2 hat aus jahrzehntelange Erfahrung gelernt und verbessert diese Originalmerkmale in vielerlei Hinsicht.
RIFE2 verfügt auch über Funktionen, die von anderen übernommen wurden, aber normalerweise fehlt die Bequemlichkeit der engen Integration in einem Vollstapel.
Zum Beispiel: Außerkundenspanner-Tests können die Struktur der resultierenden Vorlagen analysieren, ohne HTML analysieren zu müssen. Das Authentifizierungssystem wird aus allen anderen Teilen des Vollstacks erstellt und nahtlos in Ihre Webanwendung integriert. URLs werden aus der Konfiguration generiert, die Sie ohne das Risiko erstellt haben, Stale zu werden. HTML, SVG, SQL), ... und vieles mehr.
RIFE2 ist die rote Pille , bereit zu zeigen, wie tief das Kaninchenloch gehen kann, wenn Sie dafür bereit sind!
So fangen Sie mit einer Hello World -Website an.
public class HelloWorld extends Site {
public void setup () {
get ( "/hello" , c -> c . print ( "Hello World" ));
}
public static void main ( String [] args ) {
new Server (). start ( new HelloWorld ());
}
} Die main rundet den integrierten eingebetteten Stegserver auf, sodass Sie sofort mit der Codierung beginnen können. Die gleiche HelloWorld -Klasse kann als Parameterwert für Ihr web.xml hinzugefügt werden, wodurch absolute Änderungen Ihres Code zwischen Entwicklung und Produktion erforderlich sind.
Außerhalb der Kontenentests ist ein erstklassiger Bürger in RIFE2, der direkt mit Ihrer Site Klasse interagiert, um die vollständigen Interaktionen zur Reaktionsreaktion zu simulieren, ohne einen Servlet-Container aufzunehmen.
So können Sie das obige Beispiel mit Junit 5 testen:
class HelloTest {
@ Test void verifyHelloWorld () {
var m = new MockConversation ( new HelloWorld ());
assertEquals ( "Hello World" , m . doRequest ( "/hello" ). getText ());
}
}Einer der sprödersten Aspekte der Entwicklung von Webanwendungen ist die Eingabe von Links und URLs als Textliterale, ohne dass etwas garantiert, dass sie korrekt bleiben, wenn sich Ihre Routen ändern oder wenn Sie Ihre Anwendung in verschiedenen Webanwendungskontexten bereitstellen. Mit der Routing -API von RIFE2 können alle Anwendungslinks ohne Anstrengungen in Ihrem Namen korrekt generiert werden.
Fügen wir eine neue Route hinzu, die einen HTML -Link zur vorherigen Hello World -Route enthält.
Sie können sehen, dass Routen nicht innerhalb der setup() -Methode erstellt werden müssen, sondern auch als Teil der Konstruktion Ihrer Site erstellt werden können, sodass die Routen in Feldern gespeichert werden können.
public class HelloLink extends Site {
Route hello = get ( "/hello" , c -> c . print ( "Hello World" ));
Route link = get ( "/link" , c -> c . print ( "<a href='" + c . urlFor ( hello ) + "'>Hello</a>" ));
public static void main ( String [] args ) {
new Server (). start ( new HelloLink ());
}
}Wir können dies jetzt als solche testen:
class HelloTest {
@ Test void verifyHelloLink () {
var m = new MockConversation ( new HelloLink ());
assertEquals ( "Hello World" , m . doRequest ( "/link" )
. getParsedHtml (). getLinkWithText ( "Hello" )
. follow (). getText ());
}
}Der Hauptimpuls, bei dem ich Rife2 erstellt habe, war Rifes einzigartiger Vorlagemotor.
Die Vorlagen von RIFE2 enthalten zwei Hauptkonzepte:
Ihr Java -Code komponiert das endgültige Layout, indem Blöcke zugewiesen und angehängt werden und Daten in Werte einfügen. Schreiben wir das HelloLink -Beispiel oben mit einer Vorlage um.
In diesem Beispiel wird in Java noch keine Vorlagemanipulation durchgeführt.
Stattdessen wird das Wert -Tag {{v route:hello/}} eingeführt, das automatisch durch die URL der Route ersetzt wird, die mit diesem Feldnamen in Ihrem aktiven Site verfügbar ist.
public class HelloTemplate extends Site {
Route hello = get ( "/hello" , c -> c . print ( "Hello World" ));
Route link = get ( "/link" , c -> c . print ( c . template ( "HelloTemplate" )));
public static void main ( String [] args ) {
new Server (). start ( new HelloTemplate ());
}
} Mit HelloTemplate.html ist:
<!DOCTYPE html >
< html lang =" en " >
< body >
< a href =" {{v route:hello/}} " > Hello </ a >
</ body >
</ html >Beachten Sie, dass RIFE2 Ihre Vorlagen intern in Java -Klassen verwandelt, indem Sie optimierte Bytecode generieren.
Dies geschieht während der Entwicklung im Fliegen. Für die Produktion können Vorlagen vorkompiliert werden, was sie unglaublich schnell macht.
Ändern wir das Beispiel mehr und erstellen Sie eine einzige Route, auf der sowohl get als auch post -Anfragen reagieren können.
get -Anforderung zeigt ein Formular mit einer einzelnen Schaltfläche an, um zu klicken.post erhält die Einreichung des Formulars und zeigt Hello World an. public class HelloForm extends Site {
Route hello = route ( "/hello" , c -> {
var t = c . template ( "HelloForm" );
switch ( c . method ()) {
case GET -> t . setBlock ( "content" , "form" );
case POST -> t . setBlock ( "content" , "text" );
}
c . print ( t );
});
public static void main ( String [] args ) {
new Server (). start ( new HelloForm ());
}
} Mit HelloForm.html ist:
<!DOCTYPE html >
< html lang =" en " >
< body >
<!--v content/-->
<!--b form-->
< form action =" {{v route:action:hello/}} " method =" post " name =" hello " >
<!--v route:inputs:hello/-->
< input type =" submit " name =" Submit " >
</ form >
<!--/b-->
<!--b text--> < p id =" greeting " > Hello World </ p > <!--/b-->
</ body >
</ html >HINWEIS: Das
route:Value -Tag aus dem obigen wurde inroute:action:undroute:inputs:generieren versteckter HTML -Formulareingänge für Parameter anstelle von Abfragestnparametern.
Sie können sehen, dass die Vorlage alle Teile enthält, um beide Seiten zu erstellen:
contentformtextIn Java weisen wir dem Wert einfach einen Block zu, je nachdem, was wir anzeigen möchten.
Ein weiterer Vorteil ist, dass die Vorlagen -Tags von RIFE2 HTML -Kommentare sein können, was sie völlig unsichtbar macht. Auf diese Weise können Sie wie gewohnt an Ihrem HTML -Design arbeiten und die Vorlagendatei mit einem regulären Browser anzeigen.
Lassen Sie uns schließlich einen Test für diese Funktionalität einfügen:
class HelloTest {
@ Test void verifyHelloForm () {
var m = new MockConversation ( new HelloForm ());
var r = m . doRequest ( "/hello" ). getParsedHtml ()
. getFormWithName ( "hello" ). submit ();
assertEquals ( "Hello World" , r . getParsedHtml ()
. getDocument (). body ()
. getElementById ( "greeting" ). text ());
}
}Danke fürs Lesen bis zum Ende!
Dies war lediglich eine kurze Einführung in den Appetit. RIFE2 verfügt über ein umfassendes und leicht zu lesenes Handbuch mit vielen Beispielen und pragmatischen Erklärungen.
Wenn Sie Fragen, Vorschläge, Ideen haben oder einfach nur chatten möchten, können Sie sich gerne in den Foren veröffentlichen oder sich uns an Discord anschließen.
Lesen Sie mehr in der vollständigen Dokumentation und in RIFE2 Javadocs.