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
相似
Servlet和Portlet是基于Web的组件,它们使用Java来实现。
Portlet由portlet容器pipe理,就像servlet由servlet容器pipe理一样。
静态和dynamic内容都可以由Portlet和Servlet生成。
portlet和servlet的生命周期由容器控制
客户机/服务器模型用于servlet和portlet
WAR / EARs的打包和部署基本相同。
应用程序会话存在于Servlet和Portlet容器中。 这是从Portlet容器中的呈现阶段到动作阶段(或任何较低阶段)共享数据(粗糙的Inter-Portlet通信)的方式之一。
- Servlet和Portlet都使用类似的支持它的服务器/虚拟机环境。 尽pipeportlet可能需要一些额外的configuration才能使其成为可能
- 构build/ DI工具都是相似的 – Ant,Maven,Gradle等都是支持的。 大部分:) – 这已经改变了一点与Liferay 7。
不同点
Servlet可以呈现完整的网页,而portlet呈现html片段。 这些片段由门户聚合成一个完整的网页。
JSR 168 portlet的内容types只能是cHTML,XHTML,WML。 它不支持其他内容types。
不允许portlet生成包含标签(如body,frame,frameset,head,html或title)的HTML代码。
与servlet不同的Portlet没有附加URL,因此无法直接访问。 访问只能通过持有portlet的门户页面。
Portlet可以提供控件来操作其窗口状态或Portlet模式。
单个portlet的多个实例可以放置在同一个页面上。
Portlet支持持久性configuration和自定义configuration文件信息。
Portlet可以有两种请求types。 呈现请求和操作请求。
Portlet在会话中有两个范围; 应用程序范围用于通过Portlet进行通信,Portlet范围用于Portlet通信。
Portlet不能设置响应的字符集编码,也不能设置HTTP响应头。
Portlet无权访问请求URL。 所以它不能访问附加到URL的查询参数。 Portlet无法设置Cookie。
Portlet API的典型方法是
doView()
,doEdit()
,doHelp()
和processAction()
而servlet的方法是service()
,doPost()
,doGet()
。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的