Câu trả lời:
Portlet là một phần của tiêu chuẩn JSR-168 quy định các thành phần và thùng chứa cổng thông tin. Đây là tiêu chuẩn khác với các tiêu chuẩn cho vùng chứa web (và các servlet). Mặc dù chắc chắn có những điểm tương đồng mạnh mẽ giữa hai tiêu chuẩn này, chúng khác nhau về vùng chứa, API, vòng đời, cấu hình, triển khai, v.v.
Sự khác biệt chính giữa portlet so với servlet có thể là trong khi servlet luôn đáp ứng một loại hành động duy nhất - yêu cầu , thì portlet (do bản chất vòng đời của nó và các ràng buộc vùng chứa mạnh hơn) phải đáp ứng hai loại hành động: hiển thị và yêu cầu . Tất nhiên còn nhiều hơn thế nữa nhưng tôi thấy đây là điểm khác biệt cốt lõi giữa hai loại này khi tôi nghiên cứu về phát triển cổng thông tin.
Nâng cao từ Nguồn : Servlets Vs Portlets
Điểm tương đồng
Servlet và Portlet là các thành phần dựa trên web sử dụng Java để triển khai chúng.
Các portlet được quản lý bởi một portlet container giống như servlet được quản lý bởi servlet container.
Cả nội dung tĩnh và động đều có thể được tạo bởi Portlet và Servlet.
Vòng đời của các portlet và servlet được kiểm soát bởi container
Mô hình máy khách / máy chủ được sử dụng cho cả servlet và portlet
Việc đóng gói và triển khai về cơ bản là giống nhau, WAR / EAR.
Phiên ứng dụng tồn tại trong cả vùng chứa Servlet và Portlet. Đó là một trong những cách chia sẻ dữ liệu (Giao tiếp giữa các Portlet thô) từ giai đoạn kết xuất đến giai đoạn hành động (hoặc bất kỳ giai đoạn nào thấp hơn) trong các thùng chứa portlet.
Cả Servlet và Portlet đều sử dụng môi trường máy chủ / VM tương tự hỗ trợ nó. Mặc dù, một số cấu hình bổ sung có thể cần thiết trong trường hợp các portlet để làm cho nó được đánh dấu
Các công cụ xây dựng / DI tương tự cho cả hai - Ant, Maven, Gradle, v.v. đều được hỗ trợ. Chủ yếu là :) - Điều này đã thay đổi một chút với Liferay 7.
Sự khác biệt
Servlet có thể hiển thị các trang web hoàn chỉnh, trong khi các portlet hiển thị các đoạn html. Những đoạn này được cổng thông tin tổng hợp lại thành một trang web hoàn chỉnh.
Loại nội dung của các portlet JSR 168 chỉ có thể là cHTML, XHTML, WML. Nó không hỗ trợ các loại nội dung khác.
Các portlet không được phép tạo mã HTML có chứa các thẻ như body, frame, frameset, head, html hoặc title.
Một Portlet không giống như một servlet không có URL gắn liền với nó nên nó không thể được truy cập trực tiếp. Truy cập chỉ thông qua trang cổng thông tin chứa portlet.
Các portlet có thể được cung cấp các điều khiển để thao tác các trạng thái cửa sổ hoặc chế độ portlet của nó.
Nhiều phiên bản của một portlet có thể được đặt trên cùng một trang.
Các portlet hỗ trợ cấu hình và tùy chỉnh liên tục, thông tin hồ sơ.
Các portlet có thể có hai loại yêu cầu viz. kết xuất yêu cầu và yêu cầu hành động.
Portlet có hai phạm vi trong phiên; phạm vi ứng dụng để giao tiếp giữa các portlet và phạm vi portlet để giao tiếp nội bộ portlet.
Portlet không thể đặt mã hóa bộ ký tự của phản hồi cũng như không thể đặt tiêu đề phản hồi HTTP.
Các portlet không có quyền truy cập để yêu cầu URL. Vì vậy, nó không thể truy cập các tham số truy vấn được thêm vào URL. Các portlet không thể đặt cookie.
Phương pháp điển hình của Portlet API là
doView()
,doEdit()
,doHelp()
vàprocessAction()
trong khi những người của servlet làservice()
,doPost()
,doGet()
.Thông số kỹ thuật của Servlet - JSR 369 (Servlet 4.0), JSR 340 (Servlet 3.1), JSR 315 (Servlet 3.0), JSR 154 (Servlet 2.5 & 2.4). Thông số kỹ thuật của Portlet - JSR 168 (Portlet Spec v1.0), JSR 286 (Portlet Spec v2.0), JSR 362 (Portlet Spec v3.0)
Việc triển khai các Portlet liên quan đến cách tiếp cận khác với ứng dụng Servlet. Một số Nhà cung cấp (Liferay / Alfresco / WebSphere) hỗ trợ triển khai nóng các portlet mà không cần phải khởi động lại máy chủ, điều này không thể thực hiện được trong trường hợp các servlet không mô-đun hóa ứng dụng bằng các thư viện đặc biệt như OSGi.
Chỉnh sửa (Từ nhận xét)
Một thùng chứa Portlet được xây dựng trên một thùng chứa Servlet. Vì vậy, cuối cùng có thể nói rằng portlet chạy trên Servlet Container. Nhưng trong khi phát triển ứng dụng, chúng tôi xem một vùng chứa portlet riêng biệt với vùng chứa Servlet / Java EE.
Cả portlet và servlet đều nhận được một yêu cầu http và trả về một phản hồi, đây là một số HTML thông thường có thể được trình duyệt hiển thị. Một portlet được sử dụng trong ngữ cảnh của một "Cổng thông tin", ý tưởng là một trang duy nhất được người dùng xem có rất nhiều phần, các ô suy nghĩ, mỗi phần đến từ một portlet khác nhau.
Bây giờ, bạn có thể nhận được hiệu ứng "lát gạch" đó từ các lần phục vụ bình thường (Xem Struts + Tiles để biết ví dụ về cách thực hiện) bit bổ sung từ các portlet là các portlet ở trong môi trường phong phú hơn do Cổng cung cấp, các API bổ sung được cung cấp để những gì được hiển thị bởi bất kỳ portlet nào đều có thể được cấu hình bởi người dùng cá nhân theo sở thích của họ và các porlet có thể giao tiếp với nhau - nhấn một nút trong một cái, một cái gì đó xảy ra trong một cái khác.
Servlet có định nghĩa java (ứng dụng xử lý các yêu cầu HTTP GET / POST), trong khi các portlet có định nghĩa giao diện người dùng. Một thành phần thực hiện một chức năng cụ thể tương tự như các widget vista của windows hoặc rất nhiều thành phần được sử dụng trong stackoverflow ở đây. Chúng không nhất thiết phải được hỗ trợ bởi các servlet ở phía máy chủ. Nhưng tiêu chuẩn Portlet được phát triển cùng với java. O'Reilly có một hướng dẫn hay .
Về cơ bản, Servlet cung cấp nội dung thường chiếm toàn bộ trang trong trình duyệt (trừ khi bạn đang sử dụng khung) và portlet cung cấp nội dung được bao bọc bởi một cửa sổ. Với các portlet, bạn có thể có nhiều portlet cạnh nhau và mỗi portlet có thể cung cấp nội dung và chức năng khác với các portlet khác. Một portlet có thể cung cấp sự tương tác hoàn chỉnh cho một loại ứng dụng, trong khi một portlet khác có thể cung cấp nội dung cho một loại ứng dụng khác. Cổng thông tin có thể cung cấp một số chức năng giữ nhà và bảo mật điểm vào duy nhất cho tất cả các portlet trên một trang. Còn về chi tiết (điểm giống / khác nhau) giữa chúng, hãy tiếp tục đọc. Dưới đây là một số điểm tương đồng: