2013-05-08 43 views
21

Tôi cần xóa một vài thứ. Tôi đã được tìm kiếm một câu trả lời cho điều này, nhưng tôi dường như không thể tìm thấy một câu trả lời tốt cho câu hỏi cụ thể của tôi (ví dụ: câu hỏi này đã được nibbling trên câu trả lời: Difference between servlet and web service).Khi nào sử dụng Servlet hoặc @Controller

Để hiểu biết của tôi, có những cách khác nhau mà bạn có thể thực hiện "xử lý yêu cầu", hay còn gọi là "điều khiển", trong một "MVC định hướng" ứng dụng web, hai trong số đó là:

  1. Một Java cụ thể Servlet (ví dụ: bạn tạo bằng cách nhấp vào mới -> Servlet, trong nhật thực chẳng hạn), được sử dụng làm "Bộ điều khiển". Điều này một kéo dài HttpServlet và bạn sử dụng các phương pháp như doGetdoPost, vv
  2. Một Spring MVC chú thích @Controller lớp (có, sử dụng một DispatcherServlet). Với cái này bạn sử dụng @RequestMethodGET/POST, vv

Bây giờ để câu hỏi của tôi ...

  • Khi nào bạn sử dụng một hay khác?
  • Có bất kỳ chung ưu điểm nào để sử dụng một phương pháp này cho phương pháp khác không?(Giống như, là một trong những phương pháp đề nghị trong khác nói chung?)

[EDIT]: từ khóa Nhấn mạnh

Trả lời

15

Nếu bạn là sinh viên quan tâm đến việc học ngôn ngữ thì tôi sẽ gắn bó với servlet ngay bây giờ. Có thể viết một ứng dụng web bằng cách sử dụng các servlet nhưng trong thực tế bạn có thể cũng muốn xem xét đến JSP.

JSP là một cách thuận tiện để viết một servlet cho phép bạn kết hợp html với các phần tử kịch bản (mặc dù bạn nên tránh mã Java trong jsp của bạn có lợi cho thẻ và biểu thức el). Dưới nắp, nó sẽ được biên dịch như một servlet nhưng nó tránh cho bạn phải sử dụng rất nhiều câu lệnh in lộn xộn.

Điều quan trọng là phải có ít nhất một sự hiểu biết cơ bản về servlets và JSP. Spring MVC là một trong nhiều framework được xây dựng trên các servlet để làm cho nhiệm vụ viết một ứng dụng web dễ dàng hơn một chút. Về cơ bản, tất cả các yêu cầu được ánh xạ tới DispatcherServlet hoạt động như một front controller.

DispatcherServlet sau đó sẽ gọi bộ điều khiển có chú thích khớp với yêu cầu đến. Điều này có nghĩa là bạn phải tự viết các bản đồ này trong web.xml (mặc dù với servlet 3.0, bạn có thể chú thích các servlet ngay bây giờ). Nhưng bạn cũng nhận được nhiều lợi ích khác có thể được sử dụng như ánh xạ các trường biểu mẫu cho một đối tượng, xác nhận đối tượng đó với chú thích jsr303, đầu vào bản đồ và kết quả đầu ra cho xml hoặc json, v.v. Cộng với nó được tích hợp chặt chẽ với lõi lò xo để bạn có thể dễ dàng kết nối dịch vụ của bạn cho bộ điều khiển để gọi.

Cần lưu ý rằng có rất nhiều khung cạnh tranh được xây dựng trên các servlet. Spring MVC là một trong những phổ biến nhất vì vậy nó không phải là một lựa chọn xấu để xem xét.

+0

Giải thích hay! Tôi có một sự hiểu biết cơ bản về cách mọi thứ hoạt động riêng lẻ, nó chỉ là tôi không thể thực sự đặt ngón tay của mình vào khi nào sử dụng phương pháp luận. Bạn giải thích sự khác biệt giữa hai mặc dù, mà không cần xây dựng lĩnh vực sử dụng thực tế của họ. Bạn có thể đặt tên cho bất kỳ ví dụ nào về một tình huống mà tôi sẽ sử dụng một phương pháp nào khác không? – Roger

+0

Cả hai đều được sử dụng cho cùng một thứ (tạo ứng dụng web). Sự khác biệt là Spring MVC thêm vào rất nhiều tiện lợi.Hầu hết mọi người viết một ứng dụng web Java sẽ sử dụng một số loại khung được viết trên đầu trang của các servlet để làm cho phát triển dễ dàng hơn. VÍ DỤ. nếu bạn đột nhiên có một trường hợp sử dụng cho một yêu cầu để trả về json thì spring mvc đã hỗ trợ nó trong khi với servlet bạn phải tự tìm ra nó. Nó vẫn còn hữu ích để biết servlets vì nó là công nghệ cơ bản. –

+0

