Ưu và nhược điểm của các loại khuôn khổ web Java là gì? [đóng cửa]


85

Tôi đang cân nhắc việc tạo trang web của riêng mình bằng Java và đang cố gắng quyết định sử dụng khuôn khổ nào. Tuy nhiên, thực hiện tìm kiếm nhanh các khung Java sẽ trả về hơn 50 để lựa chọn!

Trang web của tôi sẽ chỉ để tôi thích thú khi xây dựng nó ngay từ đầu, nhưng nếu nó trở nên phổ biến, sẽ rất tốt nếu nó có một số khả năng mở rộng, hoặc ít nhất là có thể thiết kế lại cho phù hợp.

Sự khác biệt chính giữa các khuôn khổ phổ biến hơn là gì? Có những trường hợp nào mà một cái tốt hơn những cái khác một cách đáng kể không? Ví dụ, các ứng dụng doanh nghiệp có lưu lượng truy cập cao so với các ứng dụng nhỏ có lưu lượng truy cập thấp. Tôi cũng tự hỏi liệu một số có dễ học và dễ sử dụng hơn những thứ khác không.

Có ai có kinh nghiệm với một số khuôn khổ này và có thể đưa ra đề xuất không? Có phải số lượng lựa chọn tuyệt đối chỉ đóng vai trò là một cảnh báo sớm để tránh phát triển web dựa trên Java nếu có thể?


Ở một mức độ nào đó, điều này giống như nói rằng "thực hiện tìm kiếm nhanh các công cụ sẽ trả về hơn 50 công cụ để lựa chọn; tôi nên chọn một cái búa, một cái tuốc nơ vít hay một chiếc kìm?" Tuy nhiên, với các câu hỏi phụ, đây là một câu hỏi khá "chủ quan".
Pops

"Vui" như thường lệ, câu hỏi và câu trả lời cực kỳ hữu ích (tôi vừa đặt mua sách về Wicket, cảm ơn tất cả các bạn), nhưng toàn bộ bài đăng được đóng lại như không mang tính xây dựng. "câu hỏi này sẽ
THẤT ​​VỌNG

Câu trả lời:


59

Tôi đã sử dụng Tapestry 3 , Wicket , EchoJSF khá rộng rãi. Tôi thực sự khuyên bạn nên xem qua những thứ đó và chọn cái có vẻ dễ dàng nhất đối với bạn và phù hợp nhất với cách bạn muốn làm việc.

Trong số đó, tôi thấy thoải mái nhất khi làm việc với Wicket , do tính chất nhẹ của việc xây dựng thành phần và sự đơn giản của tạo mẫu trang. Điều đó tăng gấp đôi vì vậy nếu bạn đang sử dụng mã db của riêng mình thay vì Hibernate hoặc một số khuôn khổ khác (Tôi chưa bao giờ hoàn toàn hài lòng với Wicket Hibernate hoặc Spring Integration).

Echo rất tuyệt nếu bạn không ngại viết tất cả bố cục của mình bằng Java. Tôi biết bây giờ đã khác, nhưng tôi vẫn nghĩ rằng sản phẩm đó phục vụ một thị trường ngách khá hẹp. Họ cũng thay đổi mô hình phát triển với mỗi bản phát hành chính.

Tấm thảm là một sản phẩm tuyệt vời, nhưng rõ ràng nó rất khác so với những sản phẩm khác về mô hình phát triển vì nó chủ yếu được dẫn dắt bởi một chàng trai. Howard Lewis Ship chắc chắn là khá thông minh, nhưng tôi thất vọng với quyết định của họ về cơ bản quên đi khả năng tương thích ngược với mỗi bản phát hành. Tuy nhiên, một lần nữa, đối với nhu cầu của bạn, điều này có thể không thành vấn đề, và tôi luôn thấy các sản phẩm Thảm tập phù hợp để làm việc.

JSF đã ra đời trong nhiều năm và vẫn có cảm giác như một thứ mà một chàng trai Struts đã xây dựng để khắc phục tất cả các vấn đề của Struts. Nếu không thực sự hiểu tất cả các vấn đề với Struts. Nó vẫn có một cảm giác chưa hoàn thiện đối với nó, mặc dù sản phẩm rõ ràng là rất linh hoạt. Tôi sử dụng nó và có một số yêu thích với nó, với hy vọng lớn cho tương lai của nó. Tôi nghĩ rằng bản phát hành tiếp theo (2.0) sẽ được phân phối trong JEE6 sẽ thực sự mang nó thành của riêng mình, với cú pháp mẫu mới (tương tự như Facelet) và mô hình thành phần đơn giản hóa (các thành phần tùy chỉnh chỉ trong 1 tệp ... cuối cùng).

Và, tất nhiên, có một triệu khuôn khổ và công cụ nhỏ hơn có được những thứ sau của riêng chúng ( Tốc độ cho các nhu cầu cơ bản, JSP thô , Struts, v.v.). Mặc dù vậy, tôi thường thích các khung định hướng thành phần hơn.

Cuối cùng, tôi khuyên bạn chỉ nên xem qua Tapestry, Wicket và JSF và chỉ chọn một cái mà bạn cảm thấy tốt nhất. Bạn có thể sẽ tìm thấy một cái phù hợp với cách bạn thích làm việc rất nhanh chóng.


Nếu Ứng dụng web của bạn là nội dung Dựa trên như một hệ thống diễn đàn, tôi sẽ khuyên bạn sử dụng GWT và Ext-js. Nếu Ứng dụng web của bạn giống một ứng dụng bàn như thiết bị đầu cuối ERP, tôi khuyên bạn nên sử dụng ZK, Echo3, Vaddin và GWT. Tôi sẽ không đề xuất bất kỳ giải pháp JSF nào bởi vì không có thực tế "Đó là Tiêu chuẩn JEE", tôi không thấy lợi ích gì khi sử dụng chúng.
Zanyking

1
@Zanyking - Nếu diễn đàn của bạn cần SEO, bạn sẽ thấy GWT khó, imo.
jsight

3
JSF có lẽ là quá mức cần thiết cho một trang web, thay vào đó tôi sẽ đi cho các khuôn khổ năng suất cao hơn, ... đang phát triển nên ở lại vui vẻ, và JSF vẫn chưa được xây dựng với 'Fun' trong tâm trí :)
HeDinges

1
Tapestry, Wicket, JSF và Echo đều là định hướng thành phần và GWT, Ext-js và Vaadin là định hướng Javascript. Đừng quên xem qua tất cả các framework MVC "cổ điển" tuyệt vời như Spring MVC, Play framework, Grails and Stripes. Họ có một mô hình lập trình rất khác với những mô hình trước đây, nhưng có những điểm hấp dẫn khác (đây là lý do tại sao có rất nhiều khuôn khổ - các mục đích, nhu cầu và sở thích khác nhau đòi hỏi các công cụ khác nhau).
DaGGeRRz

39

Yêu thích của tôi là Spring Framework. Với 2.5 Spring MVC thật tuyệt vời, với các chú thích mới, quy ước về các tính năng cấu hình, v.v.

Nếu bạn chỉ làm một cái gì đó siêu đơn giản, bạn cũng có thể thử sử dụng API Servlet thông thường và không bận tâm đến một khuôn khổ.


1
Bỏ phiếu cho việc sử dụng Servlet API thông thường cho một việc đơn giản.
lsiu

1
Tôi sẽ tránh bất kỳ khung 'web mvc' nào, vì những lý do được nêu trong chương đầu tiên (miễn phí) của Wicket In Action. Ngoài ra, tôi sẽ tránh sử dụng trực tiếp API Servlet trừ khi bạn có một ứng dụng trang đơn hoặc bạn đang tìm cách viết khuôn khổ của riêng mình từ đầu.
Eelco

3
Tôi cũng thích Spring, nhưng tôi thấy rằng tất cả các cấu hình chỉ thành công nếu bạn đang viết một ứng dụng mahoosive.
Leonard Ehrenfried

1
Hầu như không có bất kỳ cấu hình nào sử dụng chú thích.
bpapa

1
@bpapa Các chú thích chỉ đặt cấu hình trong các lớp java của bạn thay vì xml.
Steven

25

Tôi khuyên bạn nên sử dụng khung Wicket định hướng thành phần . Nó cho phép bạn viết ứng dụng web của mình bằng mã Java cũ thuần túy, bạn có thể sử dụng POJO làm mô hình cho tất cả các thành phần và không cần phải lộn xộn với các tệp cấu hình XML khổng lồ.

Tôi đã phát triển thành công một ứng dụng ngân hàng trực tuyến với Struts khi tôi phát hiện ra Wicket và thấy việc phát triển ứng dụng web dễ dàng như thế nào!


17

Gần đây tôi đã bắt đầu sử dụng Stripes Framework . Nếu bạn đang tìm kiếm một khuôn khổ dựa trên yêu cầu thực sự dễ sử dụng, nhưng không áp đặt bất kỳ giới hạn nào đối với những gì bạn đang làm, tôi thực sự khuyên bạn nên sử dụng nó.

Nó tương tự như thanh chống, nhưng nó vượt xa nó. Thậm chí có một số dự án plugin cho phép bạn sử dụng chế độ ngủ đông hoặc jpa với rất ít cấu hình.

Có rất nhiều framework tốt trên mạng mặc dù tôi nghe nói wicket cũng là một cái tốt, nhưng tôi chưa sử dụng nó.


16

Tôi đã không thử nó bản thân mình, nhưng tôi nghĩ

http://www.playframework.org/

có rất nhiều tiềm năng ...

đến từ php và asp cổ điển, đó là khung công tác web java đầu tiên có vẻ hứa hẹn với tôi ....


2
thật buồn cười khi hôm nay là lần thứ năm tôi thấy "Tôi chưa sử dụng nó, nhưng tôi khuyên bạn nên Chơi" ở đây trên stackoverflow.
Marko

11

CẬP NHẬT: Tapestry 5.2 đã hết, vì vậy nó không bị bỏ rơi như trước đây. Kinh nghiệm của tôi là với Tapestry 4, không phải 5, vì vậy số dặm của bạn có thể thay đổi. Quan điểm của tôi về Tấm thảm đã thay đổi trong những năm qua; Tôi đã sửa đổi bài đăng này để phản ánh nó.

Tôi không còn có thể giới thiệu Tapestry như trước đây nữa. Tapestry 5 dường như là một cải tiến đáng kể, nhưng vấn đề chính của tôi với Tapestry không phải với bản thân nền tảng; nó với những người đứng sau nó.

Trong lịch sử, mọi bản cập nhật phiên bản lớn của Tapestry đều phá vỡ khả năng tương thích ngược với định kiến ​​cực đoan, nhiều hơn những gì người ta có thể mong đợi. Điều này dường như là do sự kết hợp của các kỹ thuật mã hóa hoặc công nghệ mới đòi hỏi phải viết lại nhiều.

Howard Lewis Ship (tác giả chính của Tapestry) chắc chắn là một nhà phát triển xuất sắc, nhưng tôi không thể nói rằng tôi quan tâm đến việc quản lý dự án Tapestry của anh ấy. Việc phát triển Tapestry 5 bắt đầu gần như ngay lập tức sau khi Tapestry 4 xuất xưởng. Từ những gì tôi có thể nói, Ship đã dành rất nhiều tâm huyết cho việc đó, để lại Tapestry 4 cho những người đóng góp khác, những người mà tôi cảm thấy gần như không có khả năng như Ship. Sau khi thực hiện chuyển đổi đau đớn từ Tapestry 3 sang Tapestry 4, tôi cảm thấy rằng mình đã bị bỏ rơi gần như ngay lập tức.

