Memilih Kerangka Web Java sekarang? [Tutup]

149

kami berada dalam tahap perencanaan untuk memigrasikan situs web besar yang dibangun di atas kerangka kerja mvc yang dikembangkan khusus ke kerangka web berbasis java yang menyediakan dukungan bawaan untuk ajax, konten media kaya, mashup, tata letak berbasis template, validasi, html maksimum / pemisahan kode java. Grails terlihat seperti pilihan yang baik, namun, kami tidak ingin menggunakan bahasa skrip. Kami ingin terus menggunakan java. Tata letak berbasis template adalah perhatian utama karena kami bermaksud untuk menggunakan aplikasi web ini dengan beberapa situs web dengan fungsi yang sama tetapi tampilan dan nuansa yang sangat berbeda.

Apakah solusi berbasis portal cocok untuk masalah ini?

Wawasan apa pun tentang menggunakan "Spring Roo" atau "Play" akan sangat membantu.

Saya memang menemukan posting serupa seperti ini , tetapi sudah lebih dari setahun. Banyak hal pasti telah berubah dalam waktu yang bersamaan!

EDIT 1: Terima kasih atas jawaban yang bagus! Situs ini berubah menjadi sumber tunggal terbaik untuk info programmer dalam parit. Namun, saya mengharapkan lebih banyak informasi tentang menggunakan duo portal-cms. Jahia mencari barang. Adakah yang serupa?

kosmos
sumber
1
"Kami tidak ingin menggunakan bahasa scripting", itu memalukan, mengapa jika saya bisa bertanya? jika Anda menyukai kerangka Play Anda harus mencoba JRuby with Rails. Ini bukan Java biasa, tapi super mudah untuk memanggil kelas Java dari JRuby.
Luke
2
Grails (yaitu Groovy) bermain sangat baik dengan java, tidak perlu takut.
Erich Kitzmueller
4
@hbagchi: Hanya ingin tahu; 4 bulan kemudian, kerangka mana yang Anda pakai? Senang dengan itu?
Jonik
1
bukankah ini pertanyaan 'komunitas wiki'?
mickthompson
11
"Tapi ini lebih dari satu tahun. Hal-hal pasti telah berubah dalam waktu yang bersamaan!" ... Oh ya, Tuhan melarang Anda untuk menggunakan teknologi yang lebih dari 12 bulan! Peluru Perak pasti telah diciptakan untuk sementara ... :-)
ObiWanKenobi

Jawaban:

146

Apakah solusi berbasis portal cocok untuk masalah ini?

Secara pribadi, saya akan tinggal jauh dari solusi Portal gemuk besar (mereka sering pembunuh produktivitas). Saya telah mendengar hal-hal baik tentang Gatein tetapi saya tidak memiliki pengalaman nyata dengannya.

Wawasan apa pun tentang menggunakan "Spring Roo" atau "Play" akan sangat membantu.

Tentang Spring Roo, saya sudah membaca jawaban sebelumnya seperti Spring roo Vs (Wicket dan Spring) dan hal-hal lain melalui Internet tapi saya masih tidak yakin (mungkin saya tidak mengerti), saya tidak yakin akan jatuh tempo. , dan, yang lebih penting, saya benar-benar bertanya-tanya apa yang dilakukan SpringSource dengan Grails dan Roo (tidak, Grails vs Roo - mengapa SpringSource mendorong dua teknologi yang sangat mirip? tidak meyakinkan saya bahwa mereka berdua akan bertahan hidup).

Saya tidak bisa bicara banyak tentang Play. Saya telah melihat demo seperti semua orang tetapi saya ingin membaca umpan balik kehidupan nyata. Sampai saat itu, saya akan menunggu.

Saya memang menemukan posting serupa (...). Hal-hal pasti telah berubah dalam waktu yang bersamaan!