Tôi hiểu. Vì vậy, về cơ bản một servlet được tạo ra với cả hai phương thức, làm điều tương tự - chỉ trong # 2 bạn sử dụng Spring MVC làm khung làm việc để giúp bạn trên đường? Đó là, với sự giúp đỡ của @ MVC của Spring MVC, DispatcherServlet và một số JSP ("java trong html"), bạn tạo ra điều tương tự như thể bạn sẽ tạo ra một Servlet ("html trong java" (nghĩa là mới -> Servlet. ..)) và một số JSP/html của riêng bạn, chỉ có trong trường hợp Spring MVC, Spring sẽ chăm sóc "phần khó chịu" của doanh nghiệp servlet "miễn phí"? Đó có phải là một sự hiểu biết chính xác của tất cả? (Xin lỗi vì đã chậm một chút :) – Roger

4

JSF và JSP là tốt như Spring MVC builts trên Servlets. Vấn đề này mà servlet không phải là rất "đẹp" để làm việc với bởi vì bạn phải viết html trực tiếp.

Nếu bạn có thể sử dụng các công nghệ web hiện đại, tôi sẽ chỉ sử dụng các servlet ở các vị trí cần đầu ra http trực tiếp như viết một hình ảnh từ cơ sở dữ liệu đến http.

Sử dụng SpringMVC hoặc JSF hoạt động với Dipatcherservlet hoặc FacesServlet chỉ nhanh hơn và thú vị hơn. Họ phân tích các tệp của bạn và gửi nó qua một servlet.

+0

JPA không liên quan gì đến servlet. Và servlet thường được sử dụng kết hợp với JSP, giống như các bộ điều khiển MVC của Spring. –

+0

Tôi có nghĩa là JSP tôi luôn viết JPA khi tôi ngụ ý JSP. lấy làm tiếc. –

+0

@Templar Cảm ơn bạn đã trả lời! Tôi vẫn còn hơi bối rối. Bạn sẽ sử dụng loại ứng dụng nào '@ Controller' (Spring MVC) và loại ứng dụng nào bạn sẽ sử dụng" servlet thông thường "? – Roger

6

Một Servlet và MVC Controller mùa xuân có thể được sử dụng để làm điều tương tự nhưng chúng hoạt động trên mức độ khác nhau của một ứng dụng Java

Servlet là một phần của khuôn khổ J2EE và mỗi máy chủ ứng dụng Java (Tomcat, Jetty, vv) được xây dựng để chạy các servlet. Servlet là lớp "cấp thấp" trong ngăn xếp J2EE. Bạn không cần một servlet.jar để chạy ứng dụng của bạn bởi vì nó được đóng gói sẵn với máy chủ ứng dụng

Bộ điều khiển Spring MVC là một thư viện được xây dựng trên servlet để làm mọi thứ dễ dàng hơn. Spring MVC cung cấp nhiều chức năng được tích hợp sẵn hơn như tham số biểu mẫu cho ánh xạ tham số phương thức của bộ điều khiển, xử lý dễ dàng hơn việc gửi biểu mẫu nhị phân (tức là khi biểu mẫu của bạn có thể tải lên tệp). Bạn cần đóng gói các lọ cần thiết cho ứng dụng của mình để chạy Bộ điều khiển MVC Spring

Bạn nên sử dụng một servlet khi bạn cần "cấp thấp" và ví dụ có thể vì lý do hiệu suất. Spring MVC thực hiện tốt nhưng nếu nó có một số chi phí, nếu bạn cần phải ép ra tất cả các bạn có thể từ máy chủ ứng dụng của bạn (và bạn đã điều chỉnh các lớp khác như db) đi với một servlet. Bạn có thể chọn một servlet nếu bạn muốn hiểu nền tảng của các đặc tả web J2EE (tức là cho các mục đích giáo dục)

Trong tất cả các trường hợp khác bạn có thể/nên chọn một khuôn khổ web. Spring MVC là một trong số đó; với Spring MVC bạn không cần phải tái tạo lại bánh xe (tức là quản lý biểu mẫu nhị phân, tham số biểu mẫu để chuyển đổi bean, xác thực thông số và vv). Điểm cộng khác của Spring MVC là trong một lớp, bạn có thể dễ dàng quản lý đầu vào từ các url và phương thức khác nhau, làm như vậy trong servlet là có thể nhưng mã phức tạp hơn và ít đọc được hơn. Ý kiến ​​của tôi là Spring MVC là tốt cho việc xây dựng các dịch vụ còn lại và quản lý các ứng dụng đơn giản (ví dụ ứng dụng web với các biểu mẫu đơn giản). Nếu bạn cần quản lý các biểu mẫu rất phức tạp với Ajax, các biểu mẫu lồng nhau và một ứng dụng có cả phiên và trạng thái trang, lời khuyên của tôi là chuyển sang một khung dựa trên thành phần (ví dụ như apache wicket).

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