Şimdi bir Java Web Framework seçiyor musunuz? [kapalı]


149

ajax, zengin medya içeriği, mashup, şablon tabanlı mizanpaj, validasyon, maksimum html / Java kod ayrımı. Grails iyi bir seçim gibi görünüyordu, ancak bir betik dili kullanmak istemiyoruz. Java kullanmaya devam etmek istiyoruz. Şablon tabanlı mizanpaj, bu web uygulamasını benzer işlevselliğe sahip ancak radikal olarak farklı bir görünüm ve his veren birden fazla web sitesiyle kullanmayı amaçladığımız için birincil bir endişe kaynağıdır.

Portal tabanlı çözüm bu soruna iyi bir uyum sağlıyor mu?

"Spring Roo" veya "Play" kullanımına ilişkin her türlü fikir çok yardımcı olacaktır.

Ben gibi benzer mesajları buldunuz bu , ama daha bir yıl eski. Bu arada işler kesinlikle değişti!

DÜZENLEME 1: Harika cevaplar için teşekkürler! Bu site, siper içi programcı bilgisi için en iyi tek kaynak haline geliyor. Ancak, portal-cms ikilisi hakkında daha fazla bilgi bekliyordum. Jahia mallara benziyor. Benzer bir şey var mı?


1
"bir betik dili kullanmak istemiyoruz", bu bir utanç, neden sorabilirsem? Play çerçevesini beğenirseniz JRuby with Rails'i denemelisiniz. Düz Java değil, ancak JRuby'den Java sınıflarını aramak çok kolay.
Luke

2
Grails (yani Groovy) java ile çok iyi oynuyor, korkmanıza gerek yok.
Erich Kitzmueller

4
@hbagchi: Sadece merak ediyorum; 4 ay sonra hangi çerçeveye gittiniz? Bundan memnun musunuz?
Jonik

1
Bu bir 'topluluk wiki' sorusu değil mi?
mickthompson

11
“ama bu bir yıldan daha eski. Bu arada işler kesinlikle değişti!” ... Ah evet, Tanrı 12 aydan daha eski teknolojiyi kullanmanız yasaklıyor! Gümüş Kurşun kesinlikle bu arada icat edilmiştir ... :-)
ObiWanKenobi

Yanıtlar:


146

Portal tabanlı çözüm bu soruna iyi bir uyum sağlıyor mu?

Şahsen, büyük yağlı Portal çözümlerinden uzak dururum (genellikle verimlilik katilleridir). Gatein hakkında iyi şeyler duydum ama bununla ilgili gerçek bir deneyimim yok.

"Spring Roo" veya "Play" kullanımına ilişkin her türlü fikir çok yardımcı olacaktır.

Spring Roo hakkında, Spring roo Vs (Wicket ve Spring) ve internet üzerindeki diğer şeyleri daha önce okudum ama hala ikna olmadım (belki de anlamıyorum), olgunluğundan emin değilim ve daha da önemlisi, SpringSource'un Grails ve Roo ile ne yaptığını gerçekten merak ediyorum (hayır, Grails vs Roo - neden SpringSource iki benzer teknolojiyi zorluyor? İkisinin de hayatta kalacağına ikna etmiyor).

Play hakkında fazla bir şey söyleyemem. Demoyu herkes gibi gördüm ama gerçek hayattaki geribildirimleri okumak istiyorum. O zamana kadar bekleyeceğim.

Benzer gönderiler buldum (...). Bu arada işler kesinlikle değişti!

