portlet和servlet有什么区别?

我被要求在Portlet和门户网站上工作。

我想知道一个portlet和一个servlet的区别吗?

一个portlet在一个servlet中如何/在哪里与function不同?

Portlet是pipe理门户容器和组件的JSR-168标准的一部分。 这是与Web容器(和servlet)标准不同的标准。 虽然这两个标准之间有很强的相似之处,但它们在容器,API,生命周期,configuration,部署等方面有所不同。

portlet和servlet之间的主要区别可能在于servlet总是响应单一types的动作 – 请求 ,portlet(由于其生命周期的性质和更强的容器绑定)必须响应两种types的动作: 渲染请求 。 当然还有更多,但是当我学习门户开发时,我发现这是两者的核心区别。

从源代码增强 : Servlets VS Portlets

相似

  1. Servlet和Portlet是基于Web的组件,它们使用Java来实现。

  2. Portlet由portlet容器pipe理,就像servlet由servlet容器pipe理一样。

  3. 静态和dynamic内容都可以由Portlet和Servlet生成。

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

  5. 客户机/服务器模型用于servlet和portlet

  6. WAR / EARs的打包和部署基本相同。

  7. 应用程序会话存在于Servlet和Portlet容器中。 这是从Portlet容器中的呈现阶段到动作阶段(或任何较低阶段)共享数据(粗糙的Inter-Portlet通信)的方式之一。

  8. Servlet和Portlet都使用类似的支持它的服务器/虚拟机环境。 尽pipeportlet可能需要一些额外的configuration才能使其成为可能
  9. 构build/ DI工具都是相似的 – Ant,Maven,Gradle等都是支持的。 大部分:) – 这已经改变了一点与Liferay 7。

不同点

  1. Servlet可以呈现完整的网页,而portlet呈现html片段。 这些片段由门户聚合成一个完整的网页。

  2. JSR 168 portlet的内容types只能是cHTML,XHTML,WML。 它不支持其他内容types。

  3. 不允许portlet生成包含标签(如body,frame,frameset,head,html或title)的HTML代码。

  4. 与servlet不同的Portlet没有附加URL,因此无法直接访问。 访问只能通过持有portlet的门户页面。

  5. Portlet可以提供控件来操作其窗口状态或Portlet模式。

  6. 单个portlet的多个实例可以放置在同一个页面上。

  7. Portlet支持持久性configuration和自定义configuration文件信息。

  8. Portlet可以有两种请求types。 呈现请求和操作请求。

  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. Portlet的部署涉及到与 Servlet应用程序不同的方法 。 一些提供者(Liferay / Alfresco / WebSphere)支持热部署portlet,而不需要重启服务器,而对于使用特殊库(如OSGi)的应用程序模块化应用程序而言,servlet是不可能的。


编辑 (来自评论)

一个Portlet容器是build立在一个Servlet容器上的。 所以最终可以说portlet在Servlet容器上运行。 但是在开发应用程序时,我们单独从Servlet / Java EE容器中查看Portlet容器。

portlet和servlet都会收到一个http请求并返回一个响应,这个响应通常是一些可以被浏览器渲染的HTML。 一个portlet用在“Portal”的上下文中,这个想法是用户看到的单个页面有很多部分,认为每个页面都来自不同的portlet。

现在,您可以从正常的服务器获得“平铺”效果(请参阅Struts + Tiles以获取示例),Portlet的额外位是Portlet处于Portal提供的更丰富的环境中,因此提供了额外的API什么是由任何portlet显示可以由个人用户configuration他们的喜好,porlet可以相互沟通 – 在一个按下button,发生在另一个。

Servlet有一个java定义(处理HTTP GET / POST请求的应用程序),而portlet有一个用户界面定义。一个组件执行类似于windows vista小部件的特定function,或者在这里使用大量的组件。 它们不一定需要服务器端的servlet支持。 但是Portlet标准是和java一起开发的。 O'Reilly有一个很好的教程 。

本质上,Servlet提供的内容通常占用浏览器中的整个页面(除非使用框架),而Portlet则提供由窗口包装的内容。 使用portlet,您可以将多个portlet并排放置,每个portlet可以提供不同于另一个的内容和function。 一个portlet可以为一种types的应用程序提供完整的交互,而另一个portlet可以为另一种types的应用程序提供内容。 该门户可以提供一些pipe理function,并保证页面上所有portlet的单点入口。 至于它们之间的细节(相似/差异),请继续阅读。 这里有一些相似之处:Servlets和Portlet是基于Web的组件,利用Java来实现它们Portlet由类似于Servlet容器的Portlet容器pipe理。这两个组件都生成内容,可以是静态的或dynamic的