Tất nhiên, với việc phát hành Tapestry 5, Tapestry 4 đã trở thành một sản phẩm kế thừa. Tôi sẽ không gặp vấn đề với điều này nếu đường dẫn nâng cấp không quá tàn bạo nữa . Vì vậy, bây giờ nhóm phát triển của chúng tôi đang ở một vị trí khá bất khả thi: Chúng tôi có thể tiếp tục sử dụng một nền tảng web đã bị bỏ rơi về cơ bản (Tapestry 4), thực hiện nâng cấp liên tục lên Tapestry 5 hoặc từ bỏ hoàn toàn Tapestry và viết lại ứng dụng của mình bằng một nền tảng khác. Không có lựa chọn nào trong số này là rất hấp dẫn.

Tấm thảm 5 được cho là được viết để giảm khả năng bị hỏng cập nhật từ thời điểm này trở đi. Một ví dụ điển hình là trong các lớp trang: trong các hóa thân trước đây, các lớp trang là con số của một lớp cơ sở do Tapestry cung cấp; các thay đổi API không tương thích trong lớp này là nguyên nhân của một số lượng lớn các vấn đề tương thích ngược. Trong Tapestry 5, các trang là POJO được tăng cường trong thời gian chạy với "bụi tiên thuật Tapestry" thông qua chú thích. Vì vậy, miễn là hợp đồng cho các chú thích được duy trì, các thay đổi đối với Tấm thảm sẽ không ảnh hưởng đến các lớp trang của bạn.

Nếu điều này là đúng, thì việc viết một ứng dụng mới bằng Tapestry 5 có thể thành công. Nhưng cá nhân, tôi không cảm thấy muốn đặt tay lên đầu đốt một lần nữa.


Cập nhật: Theo thời gian, dự án Tấm thảm dường như đã bị bỏ rơi. Không có bản phát hành Tapestry 5 nào kể từ tháng 4 năm '09 và Tapestry 4, vẫn còn một loạt lỗi nổi bật trong JIRA của họ, đã không có bản cập nhật kể từ năm '08. Vì điều này, tôi không còn có thể giới thiệu Tapestry như một sự lựa chọn khả thi cho một khuôn khổ ứng dụng web.
Robert J. Walker

Tấm thảm vẫn chưa bị bỏ rơi. Nhánh Tapestry 5 đang hoạt động khá tích cực với 5.1 là tùy chọn ổn định và 5.2 sẽ sớm ra mắt.
Timo Westkämper

Bạn đúng rồi. Trên thực tế, Tapestry 5.2 đã được phát hành. Tôi đã cập nhật bài đăng để phản ánh quan điểm cập nhật của tôi về Tapestry.
Robert J. Walker,

9

Disclamer: Tôi làm việc tại Vaadin (trước đây là IT Mill)

Nếu bạn đang làm điều gì đó RIAish, bạn có thể muốn xem Vaadin . Đó là một khung công tác AJAX hướng tới giao diện người dùng mã nguồn mở, đối với tôi, rất dễ sử dụng (bản thân tôi đến từ nền tảng PHP).

Có một nghiên cứu điển hình so sánh việc thực hiện cùng một ứng dụng (tức là hai ứng dụng có cùng bộ tính năng) trong Icefaces và Vaadin. Tóm lại, nó nói rằng sự phát triển giao diện người dùng nhanh hơn đáng kể.

Mặc dù nghiên cứu được lưu trữ tại wiki của công ty, tôi có thể đảm bảo rằng nó khách quan, chân thực và trung thực, mặc dù tôi không thể buộc bạn tin tôi.


+1 Khung công tác được đổi tên thành vaadin (trước đây là ITMill). Tôi phải nói vaadin là một web framework rất đẹp và tất cả java không có gì khác. Tôi thấy nó rất hiệu quả.
fmucar

7

Sau một thời gian dài thử nghiệm các giải pháp khác nhau, đối với tôi, kết quả là:

  • Spring MVC cho lớp trình bày và bộ điều khiển (KHÔNG CÓ Spring Webflow, vì các luồng của tôi dựa trên ajax)

  • jQuery cho tất cả nội dung phía máy khách

  • Spring Security cho khía cạnh an ninh, tốt

  • Ngủ đông / JPA2

  • Cầu tàu vì sự liên tục (sao chổi)