Evet ve hayır :) Ama sunum çerçevelerine cehenneme girelim: sorunuzun tek bir cevabı yok (bir yıl önce olduğu gibi), etrafında düzinelerce çerçeve var ve net bir kazanan yok. Birkaç alıntı yapmak için:

  • JSF: Ben de dahil olmak üzere bu bileşen tabanlı çerçeve hakkında çok şüpheci, bu yüzden bu konuda konuşmak için en iyi değilim ama ...
  • JSF 2 (+ CDI / Kaynak): JSF şüphecileri ( Gavin King tarafından ) "ikinci kez bakmaya" teşvik edilir . Gerçekten de, JSF 2'nin özellikle CDI ile büyük bir gelişme olduğunu düşünüyorum, ama ... hala oldukça yeni (anlayın, geri dönüş yoksun). Java EE 6'yı kucaklamak istiyorsanız, yine de göz atın.
  • Wicket: Daha fazla dikkat çeken başka bir bileşen tabanlı çerçeve. Bu konuda çoğunlukla iyi şeyler duyuyorum: JSF'den daha basit, güzel tasarım, yüksek test edilebilirlik, HTML tasarımcısı dostu, vb.
  • Goblen: Sadece yapma (bkz. Neden Goblen'i kullanmayı bıraktınız? )
  • Struts 2, Spring MVC, Stripes: Aksiyon temelli çerçeveler. Tüm iyi ve ihtiyaçlarınızı karşılayacaktır (kişisel olarak, Stripes'i ve konfigürasyon yaklaşımı konusundaki sözleşmesini seviyorum, bir fikir edinmek için Stripes vs. Struts2'ye bakın ).
  • GWT, Flex, Grails: Bunlar aradığınız şey olmayabilir. Gerçekten Flex ve GWT (yeni sürümleri) söz edilemez ama Grails da biliyor olması bazı fanlar .

Aslında, Matt Raible'ın sunumlarına bir göz atmanızı öneririm , web çerçevelerini karşılaştırmak, güçlü ve zayıf yönlerini göstermek, gerçekleri ve sayıları toplamak, trendleri göstermek için gerçekten iyi bir iş çıkardı ... Tavsiye ederim:

Gerçekten, bu sunumlara bir göz atın, uygun bir çerçeve bulmanıza yardımcı olurlar (benzersiz bir cevap yoktur, ancak seçimi ortadan kaldırarak sınırlayabilirsiniz) ve bakış açınızı değiştirebilir.


İyi bir iş çıkardım :). +1
Adeel Ansari

Matt'in java web f / ws'den son çekimleri korkunçtu. Eğer struts pratik olarak çok daha zengin daha güçlü f / ws aynı puanı vardı hatırlıyorum. GWT veya Wicket'in sadece birkaç puan gerisinde kalan bir payanda gibi herkesin bir şeyi sade bir jane olarak düşünmesinin bir yolu yoktur.
mP.

3
Evet, çok az insanın "matris" i ya da mantığı puanları için beğenmediğini fark ettim. Sonunda, bu matrisle yapmayı umduğum şey, sadece bir web çerçevesi seçmek için bir tekniği vurgulamaktı. Derecelendirmelerimin ardındaki mantığı aşağıdaki blog yayınında okuyabilirsiniz
Matt

Matt Raible'ın JSF, Spring MVC, Stripes, Struts 2, Goblen ve Wicket karşılaştırması hakkındaki sunumu gerçekten çok eskidir ...
Nerrve

1
@iberck, son zamanlarda AngularJS ile denemeler yapıyorum. Dürüst olmak gerekirse, abartılı olmadan TÜM mevcut web çerçeveleri olmasa bile en çok gölgede olacağına inanıyorum. Onun sadece istemci tarafı için bir JS çerçeve sonra REST kullanarak sunucudan kolayca ve "verimli" verilerinizi alabilirsiniz. Deneyin, dünyanızı sallayacak
Muhammad Gelbana

41

Bir süredir Spring 3 ve Jquery kullanıyorum ama Play'i duydum ve denedim. Gerçekten beğendim, Play PHP gibi bir şey ve Spring gibi ağır Java çerçeveleri arasında mükemmel bir uyum.