Ya dan tidak :) Tapi mari kita masuk neraka kerangka presentasi: tidak ada jawaban tunggal untuk pertanyaan Anda (seperti satu tahun yang lalu), ada selusin kerangka kerja di sana dan tidak ada pemenang yang jelas. Hanya mengutip beberapa:

  • JSF: Banyak skeptis tentang kerangka kerja berbasis komponen ini, termasuk saya jadi saya bukan yang terbaik untuk membicarakannya tetapi ...
  • JSF 2 (+ CDI / Weld): skeptis JSF didorong ( oleh Gavin King ) untuk "melihat kedua". Memang, saya pikir JSF 2 adalah peningkatan besar, terutama dengan CDI, tapi ... ini masih sangat baru (mengerti, tidak ada feeback). Jika Anda ingin menggunakan Java EE 6, periksa saja.
  • Gawang: Kerangka kerja berbasis komponen lain yang mendapatkan lebih banyak perhatian. Saya mendengar sebagian besar hal-hal baik tentang itu: lebih sederhana dari JSF, desain yang bagus, testabilitas tinggi, ramah desainer HTML, dll. Anda mungkin menyukainya.
  • Permadani: Hanya saja, (lihat Mengapa Anda berhenti menggunakan Permadani? )
  • Struts 2, Spring MVC, Stripes: Kerangka kerja berbasis aksi. Semua layak dan akan memenuhi kebutuhan Anda (secara pribadi, saya suka Stripes dan konvensi atas pendekatan konfigurasi, lihat Stripes vs Struts2 untuk mendapatkan ide tentang itu).
  • GWT, Flex, Grails: Ini bukan mungkin bukan yang Anda cari. Saya tidak dapat benar-benar berbicara tentang (versi terbaru) Flex dan GWT tetapi saya tahu bahwa Grails memang memiliki beberapa penggemar .

Sebenarnya, saya sarankan untuk melihat presentasi Matt Raible , dia benar-benar melakukan pekerjaan yang hebat dalam membandingkan kerangka kerja web, menunjukkan kekuatan dan kelemahan mereka, mengumpulkan fakta dan angka, menunjukkan tren ... Saya sarankan:

Sungguh, lihat presentasi ini, mereka akan membantu Anda menemukan kerangka kerja yang sesuai (tidak ada jawaban yang unik tetapi Anda dapat membatasi pilihan dengan menghilangkan) dan mungkin mengubah sudut pandang Anda.

Thivent Pascal
sumber
Pekerjaan yang bagus, saya telah menarik :). +1
Adeel Ansari
Tembakan Matt baru-baru ini dari java web f / ws mengerikan. Jika saya ingat struts secara praktis memiliki skor yang sama jauh lebih kaya f / ws lebih kuat. Tidak ada cara siapa pun dapat menganggap sesuatu sebagai jane biasa seperti struts yang layak mendapat skor yang hanya beberapa poin di belakang GWT atau Wicket.
mP.
3
Ya, saya menyadari beberapa orang tidak suka "matriks" atau logika saya untuk peringkatnya. Pada akhirnya, apa yang ingin saya lakukan dengan matriks ini adalah hanya menyoroti teknik untuk memilih kerangka kerja web. Anda dapat membaca tentang logika di balik peringkat saya di posting blog berikut: raibledesigns.com/rd/entry/how_i_calculated_ratings_for
Matt Raible
Presentasi Matt Raible tentang membandingkan JSF, Spring MVC, Stripes, Struts 2, Tapestry dan Wicket memang sudah cukup tua ...
Nerrve
1
@ iberck, saya telah bereksperimen dengan AngularJS baru-baru ini. Jujur, saya percaya itu akan membayangi sebagian besar jika tidak SEMUA kerangka kerja web saat ini tanpa berlebihan. Ini hanya kerangka JS untuk sisi klien maka Anda dapat mengambil data Anda dengan mudah dan "efisien" dari server menggunakan REST. Cobalah, ini akan mengguncang dunia Anda: angularjs.org
Muhammad Gelbana
41

Saya telah menggunakan Spring 3 dan Jquery untuk sementara waktu tetapi mendengar tentang Play dan mencobanya. Saya sangat suka itu, Play sangat cocok antara sesuatu seperti PHP dan kerangka kerja Java yang berat seperti Spring.

