2009-07-15 36 views
5

Trong vài năm qua, tôi đã có đầu bằng Python, nơi có rất nhiều lựa chọn cho các khung công tác đơn giản, tối thiểu cho phép tôi đứng lên một trang web hoặc dịch vụ dễ dàng (ví dụ: web.py). Tôi đang tìm một cái gì đó tương tự trong Java.Máy chủ/khung công tác độc lập Java đơn giản?

Cách đơn giản nhất, ít chuyển động nhất để đứng lên các dịch vụ đơn giản bằng Java vào những ngày này là gì? Tôi đang tìm một cái gì đó đơn giản như:

  • khả năng nhận HTTP yêu cầu
  • khả năng để gửi những yêu cầu để xử lý (tốt hơn là một biểu thức dựa url thường xuyên để xử lý cơ sở bản đồ)
  • khả năng để đặt tiêu đề HTTP và thường kiểm soát hoàn toàn yêu cầu/phản hồi

Điểm thưởng nếu khung hoạt động tốt với Jython.

[Cập nhật] Cảm ơn bạn đã trả lời, một số trong số này trông khá thú vị. Tuy nhiên, tôi không thấy khả năng gửi url trong những điều này. Tôi đang tìm một cái gì đó tương tự như hệ thống url.py Django, mà trông giống như:

urlpatterns = patterns('', 
    (r'^articles/2003/$', 'news.views.special_case_2003'), 
    (r'^articles/(\d{4})/$', 'news.views.year_archive'), 
    (r'^articles/(\d{4})/(\d{2})/$', 'news.views.month_archive'), 
    (r'^articles/(\d{4})/(\d{2})/(\d+)/$', 'news.views.article_detail'), 
) 

Trong trường hợp bạn chỉ định một biểu thức chính quy url cùng với bộ xử lý để xử lý nó.

Trả lời

3

Tôi thích đáng giá Máy chủ Simple HTTP từ Khung đơn giản. Nó cũng cung cấp a nice Tutorial về cách bắt đầu.

+1

+1 Đơn giản cũng là vùng chứa máy chủ NIO nhanh nhất cho Java. Ngoài ra, dấu chân nhỏ nhất không có phụ thuộc bên ngoài khác với Java 5. –

3

có một số lựa chọn thay thế:

  • servlets
  • restlet: nhẹ REST của khuôn khổ
  • jax-rs: sử dụng jersey hoặc module Restlet thực hiện jax-rs thông số kỹ thuật
  • grizzly: NIO Dựa máy chủ (với bộ điều khiển hỗ trợ HTTP + handler)
  • apache mina: máy chủ định hướng sự kiện, máy chủ không đồng bộ (với hỗ trợ HTTP)

tất cả các khung này đi kèm với máy chủ tích hợp.

EDIT

jax-rs có một cách tiếp cận tương tự như sử dụng url mẫu:

@Path("https://stackoverflow.com/users/{username}") 
public class UserResource { 

    @GET 
    @Produces("text/xml") 
    public String getUser(@PathParam("username") String userName) { 
    } 
} 

sau đó đặt bộ xử lý của bạn trong một đối tượng Application:

public class MyApplicaton extends Application { 
    public Set<Class> getClasses() { 
     Set<Class> s = new HashSet<Class>(); 
     s.add(UserResource.class); 
     return s; 
    } 
} 

một ví dụ khác với JAX-RS:

@GET 
@Produces("application/json") 
@Path("/network/{id: [0-9]+}/{nid}") 
public User getUserByNID(@PathParam("id") int id, @PathParam("nid") String nid) { 
} 

EDIT 2

Restlet hỗ trợ một cấu hình tập trung như Django, trong đối tượng Application của bạn:

// Attach the handlers to the root router 
router.attach("https://stackoverflow.com/users/{user}", account); 
router.attach("https://stackoverflow.com/users/{user}/orders", orders); 
router.attach("https://stackoverflow.com/users/{user}/orders/{order}", order); 
1

Servlets có thể là cách để đi. Để làm những việc rất đơn giản, bạn chỉ cần ghi đè lên một phương thức của một lớp. Mọi thứ phức tạp hơn là tất nhiên có thể, nhưng bạn có thể đi một chặng đường dài với một công việc nhỏ.

Điều tra Tomcat hoặc Jetty - cả hai đều là nguồn mở và được hỗ trợ tốt.

public class HelloWorldServlet extends HttpServlet { 
    public void doGet(HttpServletRequest request, HttpServletResponse response) 
     throws ServletException, IOException 
    { 
     response.setContentType("text/plain"); 
     PrintWriter out = response.getWriter(); 
     out.print("hello world!"); 
    } 
} 
1

Lưu ý: Đây là cuộc thảo luận chung hơn câu trả lời.

Tôi đang gặp sự cố tương tự từ Python trong hơn 10 năm và lặn, ngược lại, trở lại Java. Tôi nghĩ một điều tôi đang học là yếu tố "đơn giản" của Python rất khác so với Java. Trường hợp Python rất nhiều với khung cấp cao-- những thứ như web.py, Java có vẻ thấp hơn nhiều. Trong vài tháng qua, tôi đã đi từ nói "Cách Java để làm điều này dễ dàng trong điều Python" để "Làm thế nào để xây dựng một điều này trong Java." Tinh tế, nhưng dường như mang suy nghĩ của tôi xung quanh từ một cái nhìn trung tâm Python đến một trung tâm Java hơn.

Sau khi thực hiện điều đó, tôi đã nhận ra rằng việc đứng lên một trang web hoặc dịch vụ không đơn giản đối với người ngoài Java, đó là bởi vì có một lượng lớn thông tin tôi phải (lại) grok. Nó không đơn giản như python. Bạn vẫn cần một máy chủ web, bạn cần phải xây dựng một "container" để thả mã Java của bạn vào, và sau đó bạn cần mã Java (tôi có sai về điều này, tất cả mọi người? Có cách nào đơn giản hơn không?).

Đối với tôi, làm việc với Scala và Lift đã giúp và thậm chí không phải những người đó, mà là thread by David Pollack. Đây là những gì tôi cần để xây dựng một máy chủ Jetty. Thực hiện theo các hướng dẫn (hơi mơ hồ, nhưng có thể đủ tốt cho bạn) và sau đó bạn có một thùng chứa servlet sẵn sàng chấp nhận lưu lượng đến trên một cổng (hoặc 3 cổng, trong trường hợp của mình). Sau đó, bạn có thể viết một số mã Java bằng cách sử dụng HTTPServlet hoặc một cái gì đó để đi phần còn lại của con đường.

Một lần nữa, đây chỉ là những gì tôi đã làm để vượt qua rào cản đó, nhưng tôi vẫn không phải là một guru Java. Chúc may mắn.

0

Tôi đã về cứng: Apache Mina

Nhưng khá thẳng thắn Tôi thậm chí không biết nếu nó là những gì bạn cần.

: -/

:)

0

Jetty là một máy chủ nhúng http khá đẹp - ngay cả khi nó không phải là có thể làm các bản đồ như bạn mô tả, nó nên được khá dễ dàng để thực hiện những gì bạn đang đi.

Các vấn đề liên quan