Oyun hakkında en sevdiğim şeyler:

  • Bir oyun uygulamasını yerden almak için çok kolay, Bahar ile ekranda basit bir crud uygulaması elde etmek için kodlama ve yapılandırma ile oldukça ileri gitmelisiniz (Bahar 3 çok daha kolay hale getirmesine rağmen).
  • Bahar Güvenliği harika ama karmaşıklık pahasına geliyor. Play'in güvenlik modülü çok basittir ve muhtemelen uygulamaların% 90'ının ihtiyaçlarını karşılar.
  • Servlet tabanlı çerçevelerle tüm yeniden dağıtma işini yapmak yerine PHP'de olduğu gibi değişikliği görmek için bir kod değişikliği yapabilir ve tarayıcıda yenile tuşuna basabilirsiniz.
  • Hata mesajları iyi görüntülenir ve çoğu zaman şifreli değildir. Play'in hala hata işleme konusunda çalışması gerekiyor
  • Play için oldukça basit bir eklenti mekanizması var.
  • Nesne kalıcılığı çok güzel yapılır, bir bellek içi veritabanı ve JPA çerçeveyle birlikte gelir, böylece harici nesne kalıcılığı araçlarının yapılandırması yoktur. Bellek içi veritabanından gerçek bir RDBMS'ye gitmek, yapılandırma dosyasında bir satır değişikliktir.
  • MVC kurulumu çok iyi yapılmış. Etki alanı nesnelerinizi oluşturmak için genişlettiğiniz Model sınıfı, JPA varlık yöneticisiyle bütünleşir. Onlar sadece POJO'lar değil.
  • URL'leri denetleyicilere eşlemek basit ve esnektir ve hepsi bir "rota" dosyasındadır.
  • Bir proje oluşturduğunuzda, Play tüm jar bağımlılıklarını işler ve Play'in doğrudan favori IDE'nize aktarması için eclipse-ify (veya istediğiniz herhangi bir IDE) projesine yardımcı olur.

Play hakkında sevmediğim şeyler

  • Belgeler henüz tam olarak orada değil, birçok belgelenmemiş özellik hala var.
  • Çerçeve sunucudur, bu nedenle her uygulamaya bir bağlantı noktası ayırmanız gerekir. Birinin sanal bir ana bilgisayar eklentisi üzerinde çalıştığını düşünüyorum ama henüz eylemde görmedim.
  • Genç, proje harika ve teknoloji harika ama gerçekten biraz daha geliştiriciye ihtiyacı var. Buna biraz zaman ayırmak isterim, göreceğiz.

17

Benim için en iyi seçim Wicket . İşaretleme ve java kodunun açıkça ayrılması. Bileşenleri yazmak ve kullanmak çok kolay. Ajax kullanımı basit, test edilebilirlik. Doğrudan sayfalarınızda / bileşenlerinizde hata ayıklayabilir ve JSF uygulamanızdan şifreli hata iletileri alamazsınız;)

Performans açısından iyi bir karşılaştırma küçüklüğü <--> JSF de var


4
+1 Kalıtım, polimorfizm ve kompozisyon ile saf OOP yönelişinden bahsetmiyorum. Ayrıca, XML-config dosyaları ücretsiz!
Xavi López

3
İnsanların burada önerilen çerçeveyi sevmedikleri için burada önemsiz kaldıklarını söyleyerek. Sadece Wicket cevabım değil, neredeyse hepsinin aşağı oyu var ..
bert

13

Benim için en iyi üç seçenek (alfabetik olarak):

Onlar:

  • iyi ajax desteğine sahip
  • (GWT gibi) uygulamaları değil, gerçek web siteleri oluşturmanıza olanak tanır
  • istikrarlı, iyi belgelenmiş, yaygın olarak kullanılan
  • MVC
  • saf Java
  • Middleware olarak Spring ile kolay entegrasyon

17
Nasıl bir JSF "gerçek web siteleri yapmak" için kullanılabilir iddia hiçbir fikrim yok. POST kullanımını zorlayan herhangi bir çerçeve bu bağlamda derhal kaybedilir.
Stefan Tilkov

