2012-09-26 20 views
5

Tôi đang nghĩ về việc phát triển một ứng dụng web mới bằng cách sử dụng các thành phần "nhẹ" chứ không phải khung công tác ngăn xếp đầy đủ.Ngăn xếp web Java nhẹ bằng Guice-servlet/Jetty/Jersey - một số câu hỏi

This article là nguồn cảm hứng chính của tôi!

Cầu cảng: Máy chủ web. Có lẽ tôi sẽ sử dụng một phiên bản nhúng để phát triển nhưng với một tùy chọn để xuất ứng dụng dưới dạng .war và sử dụng một máy chủ Jetty bên ngoài cho môi trường sản xuất.

Guice/Guice-Servlet: Dành cho tiêm phụ thuộc và cho bản đồ servlet + bộ lọc.

Jersey: Đối với serialization + request/response json (de) khi được yêu cầu.

Một lưu ý quan trọng: Tôi biết một số người sẽ sử dụng loại stack với Jersey là một dịch vụ web lớp chỉ, và sẽ sử dụng một khuôn khổ Javascript (Backbone, AngularJS, vv) để tiêu thụ những dịch vụ và thực hiện hầu hết logic trình bày trong Javascript. Tôi chưa sẵn sàng cho loại công cụ khách hàng này. Tôi vẫn sẵn sàng sử dụng JSP và có thể gửi HTML đơn giản cho các khách hàng đã tắt javascript.

Vì vậy, câu hỏi của tôi:

  • cách tốt nhất để quản lý hình thức sử dụng Jersey là gì? Với Spring MVC (mà tôi đã sử dụng trên các dự án khác), khái niệm "đối tượng sao lưu" nơi dữ liệu POST được gửi sẽ tự động được liên kết với đối tượng sao lưu sau đó dễ chơi. Có cái gì đó tương tự với Jersey?

  • Tôi thích tất cả các tuyến đường của mình được xác định trong một tệp tuyến đường cụ thể, không phải ở mọi nơi như chú thích @Path, theo ý kiến ​​của tôi, khó quản lý hơn. Tôi khá chắc chắn Jersey yêu cầu sử dụng các chú thích @Path của JAX-RS được mã hóa cứng và không cho phép một hệ thống cấu hình tuyến đường bên ngoài, điều đó có đúng không? Bạn có thấy bất kỳ cách nào tôi có thể tập trung tất cả các tuyến đường với Jersey sau đó?

  • Tôi thích khái niệm về định tuyến ngược (ví dụ như khung chơi cung cấp). Và, một lần nữa, tôi không nghĩ Jersey có thể cung cấp chức năng đó, đúng không?

  • Xem xét các câu hỏi trước đây của tôi, có thể Jersey không phải là công nghệ phù hợp để sử dụng? Bạn có biết các thư viện khác mà tôi có thể sử dụng cho phần định tuyến trong ngăn xếp của tôi không?

  • Bất kỳ đề xuất/mẹo nào khác cho loại ngăn xếp web Java nhẹ này?

UPDATE:

tôi đang nhìn vào UrlRewriteFilter cho phần định tuyến.

Tôi cũng đang xem ActiveWeb framework, đây là khung công tác "đầy đủ ngăn xếp", nhưng có vẻ như cung cấp một số chức năng mà tôi đang tìm kiếm: cấu hình định tuyến tập trung và định tuyến ngược.

+3

Bạn có thể thấy DropWizard thú vị: http://dropwizard.codahale.com/getting-started/ –

+0

Vâng, tôi đã nhìn thấy (và đánh dấu trang!) DropWizard và thực sự nó thú vị. Đó là khá nhiều loại ngăn xếp tôi muốn sử dụng. Nhưng những câu hỏi tôi hỏi ở đây vẫn hợp lệ, có hoặc không có DropWizard! Ngoài ra, DropWizard dường như không tích hợp một thư viện tiêm phụ thuộc ra khỏi hộp (tôi thấy có một [add-on cho Guice] (https://github.com/jaredstehler/dropwizard-guice) mặc dù)? – electrotype

+0

tại sao bạn cần Guice? Servlet 3.0 có đủ không? – keuleJ

Trả lời

0

Để giải thích một số cụm từ. Guice và Spring giải quyết cùng một vấn đề miền, đó là tiêm phụ thuộc. Vì vậy, bằng cách sử dụng Guice và SpringMVC cùng một lúc là bằng cách nào đó không thể hoặc ít nhất là trái.

Để chênh lệch giữa Guice và mùa xuân, cũng cho biết:

dốc! Gần hơn với máu không thể. Tôi nghĩ Guice cũng giống như một cô gái nhà cho đêm. Mùa xuân là hôn nhân nhất định, và nếu không phải là , hãy ly hôn cẩn thận và đau đớn. - Spider Oct 7 '11 at 16:25

Guice thực sự là khung DI rất nhẹ. Nhưng không có hỗ trợ cho định tuyến và templating. Bạn phải tự mình làm điều đó bằng cách sử dụng các servlet ràng buộc máng và sử dụng động cơ tempaltes của chính bạn. Hoặc bạn có thể sử dụng Sitebricks. Bạn có thể đặt tất cả các định tuyến vào phương pháp cấu hình SitebrickModule như thế này:

public class MyAppConfig extends SitebricksModule { 
@Override 
protected void configureSitebricks() { 
    at("/movies").show(MoviesPage.class); // basic page 
    at("/actors").serve(ActorsPage.class); // service 
    embed(SoundtrackPage.class).as("Soundtrack"); // brick 
} 

}

Sitebricks cũng hỗ trợ nhiều hệ thống tempalting: MVEL, Freemarker, ...

Ngoài ra, bạn có thể dễ dàng xây dựng của bạn Dịch vụ REST để sử dụng javascript:

Reply<Product> view() { 
    return Reply.with(new Product("Anti-ageing cure")) 
       .as(Json.class); 
} 

Hãy thử.