Hal yang paling saya sukai dari bermain adalah:

  • Sangat mudah untuk mendapatkan aplikasi bermain dari tanah, Anda harus pergi cukup jauh dengan pengkodean dan konfigurasi untuk mendapatkan aplikasi kasar sederhana di layar dengan Spring (meskipun Spring 3 telah membuatnya jauh lebih mudah).
  • Spring Security memang luar biasa, tetapi harus dibayar dengan kompleksitas. Modul keamanan Play sangat sangat sederhana dan mencakup kebutuhan mungkin 90% aplikasi di luar sana.
  • Anda dapat membuat perubahan kode dan tekan refresh di browser untuk melihat perubahan seperti dengan PHP alih-alih harus melakukan seluruh hal penempatan ulang dengan kerangka kerja berbasis Servlet.
  • Pesan kesalahan ditampilkan dengan baik dan tidak begitu samar sebagian besar waktu. Bermain masih perlu bekerja pada penanganan kesalahan mereka
  • Ada mekanisme plugin untuk Play yang cukup sederhana.
  • Ketekunan objek dilakukan dengan sangat baik karena dalam basis data memori dan JPA dilengkapi dengan kerangka kerja sehingga tidak ada konfigurasi alat ketekunan objek eksternal. Pergi dari database memori ke RDBMS yang sebenarnya adalah perubahan satu baris dalam file konfigurasi.
  • Pengaturan MVC dilakukan dengan sangat baik. Kelas Model yang Anda perluas untuk membuat objek domain Anda terintegrasi dengan manajer entitas JPA. Mereka bukan hanya POJO.
  • Memetakan URL ke pengontrol adalah sederhana dan fleksibel dan semuanya dalam satu file "rute".
  • Setiap kali Anda membuat proyek Play menangani semua dependensi jar dan Play memiliki utilitas untuk gerhana (atau IDE apa pun yang Anda suka) proyek sehingga mengimpor langsung ke IDE favorit Anda.

Hal yang saya tidak suka tentang Play

  • Dokumentasi belum sampai di sana, banyak fitur tidak berdokumen masih ada.
  • Kerangka kerjanya adalah server sehingga Anda harus mendedikasikan port untuk setiap aplikasi. Saya pikir seseorang sedang bekerja pada plugin virtual host tapi saya belum melihatnya beraksi.
  • Ini masih muda, proyek ini luar biasa dan teknologi luar biasa tetapi benar-benar membutuhkan lebih banyak pengembang. Saya ingin mendedikasikan waktu untuk itu, kita lihat saja nanti.
chad
sumber
17

Pilihan utama bagi saya adalah Wicket . Hapus pemisahan markup dan kode java. Sangat mudah untuk menulis dan menggunakan komponen. Mudah digunakan Ajax, testability. Anda dapat men-debug langsung ke halaman / komponen Anda dan tidak mendapatkan pesan kesalahan samar dari implementasi JSF Anda;)

Ada juga gawang perbandingan yang bagus <--> JSF dalam hal kinerja

bert
sumber
4
+1 Belum lagi orientasi OOP murni dengan pewarisan, polimorfisme, dan komposisi. Juga, file XML-config gratis!
Xavi López
3
Mengaku bahwa orang downvote di sini karena mereka tidak suka kerangka yang disarankan. Bukan hanya jawaban Wicket saya, hampir semua memiliki suara turun ..
bert
13

Tiga pilihan teratas bagi saya adalah (menurut abjad):

Mereka:

  • memiliki dukungan ajax yang baik
  • memungkinkan Anda membuat situs web yang sebenarnya, bukan aplikasi (seperti GWT)
  • stabil, terdokumentasi dengan baik, banyak digunakan
  • MVC
  • Jawa murni
  • integrasi yang mudah dengan Spring sebagai middleware
