2008-11-07 27 views
23

Tôi biết, nó phụ thuộc vào webapp. Nhưng trong trường hợp bình thường, bạn làm gì: một servlet, phục vụ các trang khác nhau (như một ứng dụng độc lập với thay đổi nội dung) hoặc cho mỗi trang một servlet đơn.Một hoặc nhiều servlet cho mỗi ứng dụng web?

Lấy ví dụ một blog. Có trang bắt đầu với các bài viết blog mới nhất, một bài viết-xem để hiển thị một mục nhập blog và một kho lưu trữ. Bạn có thực hiện điều này với ba servlet khác nhau hay một servlet gửi đến các hàm. Ít nhất một phần hay của nội dung được chia sẻ, như tiêu đề http.

Vì vậy, trải nghiệm của bạn là gì, điều gì hoạt động tốt nhất?

Trả lời

9

Thông thường, bạn sẽ tạo một servlet cho mỗi trường hợp sử dụng. Servlets hoạt động như bộ điều khiển cho ứng dụng của bạn. Khi bạn xác định tương tác từ người dùng, hãy triển khai servlet để kiểm soát tương tác đó.

Tức là, nếu bạn đang sử dụng servlet đơn giản/JSP để xây dựng trang web. Nếu bạn đang sử dụng một khung như struts, bạn sẽ thấy rằng chúng triển khai thực hiện mẫu front controller và sử dụng một servlet đơn để nhận tất cả các yêu cầu và chuyển tiếp các yêu cầu đến các lớp hành động thực hiện logic thực tế của yêu cầu người dùng. điều này là khó khăn hơn nhiều để làm cho mình nhưng nó là một thực hành tốt ... đó là lý do tại sao rất nhiều người sử dụng các khuôn khổ này.

Vì vậy, câu trả lời ngắn gọn là bạn sẽ tạo nhiều servlet cho mỗi webapp vì mỗi ứng dụng web sẽ hiển thị một số trường hợp sử dụng.

[EDIT] Đọc lại câu hỏi của bạn có vẻ như bạn đang sử dụng thuật ngữ trang web để có nghĩa là trang hoặc chế độ xem. Một lần nữa, nó phụ thuộc vào những gì đang xảy ra trên quan điểm đó. Ví dụ, để hiển thị mục nhập blog mới nhất, bạn có thể có một servlet xây dựng danh sách các mục từ cơ sở dữ liệu để hiển thị. Nếu người dùng nhấp vào một mục nhập thì một servlet khác có thể truy xuất mục nhập đó để xem và vân vân. Chủ yếu, mỗi hành động là một ca sử dụng do đó một servlet khác.

+0

Có giống như mô hình kho lưu trữ mvc không? như trong asp.net mvc, chúng tôi tổng hợp chức năng tương tự thành một bộ điều khiển. Vậy servlet có tương tự như ý tưởng này không? – Timeless

+1

@Timeless không thực sự, tôi không nghĩ như vậy. Servlets là các khối xây dựng khá thấp và trong nhiều năm, các nhà phát triển ứng dụng đã sử dụng các khung công tác nâng cao hơn trên nền tảng servlet nhưng cung cấp kiến ​​trúc ứng dụng tốt hơn. Ví dụ, MVC của Spring là một trong những framework tương tự với nhiều cách khác nhau trong ASP MVC. –

7

Hầu hết các khung công tác web đều sử dụng một servlet điều phối (ví dụ: Spring MVC) để xử lý các yêu cầu định tuyến tới các lớp/bộ điều khiển thích hợp.

Khi bạn bắt đầu có nhiều trang, cách tiếp cận này hoạt động tốt nhất vì bạn có cách thân thiện với người dùng hơn (liên quan đến web.xml) khai báo/quản lý lớp xử lý yêu cầu http và url của nó. Ví dụ (spring mvc again):

@Controller 
public class MyController { 
@RequestMapping("/viewPosts") 
public void doViewPosts(HttpRequest r, HttpResponse res) { 
    //... 
} 
} 

Ngoài ra, có một bộ điều phối lưu giữ tập lệnh mã của bạn tập trung.

2

Điều đó tùy thuộc.

Trong các dự án mới nhất của mình, tôi đã triển khai một servlet đơn lẻ ủy nhiệm cho một số đối tượng giống như servlet được khởi tạo theo kiểu tiêm phụ thuộc. Ví dụ, tôi có một cái gì đó như thế này trong servlet của tôi (pseudo-code):

for(Handler handler : handlers) { 
    if(handler.handle(request, response)) { 
     return; 
    } 
} 

nơi Handler là một giao diện với một xử lý boolean (yêu cầu, phản hồi) phương pháp. Tôi có được các trình xử lý của tôi từ một thùng chứa (có thể là Spring hoặc thứ gì đó nhẹ hơn).

Lý do cho điều này là tôi thực sự thích tiêm phụ thuộc, và rất khó để đạt được nó trong Servlets; và tôi thực sự không cảm thấy nhiều ở nhà với hầu hết các khung công tác cung cấp sự phụ thuộc vào thành phần web-tôi thích sự đơn giản của các servlet.

Không phải vì điều này, tôi sẽ đi với nhiều servlet, mặc dù có một sự cân bằng; hoặc bạn có một xml web khổng lồ với rất nhiều (và rất nhiều) ánh xạ servlet hoặc bạn có một servlet rất phức tạp (trừ khi bạn sử dụng một cái gì đó giống như cách tiếp cận d-i của tôi).

+2

Đó là một sáng chế của bánh xe. Một bánh xe tốt đặc biệt là DispatcherServlet. Xem http://static.springframework.org/spring/docs/2.0.x/reference/mvc.html để biết thêm chi tiết. Giao diện điều khiển của nó chấp nhận một yêu cầu và đáp ứng như "trình xử lý" của bạn. – MetroidFan2002

+3

Tôi biết về MVC của Spring- nó rõ ràng đã ảnh hưởng đến thiết kế của tôi. Nhưng nó có rất nhiều tính năng tôi không cần và có phần phức tạp hơn. Nó đã làm việc tốt cho tôi, và tôi muốn tự mình thực hiện nó. Nếu nhu cầu của bạn rất phù hợp với MVC của Spring, bằng mọi cách, hãy sử dụng nó. – alex

+0

Bạn có thể giải thích thêm một chút về 'Tôi đã triển khai một servlet đơn lẻ đại diện cho một số đối tượng giống như servlet được khởi tạo trong một thời trang tiêm phụ thuộc' hay không. Một số mã giả sẽ được đánh giá cao, giống như nếu bạn có 4 servlet khác nhau 'B',' C', 'D' và' E', làm thế nào để thêm một servlet 'A' sẽ dành công việc cho' B', ' C', 'D' và' E'. –

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