3
JSF ile "gerçek web siteleri" geliştirdim ve böyle sorunsuz kullandım. Ayrıca, POST kullanımı yalnızca bir şey gönderirken zorlanır. Basit GET navigasyonunu kullanmak her zaman ücretsizdir. Teorik olarak, bir kaynağı değiştiriyorsanız GET kullanmak yanlıştır, değil mi?
Bozho

artı, JSF'yi önermek için Pascal'ı da düşürmeniz gerekir;)
Bozho

3
Suç yok ama bu yıllar önce göreceğiniz bir 'şeyler' listesi gibi geliyor, bu yüzden gördüğüme şaşırdım. Deneyimlerime göre, çoğu o zaman bu yanlış adımlardan geçti. Zaten bu konuda uzmansanız, mükemmel seçimler olacaktır, ancak uzmanlar projeyi terk ettikten sonra devralmak zorunda kalan O&M programcıları için endişe ediyorum. Artık kimse bu şeyleri artık IMO'dan öğrenmiyor.
Manius

1
Bu yorum satırı gerçekten biraz komik. JSF, elbette web siteleri için mükemmel bir şekilde kullanılabilir ve hem GET hem de POST için birinci sınıf desteğe sahiptir. Eldeki durum için en uygun olanı kullanın. Gerçekten de Bozho'nun belirttiği gibi, bir kaynağı değiştirirse GET kullanmayın, aksi halde çekinmeyin.
Arjan Tijms


10

Diğer cevapların aksine, popüler web çerçevelerinin dezavantajlarını (IMHO) vurgulamak istiyorum:

JSF2 - Serbest bırakıldı ve zaten yaşlandı. Hala sadece birkaç haber / makale / blog gönderisi / deneyimleri. Şüpheliyim. Yine de jsf 2'yi tamamen destekleyen Richfaces / Icefaces'in bir sonraki büyük sürümünü bekliyor - şu anda sadece alfa yapıları indirilebilir.

Struts 2 - Hala struts'a güveniyorsanız ve kodunuzun çoğunu yeniden düzenlemek istiyorsanız sadece iyi bir şey gibi görünüyor. Aksi takdirde: Yapmayın.

GWT - Tek sayfalık ve java-> javascript yaklaşımını sevmiyorum. Bir oturum - birden çok görünüm / pencere kolayca elde edilebilir emin değilim. Benim için, bu çerçeve çok kullanıcılı tek pencereli zengin internet uygulamaları için kullanılmalıdır.