Bozho
sumber
17
Saya tidak tahu bagaimana orang dapat mengklaim bahwa JSF dapat digunakan untuk "membuat situs web yang sebenarnya". Kerangka kerja apa pun yang memaksa penggunaan POST segera hilang dalam hal ini.
Stefan Tilkov
3
Saya telah mengembangkan "situs web sebenarnya" dengan JSF, dan saya telah menggunakannya, tanpa masalah. Selanjutnya, menggunakan POST hanya dipaksakan saat Anda memposting sesuatu. Anda selalu bebas menggunakan navigasi GET sederhana. Secara teoritis, salah menggunakan GET jika Anda memodifikasi sumber daya, bukan?
Bozho
ditambah, Anda harus menurunkan suara Pascal, juga untuk menyarankan JSF;)
Bozho
3
Jangan tersinggung tetapi ini terdengar seperti daftar 'barang' yang telah Anda lihat bertahun-tahun yang lalu, jadi saya hanya terkejut melihatnya. Dalam pengalaman saya, sejak saat itu sebagian besar telah pindah dari kesalahan langkah itu. Saya kira jika Anda sudah ahli dalam hal ini, itu akan menjadi pilihan yang sangat baik, tetapi saya akan peduli untuk programmer O&M yang harus mengambil alih setelah para ahli meninggalkan proyek. Tidak ada yang benar-benar mempelajari hal ini lagi IMO.
Manius
1
Baris komentar ini memang sedikit lucu. JSF tentu saja dapat digunakan dengan baik untuk situs web, dan memiliki dukungan kelas satu untuk GET dan POST. Gunakan apa yang paling tepat untuk situasi yang dihadapi. Memang seperti yang ditunjukkan Bozho, jika memodifikasi sumber daya jangan gunakan GET, kalau tidak, jangan lakukan.
Arjan Tijms
11

Play sangat mirip dengan ROR, versi ROR di java

Gerard Banasig
sumber
10

Berbeda dengan jawaban lain, saya ingin menyoroti kelemahan (IMHO) dari kerangka kerja web populer:

JSF2 - Dirilis dan sudah tua. Masih hanya beberapa berita / artikel / posting blog / pengalaman keluar. Saya skeptis. Masih menunggu rilis utama berikutnya dari Richfaces / Icefaces yang sepenuhnya mendukung jsf 2 - saat ini hanya alpha build yang dapat diunduh.

Struts 2 - Tampaknya hanya hal yang baik jika Anda masih mengandalkan struts dan ingin memperbaiki sebagian besar kode Anda. Kalau tidak, jangan.

GWT - Saya tidak suka satu halaman dan pendekatan javascript java->. Saya tidak yakin apakah satu sesi - beberapa tampilan / jendela dapat dengan mudah dicapai. Bagi saya, kerangka kerja ini harus digunakan untuk aplikasi internet kaya satu-jendela pengguna besar.

Gawang - Pendekatan yang bagus, tetapi sedikit bertele-tele dan dokumentasi yang tersedia terlalu sedikit (kecuali gawang yang bagus dalam buku aksi, tetapi ini hanya mencakup 1,3). Juga, bagi saya tidak ada proyek besar yang dibangun di atasnya. Dan saya saat ini tidak dapat melihat di mana jalan gawang bepergian atau apakah sudah didorong ke jalan buntu.

Spring MVC - Belum mencoba ini, tetapi Anda harus memasukkan banyak toples (kekacauan musim semi) di classpath Anda untuk bekerja dengan framework ini dengan benar. Dan itu bergantung pada JSP (di sebagian besar proyek), yang saya anggap sudah mati. Dan Anda hanya mendapatkan kerangka kerja MVC murni - semua hal lain (ajax dan lainnya) harus diimplementasikan / diintegrasikan.

Stripes - Kerangka kerja MVC yang dirancang kecil dan bagus, tapi terlalu sedikit dokumentasi, terlalu sedikit komit / komuter, terlalu sedikit rilis, terlalu sedikit dukungan industri, terlalu sedikit aktivitas milis.

Saya juga ingin tahu apakah saya melewatkan kerangka utama di luar sana (saya sengaja meninggalkan permadani) yang mungkin menjadi pilihan bagi Anda (dan juga bagi saya juga).

MRalwasser
sumber
Saya telah menemukan cara terbaik untuk menangani ini mirip dengan apa yang telah dilakukan kerangka kerja web Python: Pilih dan Pilih dari yang terbaik. Sebagai contoh: Spring + JAX-RS
Adam Gent
Komentar Anda tentang GWT salah. Cukup mudah untuk memiliki banyak halaman terpisah daripada satu hal besar. Masukkan tautan ke halaman lain untuk memulai "aksi" lain dan semuanya baik-baik saja.
mP.
Saya juga berbicara tentang banyak jendela (atau tab). Apakah benar-benar mungkin untuk menggunakan lebih dari satu jendela menggunakan sesi yang sama secara bersamaan?
MRalwasser
1
+1 Mengapa pos ini mendapat 2 suara negatif? Pendapat skeptis seperti ini sama pentingnya (jika tidak lebih) dari yang positif! Dan ini bagi saya sepertinya yang konstruktif.
Piotr Sobczyk
8

