2009-03-09 55 views
11

Tôi đã viết một ứng dụng Java độc lập mà tôi đã đóng gói vào một tệp jar có một số đối số dòng lệnh, thực hiện một số tính toán hardcore và sau đó ghi kết quả vào tệp đầu ra cho luồng đầu ra mặc định trỏ đến nơi tệp có kết quả là.Chạy Java trên Máy chủ Web

Tôi hiện muốn tạo trang web về công nghệ này. Ý tưởng là người dùng có thể điền vào biểu mẫu html, đăng lên trang web, sau đó sẽ gọi ứng dụng Java, phân tích cú pháp kết quả từ ứng dụng Java và hiển thị nó cho người dùng.

Hiện nay, tôi đang sử dụng một chút PHP để thu thập dữ liệu từ các bài yêu cầu, và sau đó chỉ cần sử dụng một cuộc gọi exec:

java -jar -Xmx128m myapplication.jar command-line-arguments

Đây có phải là xấu?

Tôi có hàng nghìn lượt truy cập vào trang web mỗi ngày và mỗi lần thực thi ứng dụng Java có thể mất 30 giây đến một phút, vì vậy tôi không muốn quá kém hiệu quả. Nó có vẻ như sẽ có một giải pháp tốt hơn là phải gọi Java trực tiếp cho mọi yêu cầu.

Tôi tiếp tục nghe những thứ như java servlets, beans, tomcat, glassfish, v.v., nhưng tôi không hiểu chúng là gì và chúng sẽ mang lại lợi ích cho tôi như thế nào. Điều này làm tôi có được gì? Kết quả nhanh hơn vì Java JVM không phải được tạo mỗi khi tôi chạy ứng dụng? Sử dụng bộ nhớ ít hơn? Tôi rõ ràng muốn nó chạy nhanh nhất có thể với ít dấu chân bộ nhớ nhất có thể.

Vậy, cách tiếp cận tốt nhất mà tôi có thể thực hiện ở đây là gì? Tôi không muốn viết lại một cách nghiêm túc ứng dụng của mình vì có rất nhiều mã (vì vậy viết lại nó cho C hoặc C++ không nằm trong câu hỏi).


Cảm ơn.

Trả lời

12

Ok, servlets là các ứng dụng có mùi được thiết kế để chạy bên trong thùng chứa. Họ cung cấp một điểm mở rộng cho bạn để chèn mã java của bạn vào một container servlet đơn giản như tomcat, hoặc một máy chủ ứng dụng đầy đủ tính năng hơn như glassfish.Bạn muốn thực hiện điều này bởi vì máy chủ ứng dụng thực hiện việc nâng cao giao dịch với tương tác http và cung cấp các tính năng khác như bảo mật, ghi nhật ký, quản lý phiên, xử lý lỗi và hơn thế nữa (xem servlet specification).

Khi bạn làm cho ứng dụng của bạn sống trong một ứng dụng conatiner (máy chủ web với tất cả các tính năng bổ sung khác), bạn cũng có thể quản lý vòng đời của ứng dụng của bạn tốt hơn. Bạn sẽ có thể bắt đầu và dừng ứng dụng mà không tắt máy chủ web, triển khai lại, bắt đầu nhiều phiên bản hơn, v.v. Ngoài ra, khi bạn tìm ra ứng dụng thứ hai tuyệt vời, dễ dàng thả ứng dụng đó ngay bên cạnh ứng dụng đầu tiên . Hoặc, bạn có thể kết hợp nhiều máy với nhau để dễ dàng dự phòng và cân bằng tải, các tính năng của máy chủ ứng dụng.

Đây chỉ là sự khởi đầu, có nhiều tính năng, công nghệ và khung công tác khác giúp bạn tạo ứng dụng dựa trên vùng chứa. Servlet tutorial.

0

Có thể bạn không muốn gọi ứng dụng java trực tiếp từ trang web. Như bạn đã nói, nếu quá trình java mất 30 giây để chạy, máy chủ web của bạn sẽ nhận được cách bogged xuống, đặc biệt là nếu trang web của bạn đang nhận được đập.

Bạn có thể muốn xem xét các dịch vụ web (và có thể là hàng đợi thư) để gửi yêu cầu xử lý phía sau. Trang PHP có thể gọi dịch vụ web trên máy chủ, sau đó có thể đặt yêu cầu xử lý trên hàng đợi hoặc chỉ cần khởi chạy ứng dụng java theo cách không đồng bộ. Bạn không muốn yêu cầu HTTP đợi ứng dụng java kết thúc, bởi vì, trong khi nó đang xử lý, người dùng sẽ chỉ có trình duyệt bị treo và yêu cầu HTTP có thể hết thời gian chờ.

Sau khi ứng dụng java hoàn tất, nó có thể cập nhật bảng cơ sở dữ liệu mà sau đó người dùng có thể truy cập từ trang web.

2

[Làm như vậy có được tôi] "Kết quả nhanh hơn vì Java JVM không phải được tạo mỗi khi tôi chạy ứng dụng?"

Có.

Và - tiền thưởng - bạn có thể thay thế PHP để toàn bộ trang web của bạn bằng một ngôn ngữ: Java.

Hơn nữa, bạn có thể xem xét sửa đổi trường hợp sử dụng của mình để không phải là 30-60 giây đau đớn trong một cảnh, nhưng có thể là một loạt các bước nhanh hơn được thực hiện tương tác với người dùng.

2

Chạy mã của bạn bên trong vùng chứa servlet.

Giả sử bạn cần giữ trang web của mình bằng PHP và khi bạn đã cài đặt java trên máy của mình, chỉ cần cài đặt một thùng chứa servlet miễn phí (như Apache Tomcat hoặc Jetty). Cấu hình để chạy thùng chứa servlet trên một cổng chưa sử dụng. (8080) là mặc định của chúng.

Các thùng chứa servlet này thực sự là máy chủ web dựa trên java, giống như Apache, tuy nhiên chuyên về phân phối mã java.

Lợi thế rõ ràng nhất khi sử dụng máy chủ web java thay vì lời gọi java.exe mới cho mỗi yêu cầu, là máy ảo java của bạn (jvm) sẽ luôn "nóng", hoạt động và chạy. Mỗi khởi đầu mới của java.exe (jvm) sẽ cung cấp cho bạn thêm vài giây chất thải.

Lợi thế thứ hai của việc sử dụng thùng chứa servlet, là vùng chứa sẽ cho phép mã của bạn chạy trong một chuỗi mới, bên trong jvm, cho mỗi yêu cầu mới. Bạn sẽ không có vấn đề gì khi cung cấp dịch vụ cho hàng ngàn người dùng của bạn mỗi ngày. Nhiều khả năng, máy của bạn sẽ sụp đổ nếu bạn bắt đầu hàng trăm phiên bản java thay vì một.

Đặt mã của bạn bên trong một servlet. Nó thực sự là dễ dàng ngay cả đối với một người mới. Bạn sẽ nói chuyện với servlet thông qua HTTP (các phương thức doGet hoặc doPost của servlet). Chuyển biểu mẫu yêu cầu php tới servlet này và có servlet cung cấp cho bạn lại bất cứ điều gì: một trang, một đối tượng json, xml hoặc văn bản thuần túy.

0

Điều đơn giản nhất để bắt đầu là nhúng máy chủ web vào ứng dụng của bạn. Có một cái nhìn tại Jetty.

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