Một tháng trôi qua rất khó khăn trong học tập, nhưng bây giờ tôi rất vui.

Tôi cũng muốn đề cập rằng tôi chỉ còn cách một chút nữa là bỏ qua tất cả những thứ Java đó và thay vào đó là sử dụng Scala / LIFT. Theo như tôi có liên quan, mọi thứ trong Java liên quan đến phát triển web tiên tiến (sao chổi, giao tiếp không đồng bộ, bảo mật (có, ngay cả với Spring Security!)) Vẫn là một chút hack (tôi đã sai bằng bằng chứng, xin vui lòng !). Đối với tôi, Scala / LIFT dường như là một giải pháp tiện ích hơn và tất cả trong một.

Lý do cuối cùng tôi quyết định không đi với Scala là

  • với tư cách là người lãnh đạo dự án, tôi phải xem xét nguồn nhân lực và các nhà phát triển Java dễ tìm hơn nhiều so với các nhà phát triển Scala

  • đối với hầu hết các nhà phát triển trong nhóm của tôi, khái niệm vui nhộn của Scala, tuyệt vời như nó vốn có, thật khó hiểu

Chúc mừng Er


Đây là tất cả những thứ tốt. MVC mùa xuân là lựa chọn tốt, hãy ở bên an toàn (và khôn ngoan).
Victor Ionescu

5

Tôi cũng đã nghe những điều tốt đẹp về Spring Framework. Tuy nhiên, nói chung, tôi đã bị choáng ngợp bởi hầu hết các khuôn khổ web Java mà tôi đã xem (đặc biệt là Struts).

Đối với một ứng dụng đơn giản, tôi chắc chắn sẽ cân nhắc sử dụng các servlet và JSP "thô" và không lo lắng về việc áp dụng một khuôn khổ. Nếu các servlet được viết tốt, trong tương lai sẽ dễ dàng chuyển sang một khuôn khổ nếu cần thiết khi ứng dụng ngày càng phức tạp.


1
+1 cho "Nếu các servlet được viết tốt ..."
Chris


4

Tất cả chúng - đó là vấn đề ;-)


3

Tôi nghĩ đối với yêu cầu khiêm tốn của bạn, bạn chỉ cần viết mã các servlet hoặc các trang jsp đơn giản mà bạn có thể phục vụ từ máy chủ Tomcat. Tôi không nghĩ rằng bạn cần bất kỳ loại khuôn khổ web nào (như thanh chống) cho dữ liệu trang web cá nhân


3