Saya telah sukses besar dengan JAX-RS . Ini adalah satu-satunya Java Web Framework yang memiliki semacam spesifikasi JSR dan beberapa implementasi selain dari servlet dan portlet spec (walaupun ini bisa menjadi hal yang buruk).

Satu hal yang buruk dan bagus tentang Java adalah Anda dapat memilih dan mencocokkan kerangka kerja (python juga memiliki fitur / masalah ini). Sangat menyenangkan karena Anda tidak harus meletakkan semua telur dalam satu keranjang.

Berikut ini adalah resep umum Java Web Application Stack:

Javascript / Flash + Permintaan / Penanganan respons + Injeksi Ketergantungan + Kegigihan

Javascript: JQuery, Prototype, Dojo

Permintaan / Tanggapan: Spring MVC, Stripes, dan JAX-RS favorit saya (Jersey, Apache CXF)

Ketergantungan Injeksi: Musim Semi, Guice

Kegigihan: JPA (Hibernate, penyimpanan Google App), Hibernate, JDO, dan lainnya.

Saya juga telah sukses besar dalam menggunakan AspectJ untuk membuat Java "kurang menyedot". Dengan menggunakan Spring's @Configurable dan ITD mixins AspectJ Anda bisa mendapatkan Rails seperti objek Domain (ini benar apa yang Roo lakukan tetapi Anda tidak perlu Roo untuk melakukan ini).

Adam Gent
sumber
4
Saya setuju. Dibutuhkan lebih banyak waktu untuk mengatur tumpukan Anda sendiri, tetapi kemudian Anda mendapatkan apa yang Anda inginkan. Saat ini saya menggunakan jQuery, Jersey, Spring dan JPA2. JAX-RS sangat bagus karena Anda memiliki kendali penuh atas apa tanggapan Anda.
Brian DiCasa
6

Saya telah menemukan garis - garis menjadi sangat efektif dan mengejutkan ringan .... ini bertujuan untuk menjadi lebih ringan daripada struts . Saya telah mendengar dari teman-teman yang merupakan pengembang web penuh waktu bahwa JSF tidak layak untuk diganggu, meskipun saya tidak memiliki pengalaman langsung, dan tidak dapat mendukungnya dengan contoh (!).

James B
sumber
5

Lihatlah RESThub , yang mengikuti prinsip yang sama dengan Play! tetapi diimplementasikan dengan menggunakan kembali beberapa kerangka / alat kelas perusahaan seperti Maven 3 / Spring 3 / Jersey / jQuery.

RESThub sangat mengganggu dibandingkan dengan kerangka kerja lain karena ini adalah toolkit tumpukan penuh, tetapi tanpa server berbasis MVC atau kerangka kerja berbasis servlet. Sebagai gantinya, ia menggunakan GUI berbasis jQuery UI yang menggunakan layanan web JAX-RS (REST) ​​dan sistem templating Javascript berdasarkan embeddedJs.

Server tidak memiliki kewarganegaraan, dan kami menggunakan HTML5 sessionStorage untuk menjaga sesi di sisi klien. Pendekatan ini dirancang untuk RIA dan skalabilitas.

Beberapa aplikasi demo disediakan (bahkan jika sedang dibangun).

Sébastien Deleuze
sumber
3

JSF adalah framewrok yang bagus, tetapi JSF 1.2 tidak memiliki visi selama bertahun-tahun yang akan datang dari rilisnya. JSF 2.0 terlihat menjanjikan dan memiliki banyak hal baru yang ditambahkan dari JSF 1.2 seperti dukungan ajax, facelet, dukungan Annotation, dan konvensi default (kurang XML), pembuatan komponen lebih mudah dari 1.2.

Ini terintegrasi dengan baik dengan Spring juga, jika Anda peduli untuk dukungan DI.

pengguna252942
sumber
2

Saya akan merekomendasikan kedua rekomendasi Spring. Saya bukan penggemar berat GWT, saya pikir Java -> Javascript crosscompiler belum ada. Saya bekerja pada aplikasi AJAX yang menggunakan pegas di server dan jQuery di klien. Meskipun secara teknis tidak ada dukungan "out-of-the-box" untuk jQuery, mengimplementasikan pegas-MVC AjaxView sudah sangat sederhana dan membutuhkan sekitar 25 baris kode.