küçük kapı - Güzel bir yaklaşım, ama biraz ayrıntılı ve çok daha az dokümantasyon mevcut (eylem kitabındaki iyi küçük kapı hariç, ancak bu sadece 1.3'ü kapsar). Ayrıca, benim için üstüne inşa edilmiş büyük projelerden yoksundur. Ve şu anda küçük kapı yolunun nereye gittiğini ya da daha önce çıkmaza girip girmediğini göremiyorum.

Bahar MVC - Henüz denemedim, ancak bu çerçeveyle düzgün çalışmak için sınıf yolunuza birçok kavanoz (bahar karmaşası) eklemeniz gerekir. Ve zaten ölü olduğunu düşündüğüm JSP'ye (çoğu projede) dayanıyor. Ve sadece saf bir MVC çerçevesi elde edersiniz - diğer tüm şeylerin (ajax ve diğerleri) uygulanması / entegre edilmesi gerekir.

Çizgili - Küçük ve güzel tasarlanmış bir MVC çerçevesi, ancak çok daha az dokümantasyon, çok daha az taahhüt / komisyon, çok az sürüm, çok daha az endüstri desteği, çok daha az posta listesi etkinliği.

Ayrıca, sizin için (ve benim için de) bir seçenek olabilecek büyük bir çerçeveyi (Goblen'i kasıtlı olarak bıraktım) kaçırıp kaçırmadığımı merak ediyorum.


Bunu işlemek için en iyi yolu Python web çerçeveleri yaptıklarına benzer bulduk: En iyi seçim ve seçim. Örneğin: Bahar + JAX-RS
Adam Gent

GWT hakkındaki yorumlarınız yanlış. Büyük bir şey yerine birçok ayrı sayfaya sahip olmak oldukça kolaydır. Başka bir "eylem" ve tüm işlemleri iyi başlatmak için başka bir sayfaya bağlantı ekleyin.
mP.

Ayrıca birden fazla pencere (veya sekmeler) hakkında konuşuyorum. Aynı oturumu aynı anda kullanarak birden fazla pencere kullanmak gerçekten mümkün müdür?
MRalwasser

1
+1 Bu gönderi neden 2 olumsuz ses aldı? Bunlar gibi şüpheci görüşler olumlu olanlardan eşit derecede önemlidir (daha fazla değilse)! Ve bunlar bana yapıcı olanlar gibi geliyor.
Piotr Sobczyk

8

JAX-RS ile büyük başarı elde ettim . Bir tür JSR spesifikasyonuna ve sunucu uygulaması ve portlet spesifikasyonu dışında birden fazla uygulamaya sahip olan tek Java Web Framework'dür (bu kötü bir şey olsa da).

Java hakkında kötü ve iyi olan bir şey, çerçeveleri seçip eşleştirebilmenizdir (python'un bu özelliği / sorunu da vardır). Güzel çünkü tüm yumurtalarınızı bir sepete koymak zorunda değilsiniz.

İşte genel bir Java Web Uygulaması Yığın Tarifi:

Javascript / Flash + İstek / Yanıt işleme + Bağımlılık Enjeksiyonu + Kalıcılık

Javascript: JQuery, Prototip, Dojo

İstek / Yanıt: Spring MVC, Stripes ve en sevdiğim JAX-RS (Jersey, Apache CXF)

Bağımlılık Enjeksiyonu: Bahar, Guice

Kalıcılık: JPA (Hazırda Beklet, Google App depolama), Hazırda Beklet, JDO ve daha fazlası.

Ayrıca Java "daha az emmek" yapmak için AspectJ kullanarak büyük bir başarı oldu. Spring'in @Configurable ve AspectJ's ITD karışımlarını kullanarak Domain nesneleri gibi Rails alabilirsiniz (Roo'nun yaptığı şey budur, ancak bunu yapmak için Roo'ya ihtiyacınız yoktur).


4
Katılıyorum. Kendi yığınınızı oluşturmak daha fazla zaman alır, ancak sonra tam olarak istediğinizi alırsınız. Şu anda jQuery, Jersey, Spring ve JPA2 kullanıyorum. JAX-RS harika çünkü cevabınızın ne olduğu üzerinde tam kontrole sahipsiniz.
Brian DiCasa

6

Çizgilerin gerçekten etkili ve şaşırtıcı derecede hafif olduğunu gördüm .... payandalardan daha hafif olmayı hedefliyor . İlk elden deneyimim olmasa da, JSF ile uğraşmaya değmez tam zamanlı web geliştiricileri olan arkadaşlardan duydum ve bunu örneklerle destekleyemiyorum (!).


5

RESThub'a bir göz atınPlay ile aynı prensiplere uyan ! ancak Maven 3 / Spring 3 / Jersey / jQuery gibi bazı kurumsal sınıf çerçeveleri / araçları yeniden kullanarak uygulanır.

RESThub, tam bir yığın araç takımı olduğundan, ancak sunucu tarafı MVC veya sunucu uygulaması tabanlı çerçeveler olmadan diğer çerçevelere kıyasla çok yıkıcıdır. Bunun yerine, JAX-RS (REST) ​​web hizmetlerini kullanan bir jQuery UI tabanlı GUI ve katıştırılmış J'lere dayalı bir Javascript şablonlama sistemi kullanır.

Sunucular vatansızdır ve oturumu istemci tarafında tutmak için HTML5 sessionStorage kullanırız. Bu yaklaşım DEA ve ölçeklenebilirlik için tasarımdır.

Bazı demo uygulamaları (yapım aşamasında olsa bile) sağlanır.


3

JSF güzel bir framewrok, ancak JSF 1.2, piyasaya sürülmesinden itibaren yıllar boyunca vizyondan yoksundu. JSF 2.0 umut verici görünüyor ve ajax desteği, facelets, Ek açıklama desteği ve varsayılan kurallar (daha az XML), 1.2'den daha kolay bileşen oluşturma gibi JSF 1.2'ye eklenen birçok yeni şey var.

DI desteğinden endişe ediyorsanız, Spring ile de iyi bütünleşir.


2

Bahar önerisi ikinci olur. Ben büyük bir hayranı değilim GWT, Java -> Javascript crosscompiler henüz orada olduğunu sanmıyorum. Sunucuda bahar ve istemcide jQuery kullanan bir AJAX uygulaması üzerinde çalışıyorum. Her ne kadar jQuery için teknik olarak "kullanıma hazır" destek olmasa da, bir yay-MVC AjaxView uygulaması son derece basittir ve yaklaşık 25 satır kod almıştır.


2

Belki biraz geç gösteriye bit ama var bahsetmek Vaadin . Programlama sadece Java'da, bileşen tabanlı bir yaklaşımla yapılır. İstemci-Sunucu iletişimi, veri aktarımından ziyade kullanıcı etkileşimi ile ilgilidir, tüm iş mantığı sunucuda bulunur.


1
Vaadin kullanıyorum, karmaşık bir uygulama oluşturmak için iyi değil.
Radan





0

Bir mermiden daha fazlasını hak eden bir şey oyuncu tabanlı RIA çerçeveleridir. Ör. Adobe Flex + Java (Tabii ki bu, "sitenizin" gerçekten bir "site" mi yoksa bir "uygulama" gibi mi olduğuna bağlı olabilir, Flex'te bir blog sitesi yapmazsınız.)

ajax,

Bir buzzword olarak AJAX anlamında, Flex tipik olarak AMF'yi (ikili bir protokol AJAX uygulamaları tarafından kullanılan protokollerden daha verimli ) kullanır, ancak Flex ile kesinlikle AJAX şeyler de yapabilirsiniz. Flex, AJAX'ı destekler, ancak "AJAX'tan daha iyi" yi de destekler.

zengin medya içeriği, karma,

Flex'in Flash 'sanal makine' platformunda çalıştığı için, eklenmesi gereken çok az şey olduğunu düşünüyorum.

şablon tabanlı düzen,

Bunun tam olarak ne elde ettiğinden emin değilim, ancak Flex mxml gibi geliyor.

doğrulama,

Elbette, fantezi almak istiyorsanız bazı özel şeyler yapmaya karar verebilirsiniz. (Yapmanız gerekmiyor.) Güzel olan şey, istediğiniz kadar sofistike olabilmenizdir - ya da değil.

maksimum html / java kodu ayırma

Flex / Silverlight / JavaFX gibi bir 'sanal makine' geliştirme yaklaşımı kullanarak daha fazla ayrılamazsınız. Bu sadece sunum kodu sunucu tarafı mantığı ve veri erişim katmanında ayrı tutulmasını sağlamak değildir - bu garanti onlar ayrılar söyledi. Geliştirme ortamınızı 'sanallaştırmak', tarayıcılar arası uyumluluğu, tutarlı bir hedef platformu, yeni tarayıcılar veya uygulamanızı bozan yeni tarayıcı sürümleri, java benzeri hata ayıklama yetenekleri ve daha profesyonel / etkileyici görünümlü bir son ürün hakkında endişelenmenize izin vermez .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.