Nói "sử dụng JSF" thì hơi đơn giản. Khi bạn quyết định sử dụng JSF, bạn phải chọn một thư viện thành phần trên đó. Bạn sẽ sử dụng MyFaces Tomahawk, Trinidad, Tobago ( http://myfaces.apache.org/ ) chứ? Hoặc có thể ICEfaces ( http://www.icefaces.org/ )? Ồ, và nếu bạn sử dụng ICEfaces, bạn sẽ sử dụng JSP hay Khuôn mặt cho chế độ xem của mình?

Theo tôi thì rất khó để nói. Không ai có thời gian để đánh giá tất cả các lựa chọn thay thế đầy hứa hẹn, ít nhất là trong các dự án tôi đang làm, bởi vì chúng không đủ lớn để thực hiện các giai đoạn đánh giá trong ba tháng. Tuy nhiên, bạn nên tìm kiếm một số có một cộng đồng lớn và tích cực và chưa biến mất trong một năm. JSF đã tồn tại một thời gian, và vì nó bị mặt trời thúc đẩy, nó sẽ còn tồn tại trong một thời gian nữa. Tôi không thể nói liệu đó có phải là sự lựa chọn tốt nhất hay không, nhưng nó sẽ là một lựa chọn tốt.


Jsp là một nỗi đau đối với tôi khi làm một ứng dụng Web mà chúng tôi bán. Một bản cập nhật Sẽ xem xét các trang sức thay thế.
Thorbjørn Ravn Andersen

Ya, đến lúc này thì tôi khá chắc chắn: sử dụng vòng tay thay vì JSP. Nó tốt hơn nhiều và tôi không thấy bất kỳ nhược điểm (lớn) nào.
Tim Büthe


3

Đối với các trang web có lưu lượng truy cập cao, tôi sẽ sử dụng một khuôn khổ không quản lý trạng thái máy khách trên máy chủ - Wicket, JSF và Tapestry đang quản lý trạng thái máy khách trên máy chủ. Tôi chỉ sử dụng các khung công tác đó (Wicket là công cụ yêu thích của tôi) nếu ứng dụng này giống một ứng dụng máy tính để bàn hơn. Nhưng tôi sẽ cố gắng sử dụng cách tiếp cận REST + AJAX có thể mở rộng và đơn giản hơn.

Spring MVC sẽ là một ứng cử viên, nhưng kể từ Spring MVC 3, nó có một mô hình lập trình quá tải chú thích kỳ lạ không sử dụng các lợi ích của việc nhập tĩnh. Có những thứ xấu xí khác như tham số đầu ra trong các phương thức kết hợp với trả về thông thường, do đó, có hai kênh đầu ra của một phương thức. Spring MVC cũng có xu hướng phát minh lại bánh xe và bạn sẽ có nhiều thứ để cấu hình hơn so với các khung công tác khác. Tôi thực sự không thể giới thiệu Spring MVC mặc dù nó có một số ý tưởng hay.

Grails là một cách thuận tiện để sử dụng Spring MVC và các khuôn khổ đã được thiết lập khác như Hibernate. Viết mã rất thú vị và bạn sẽ nhanh chóng thấy kết quả.

Và đừng quên rằng API Servlet với một vài trợ giúp nhỏ như FreeMarker để tạo khuôn mẫu rất mạnh mẽ.


3

Tôi đã đánh giá khá nhiều khung công tác và Vaadin ( http://vaadin.com/home ) đã hoàn thiện tất cả các cách để dẫn đầu.

Ít nhất bạn cũng nên đánh giá ngắn gọn.

Chúc mừng!


2

Lựa chọn của tôi sẽ là Wicket (cho các dự án lớn và cơ sở người dùng có thể dự đoán được), GWT (cho các dự án lớn mà hầu hết là công khai) hoặc chỉ là một khung dịch vụ (như Jersey / JAXRS) cùng với bộ công cụ JavaScript (cho các dự án vừa và nhỏ) .


2

Tôi khuyên bạn nên dùng Seam, đặc biệt nếu bạn cần sự kiên trì.



1

Để có GUI nhanh chóng và lạ mắt, bạn có thể sử dụng JSF với thư viện Richfaces . Các thành phần giao diện người dùng Richfaces rất dễ sử dụng và các tham chiếu tiện dụng có sẵn với phần trình diễn mã trong trang web demo. Có thể là sau này khi trang web của bạn có nhiều dữ liệu hơn để xử lý và nhiều thông tin phải được giao dịch trong cơ sở dữ liệu, bạn có thể cắm bất kỳ khung truy cập cơ sở dữ liệu (ORM) nào với nó.


0

Không thể tin được là chưa có ai đề cập đến GWT


Tôi sẽ không thực sự coi GWT là một khung ứng dụng web (nó giống như một bộ công cụ web hơn, do đó có tên). Tuy nhiên, GWT rất tuyệt vời và đi cùng với Spring chẳng hạn.
stian 21/09/08

framework hoặc bộ công cụ, sự khác biệt cụ thể thực sự là gì? Mã hóa với GWT cho cảm giác làm việc với một khuôn khổ giống như các tùy chọn khác.
Eelco

0

Cách yêu thích của tôi để sử dụng các ứng dụng thực sự đơn giản là Apache VelocityTools (VelocityLayoutServlet) với Velosurf ( http://velosurf.sourceforge.net ).

Đối với các ứng dụng phức tạp hơn, Spring MVC hoặc Struts 2.



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.