Ash*_*lix 132
从Source增强: Servlets与Portlet
相似
Servlet和Portlet是基于Web的组件,它们使用Java来实现它们.
Portlet由portlet容器管理,就像servlet由servlet容器管理一样.
Portlet和Servlet都可以生成静态和动态内容.
portlet和servlet的生命周期由容器控制
客户端/服务器模型用于servlet和portlet
WAR/EARs的包装和部署基本相同.
应用程序会话存在于Servlet和Portlet容器中.它是在portlet容器中从呈现阶段到动作阶段(或任何较低阶段)共享数据(粗略的Portlet间通信)的方式之一.
- Servlet和Portlet都使用类似的服务器/ VM环境来支持它.尽管如此,在portlet使其打勾的情况下可能还需要一些其他配置
- 构建/ DI工具两者都相似 - 都支持Ant,Maven,Gradle等.大多数:) - 这与Liferay 7有所改变.
不同点
Servlet可以呈现完整的Web页面,而Portlet呈现html片段.门户将这些片段聚合到一个完整的网页中.
JSR 168 portlet的内容类型只能是cHTML,XHTML,WML.它不支持其他内容类型.
不允许Portlet生成包含标签(例如正文,框架,框架集,头部,html或标题)的HTML代码.
与servlet不同的Portlet没有附加URL,因此无法直接访问它.只能通过保存portlet的门户页面进行访问.
可以为Portlet提供控件以操纵其窗口状态或portlet模式.
单个portlet的多个实例可以放在同一页面上.
Portlet支持持久配置和自定义,配置文件信息.
Portlet可以有两种类型的请求即.呈现请求和操作请求.
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而无需重新启动服务器,这在servlet的情况下是不可能的,而不使用OSGi等特殊库来模块化应用程序.
编辑 (来自评论)
Portlet容器构建在Servlet容器上.所以最终可以说portlet在Servlet容器上运行.但是在开发应用程序时,我们与Servlet/Java EE容器分开查看portlet容器.
top*_*hef 64
Portlet是JSR-168标准的一部分,用于管理门户容器和组件.这是与Web容器(和servlet)标准不同的标准.虽然这两个标准之间肯定有很强的相似之处,但它们在容器,API,生命周期,配置,部署等方面存在差异.
portlet与servlet之间的主要区别在于,虽然servlet总是响应单一类型的操作 - 请求,portlet(由于其生命周期的性质和更强的容器绑定)必须响应两种类型的操作:呈现和请求.当然还有更多内容,但我发现这是我研究门户开发时两者之间的核心差异.
portlet和servlet都接收一个http请求并返回一个响应,这通常是一些可以由浏览器呈现的HTML.在"门户"的上下文中使用portlet,其想法是用户看到的单个页面具有许多部分,想想瓦片,每个瓦片来自不同的portlet.
现在,您可以从普通服务器获得"平铺"效果(请参阅Struts + Tiles以获取示例)来自portlet的额外位是portlet在Portal提供的更丰富的环境中,提供额外的API以便任何portlet显示的内容都可以由各个用户配置为他们的首选项,并且这些porlet可以相互通信 - 按下一个按钮,一个按钮发生在另一个按钮中.