簡體   English   中英

portlet 和 servlet 有什么區別?

[英]what is the difference between a portlet and a servlet?

我被要求從事 portlet 和門戶的工作。

我想知道 portlet 和 servlet 之間的區別?

Portlet 與 servlet 有何不同(可能在功能上)?

從源頭增強Servlets Vs Portlets

相似之處

  1. Servlet 和 Portlet 是基於 Web 的組件,它們使用 Java 來實現。

  2. Portlet 由 Portlet 容器管理,就像 servlet 由 servlet 容器管理一樣。

  3. 靜態和動態內容都可以由 Portlet 和 Servlet 生成。

  4. portlet 和 servlets 的生命周期由容器控制

  5. 客戶機/服務器模型用於 servlet 和 portlet

  6. 打包和部署本質上是一樣的,WAR/EARs。

  7. Application Session 存在於 Servlet 和 Portlet 容器中。 它是在 portlet 容器中從呈現階段到操作階段(或任何更低的階段)共享數據(粗略的 Portlet 間通信)的方式之一。

  8. Servlet 和 Portlet 都使用類似的服務器/VM 環境來支持它。 雖然,在 portlet 的情況下可能需要一些額外的配置來使其勾選

  9. 兩者的構建/DI 工具相似——Ant、Maven、Gradle 等都受支持。 主要是 :) - Liferay 7 的情況有所改變。


差異

  1. Servlet 可以呈現完整的網頁,而 Portlet 可以呈現 html 片段。 這些片段由門戶聚合成一個完整的網頁。

  2. JSR 168 portlet 的內容類型只能是 cHTML、XHTML、WML。 它不支持其他內容類型。

  3. 不允許 Portlet 生成包含諸如正文、框架、框架集、頭部、html 或標題等標簽的 HTML 代碼。

  4. 與 servlet 不同的 Portlet 沒有附加 URL,因此不能直接訪問它。 只能通過包含 portlet 的門戶頁面進行訪問。

  5. 可以為 Portlet 提供控件以操縱其窗口狀態或 Portlet 模式。

  6. 可以將單個 portlet 的多個實例放置在同一頁面上。

  7. Portlet 支持持久配置和定制、配置文件信息。

  8. Portlet 可以有兩種類型的請求即。 呈現請求和動作請求。

  9. Portlet 在會話中有兩個作用域; Portlet 間通信的應用范圍和 Portlet 內部通信的 Portlet 范圍。

  10. Portlet 不能設置響應的字符集編碼,也不能設置 HTTP 響應頭。

  11. Portlet 無權訪問請求 URL。 因此它無法訪問附加到 URL 的查詢參數。 Portlet 無法設置 cookie。

  12. Portlet API 的典型方法是doView()doEdit()doHelp()processAction()而 servlet 的典型方法是service()doPost()doGet()

  13. Servlet 規范- JSR 369(Servlet 4.0)、JSR 340(Servlet 3.1)、JSR 315(Servlet 3.0)、JSR 154(Servlet 2.5 & 2.4)。 Portlet 規范- JSR 168(Portlet Spec v1.0)、JSR 286(Portlet Spec v2.0)、JSR 362(Portlet Spec v3.0)

  14. Portlet 的部署涉及Servlet 應用程序不同的方法 一些提供程序(Liferay/Alfresco/WebSphere)支持 portlet 的熱部署,而無需重新啟動服務器,這在 servlet 的情況下是不可能的,而無需使用特殊的庫(如 OSGi)對應用程序進行模塊化。


編輯(來自評論)

Portlet 容器構建在 Servlet 容器上。 所以最終可以說 portlet 在 Servlet Container 上運行。 但是在開發應用程序時,我們將 Portlet 容器與 Servlet/Java EE 容器分開查看。

Portlet 是規范門戶容器和組件的 JSR-168 標准的一部分。 這與 Web 容器(和 servlet)的標准不同。 盡管這兩個標准之間肯定有很強的相似之處,但它們在容器、API、生命周期、配置、部署等方面有所不同。

portlet 與 servlet 之間的主要區別可能在於,雖然 servlet 總是響應單一類型的 action - request ,但 portlet(由於其生命周期的性質和更強的容器綁定)必須響應兩種類型的 action: renderrequest 當然還有更多,但當我研究門戶開發時,我發現這是兩者之間的核心區別。

portlet 和 servlet 都接收一個 http 請求並返回一個響應,這通常是一些可以由瀏覽器呈現的 HTML。 portlet 在“門戶”的上下文中使用,其想法是用戶看到的單個頁面有很多部分,想想磁貼,每個部分都來自不同的 portlet。

現在,您可以從普通服務中獲得“平鋪”效果(有關如何操作的示例,請參閱 Struts + Tiles) portlet 的額外部分是 portlet 位於門戶提供的更豐富的環境中,提供了額外的 API,以便任何 portlet 顯示的內容都可以由個人用戶根據他們的喜好進行配置,並且這些 portlet 可以相互通信 - 在一個按鈕中按下按鈕,在另一個中發生某些事情。

Servlet 有一個 java 定義(處理 HTTP GET/POST 請求的應用程序),而 portlet 有一個用戶界面定義。一個執行特定功能的組件,類似於 windows vista 小部件或這里 stackoverflow 中使用的許多組件。 它們不一定需要由服務器端的 servlet 支持。 但是 Portlet 標准是與 java 一起開發的。 O'Reilly 有一個很好的教程

本質上,Servlet 提供的內容通常占據瀏覽器中的整個頁面(除非您使用框架),而 portlet 提供由窗口包裝的內容。 使用 portlet,您可以將多個 portlet 並排放置,並且每個 portlet 都可以提供彼此不同的內容和功能。 一個 portlet 可以為一種類型的應用程序提供完整的交互,而另一個 portlet 可以為另一種類型的應用程序提供內容。 門戶可以提供一些內務管理功能和對頁面上所有 portlet 的安全單點入口。 至於它們之間的細節(相同點/不同點),請繼續閱讀。 這里有一些相似之處: Servlet 和 Portlet 是基於 Web 的組件,它們利用 Java 來實現 Portlet 由類似於 servlet 容器的 Portlet 容器管理 這兩個組件都生成內容,可以是靜態的也可以是動態的

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM