
Rife2 adalah kerangka kerja penuh, tanpa deklarasi, untuk membuat aplikasi web dengan cepat dan mudah dengan Java modern.
Rife2 dibangun di atas fondasi kerangka kerja Rife asli yang populer dari tahun 2002-2010. Sejak itu, dunia dan Java telah berubah dan banyak dari Rife API yang asli akhirnya dapat diganti dengan Java murni, no-xml, no-yaml, hanya menyisakan kode ekspresif jenis-aman.
Rife2 melestarikan sebagian besar fitur asli dan menambahkan yang baru, untuk sebagian kecil dari jejak kaki dan dengan produktivitas pengembang yang lebih besar dari sebelumnya. Rife2 dibuat oleh Geert Bevin, salah satu juara dan pembicara Java pertama di banyak konferensi Java.
Kiat: Jika Anda menggunakan ide intellij sebagai IDE Anda, pertimbangkan untuk menginstal plug-in Ide Rife2.
Ini akan sangat meningkatkan pengalaman pengkodean Anda.
Ini adalah tutorial singkat, dokumentasi lengkap berisi lebih banyak informasi.
The Rife2 Javadocs melengkapi dokumentasi dengan lebih banyak detail.
Pertanyaan yang sering diajukan adalah: "Mengapa memilih Rife2 daripada kerangka kerja populer lainnya"?
Jawaban singkatnya adalah bahwa Rife2 berbeda , dirancang untuk membuat aplikasi web dengan cepat dengan tim kecil. Itu telah menantang dan akan selalu menantang status-quo. Ini tidak dimaksudkan untuk menggantikan kerangka kerja tingkat perusahaan seperti Spring atau JEE, meskipun saya telah menggunakannya untuk aplikasi perusahaan. Rife2 memanfaatkan kekuatan platform Java untuk aplikasi web yang biasanya Anda tulis dengan bahasa skrip. Produktivitas dan pemeliharaan adalah kunci, dan Anda akan menemukan bahwa Anda mendapatkan 90% dari pekerjaan yang dilakukan untuk 10% dari upaya tersebut, dan masih dapat berintegrasi dengan perpustakaan dan kerangka kerja Java lainnya di mana Anda membutuhkannya.
Rife2 memiliki fitur yang setelah 20 tahun masih tidak dapat ditemukan di tempat lain:
Kelanjutan Web, mesin templat dua arah, sistem metadata yang berpusat pada kacang, tumpukan penuh tanpa ketergantungan, pembangun SQL yang digerakkan oleh metadata, kerangka kerja manajemen konten, dukungan lokalisasi penuh, abstraksi sumber daya, penjadwal seperti cron yang bertahan, mesin alur kerja berbasis kontinuasi.
Sebagian besar fitur ini telah teruji oleh waktu dan setelah 20 tahun masih terbukti menjadi pilihan yang bagus untuk pengembangan aplikasi web. Rife2 telah belajar dari pengalaman puluhan tahun dan meningkatkan fitur -fitur asli ini dalam banyak hal.
Rife2 juga memiliki fitur yang telah diadopsi oleh orang lain, tetapi itu biasanya tidak memiliki kenyamanan integrasi yang ketat di seluruh tumpukan penuh.
Misalnya: Tes out-of-container dapat menganalisis struktur templat yang dihasilkan tanpa harus menguraikan HTML, sistem otentikasi dibangun dari semua bagian lain dari tumpukan penuh dan terintegrasi dengan mulus ke dalam aplikasi web Anda, URL yang dihasilkan dari konfigurasi yang Anda buat tanpa risiko yang berbasis teks, Templat Logika, Templat Tanpa Logika, Templat Tanpa Logika, Templat Tanpa Logika adalah Templat Tanpa Logika, Templat Tanpa Logika adalah Templat Pleely, dan Templat Tanpa Logika, Templates, Templat Tanpa Logika, Templates, Templat Tanpa Logika, Templates, Templates. Html, svg, sql), ... dan banyak lagi.
Rife2 adalah pil merah , siap menunjukkan seberapa dalam lubang kelinci bisa pergi, jika Anda siap untuk itu!
Beginilah cara Anda memulai dengan situs Hello World .
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 ());
}
} Metode main memutar server jetty tertanam terintegrasi, sehingga Anda dapat segera mulai mengkode. Kelas HelloWorld yang sama dapat ditambahkan sebagai nilai parameter ke web.xml Anda, yang membutuhkan tidak ada perubahan pada kode Anda antara pengembangan dan produksi.
Pengujian out-of-container adalah warga negara kelas satu di Rife2, secara langsung berinteraksi dengan kelas Site Anda untuk mensimulasikan interaksi respons permintaan penuh, tanpa harus memutar wadah servlet.
Beginilah cara Anda dapat menguji contoh di atas dengan junit 5:
class HelloTest {
@ Test void verifyHelloWorld () {
var m = new MockConversation ( new HelloWorld ());
assertEquals ( "Hello World" , m . doRequest ( "/hello" ). getText ());
}
}Salah satu aspek yang paling rapuh dari pengembangan aplikasi web adalah mengetik tautan dan URL sebagai literal teks, tanpa apa pun yang menjamin mereka tetap benar ketika rute Anda berubah atau ketika Anda menggunakan aplikasi Anda dalam konteks aplikasi web yang berbeda. Routing API Rife2 memungkinkan semua tautan aplikasi Anda dihasilkan dengan benar tanpa upaya apa pun atas nama Anda.
Mari kita tambahkan rute baru yang berisi tautan HTML ke rute Hello World sebelumnya.
Anda dapat melihat bahwa rute tidak harus dibuat di dalam metode setup() , tetapi juga dapat dibuat sebagai bagian dari konstruksi Site Anda, memungkinkan rute disimpan di bidang.
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 ());
}
}Kami sekarang dapat menguji ini seperti itu:
class HelloTest {
@ Test void verifyHelloLink () {
var m = new MockConversation ( new HelloLink ());
assertEquals ( "Hello World" , m . doRequest ( "/link" )
. getParsedHtml (). getLinkWithText ( "Hello" )
. follow (). getText ());
}
}Dorongan utama yang membuat saya membuat Rife2, adalah mesin template unik Rife.
Template Rife2 berisi dua konsep utama:
Kode Java Anda akan menyusun tata letak akhir dengan menetapkan dan menambahkan blok, dan dengan memasukkan data ke dalam nilai. Mari kita tulis ulang contoh HelloLink di atas dengan templat.
Dalam contoh ini, belum ada manipulasi template yang dilakukan di Java.
Sebagai gantinya, ia memperkenalkan tag nilai {{v route:hello/}} , yang secara otomatis akan diganti dengan URL rute yang tersedia dengan nama bidang di Site aktif Anda.
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 ());
}
} Dengan HelloTemplate.html menjadi:
<!DOCTYPE html >
< html lang =" en " >
< body >
< a href =" {{v route:hello/}} " > Hello </ a >
</ body >
</ html >Perhatikan bahwa Rife2 secara internal mengubah templat Anda menjadi kelas Java dengan menghasilkan bytecode yang dioptimalkan.
Ini terjadi saat terbang selama pengembangan. Untuk produksi, templat dapat dikompilasi sebelumnya, membuatnya sangat cepat.
Mari kita ubah contoh lebih banyak dan buat satu rute yang dapat menanggapi permintaan get dan post .
get akan menampilkan formulir dengan satu tombol untuk mengklik.post akan menerima pengiriman formulir dan menampilkan Hello World . 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 ());
}
} Dengan HelloForm.html menjadi:
<!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 >Catatan: Bahwa
route:nilai tag dari atas telah dibagi menjadiroute:action:danroute:inputs:, menghasilkan input formulir HTML tersembunyi untuk parameter alih -alih parameter string kueri.
Anda dapat melihat bahwa templat berisi semua bagian untuk membuat kedua halaman:
contentform bernama bloktextDi Java, kami cukup menetapkan salah satu blok ke nilai, tergantung pada apa yang ingin kami tampilkan.
Manfaat lain adalah bahwa tag template Rife2 dapat berupa komentar HTML, membuatnya benar -benar tidak terlihat. Ini memungkinkan Anda untuk mengerjakan desain HTML Anda seperti biasa dan mempratinjau file template dengan browser biasa.
Akhirnya, mari kita sertakan tes untuk fungsi ini:
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 ());
}
}Terima kasih telah membaca sampai akhir!
Ini hanyalah pengantar cepat untuk mengampuni nafsu makan Anda, Rife2 hadir dengan manual yang komprehensif dan mudah dibaca dengan banyak contoh dan penjelasan pragmatis.
Jika Anda memiliki pertanyaan, saran, ide, atau hanya ingin mengobrol, jangan ragu untuk memposting di forum atau bergabung dengan kami di perselisihan.
Baca lebih lanjut dalam dokumentasi lengkap dan Rife2 Javadocs.