DC
sumber
2

Mungkin sedikit terlambat ke pertunjukan, tetapi saya harus menyebutkan Vaadin . Pemrograman dilakukan di Jawa secara eksklusif, dengan pendekatan berbasis komponen. Komunikasi Client-Server lebih tentang interaksi pengguna daripada transportasi data, semua logika bisnis berada di server.

KoW
sumber
1
Saya menggunakan vaadin, itu tidak baik untuk membangun aplikasi yang kompleks.
Radan
1

Ext GWT + Spring

Mihir Mathuria
sumber
jika gwt adalah opsi daripada melihat vaadin.com/home
Alexander Sidikov Pfeif
1

Saya pikir apa yang Anda cari adalah sesuatu yang dekat dengan Jahia. Ini mendukung GWT, Mashups, Konten Media dll.

http://www.jahia.org/cms/lang/en/home/Jahiapedia/Jahia_Templates http://www.jahia.net/downloads/jahia/jahia6.0.0/readme/index.html

Syed M Shaaf
sumber
Kelihatan bagus! Apakah ini open source / gratis untuk perusahaan? Apakah ini banyak digunakan?
kosmos
Ini memiliki versi Komunitas dengan semua hal dasar dan dan versi perusahaan dengan beberapa tambahan dll. Periksa tempat ini jahia.com/jahia/Jahia
Syed M Shaaf
1

PERANGKAT LUNAK PORTAL

Beberapa tahun yang lalu telah menggunakan perangkat lunak portal " Backbase " ini tidak terlalu matang. Tapi itu bagus dan mudah untuk dikembangkan.

YoK
sumber
1

Lihatlah ItsNat

ItsNat pada dasarnya adalah browser Java W3C di server, luar biasa sederhana (DHTML di server), mempromosikan aplikasi Antarmuka Halaman Tunggal intensif AJAX

jranranz
sumber
Tidak ada yang seperti fitur showcase lengkap dari kerangka kerja: innowhere.com/itsnat/…
Ravindranath Akila
0

Sesuatu yang layak lebih dari sekedar peluru adalah kerangka kerja RIA berbasis pemain. Ex. Adobe Flex + Java (Tentu saja ini agak bergantung pada apakah "situs" Anda benar-benar "situs" atau lebih seperti "aplikasi", Anda tidak akan membuat situs blog di Flex.)

ajax,

Dalam AJAX-as-a-buzzword sense, Flex biasanya menggunakan AMF (protokol biner yang lebih efisien daripada protokol yang digunakan oleh aplikasi AJAX), meskipun Anda juga dapat melakukan hal-hal AJAX ketat dengan Flex juga. Jadi Flex mendukung AJAX, tetapi juga mendukung "lebih baik daripada AJAX".

konten media yang kaya, mashup,

Karena Flex berjalan pada platform 'mesin virtual' Flash, saya pikir sedikit yang perlu ditambahkan.

tata letak berbasis template,

Tidak yakin apa maksudnya ini, tetapi kedengarannya seperti Flex mxml.

validasi,

Didukung tentu saja, meskipun Anda dapat memutuskan untuk melakukan beberapa hal khusus jika Anda ingin mendapatkan kemewahan. (Bukan berarti Anda harus.) Yang menyenangkan adalah Anda bisa mendapatkan secanggih yang Anda inginkan - atau tidak.

pemisahan html / kode java maksimum

Anda tidak dapat dipisahkan dengan menggunakan pendekatan pengembangan 'mesin virtual' seperti Flex / Silverlight / JavaFX. Ini tidak hanya memungkinkan Anda untuk menjaga kode presentasi Anda terpisah dari logika sisi-server dan lapisan akses data Anda - itu memastikan bahwa mereka terpisah. 'Virtualisasi' lingkungan pengembangan Anda memberi Anda kompatibilitas lintas-peramban, platform target yang konsisten, tidak ada kekhawatiran tentang peramban baru atau peramban baru yang merusak aplikasi Anda, kemampuan debugging terbaik seperti java, dan produk akhir yang lebih profesional / mengesankan. .

Manius
sumber