在JAVA的天下里,门户有对应的规范,即Portlet规范,此规范紧张有JSR168、JSR286和JSR362三个版本。
portlet规范定义了portla系统的三个紧张构件:Portal、Portlet、Portlet Container。
Portal是一个基于web的运用,它供应个性化、认证(单点登录)、聚合不同来源的内容,驻留信息系统的展现层。

Portlet是一个供应内容片段的运用,内容片段被作为portal页面的一部分。portlet由portlet容器管理,portlet容器处理要求,天生动态内容。
Portlet容器运行portlet,为portlet供应运行时必须的环境。portlet容器管理所含有的portlet的生命周期,同时供应portlet偏好设置的持久化。portlet容器吸收portal的要求,并交给portlet处理。
portlet和servlet类似,都是基于web的组件,都由容器管理(包括生命周期),都能动态产生内容,都是与web客户端通过request/response交互。
而portlet和servlet的差异在于,portlet不产生完全的HTML内容,只产生标记片段,由portal聚合组装这些片段,才能产生完全的HTML内容。其余,portlet不能直接对应到要求的URL,与web客户真个交互也是需经由portal系统。
portlet定义了更多的要求类型,预定义了portlet模式和窗口状态,且portlet可以在一个页面涌现多次。
一个portal页面由多个portlet窗口组成,相同的portlet窗口可以涌现多次。portlet窗口内容不是完全的HTML,而只是HTML片段。如下图:
Portlet1.0紧张定义了Portlet接口(和GenericPortlet抽象类)、Portlet高下文(PortletContext)、Portlet配置(PortletConfig)、Portlet偏好设置(PortletPreferences、PreferencesValidator)、Portlet要求/相应(PortletRequest/PortletResponse、ActionRequest/ActionResponse、RenderRequest/RenderResponse)、Portlet会话(PortletSesion)等。
Portlet2.0在Portlet1.0版本的根本上,引入了几个新特性,一个是许可portlet之间利用事宜来交互(EventPortlet、EventRequest/EventResponse),portlet发送/吸收事宜名称可在portlet.xml定义。另一个是引入了公共渲染参数,portlet之间可以共享此变量,须要共享的变量要在portlet.xml定义。再一个是为ajax要求新增的接口(ResourceServingPortlet、ResourceRequest/ResourceResponse)。末了一个是添加了与Servlet规范里Filter类似的PortletFilter,来预处理要乞降后处理相应。
根据Portlet2.0版本定义的几个阶段,分别定义了对应的过滤器(ActionFilter、EventFilter、RenderFilter、ResourceFilter)。阶段图如下:
Portlet3.0在Portlet2.0版本的根本上,支持客户端ajax要求在portlet异步处理。在这个版本,可以不再利用xml配置,而是利用java表明来配置,同时也支持容器注入依赖。
Apache Pluto是portlet的一个参考实现,它同时支持Portlet的JSR168、JSR286和JSR362三个规范。
Pluto供应了一个portal,它是一个web运用,可以支配在Tomcat等servlet容器。
Pluto供应的portlet container,实在质是将portlet包装成servlet,开拓者的portlet以war包形式支配在和portal相同的容器下,由于portal运用启用了跨高下文,可以将要求转发到portlet所在运用。
Pluto架构图如下:
Jetspeed是Apache开源的另一个portal项目,它支持单点登录、措辞切换,并且能将偏好设置保存到数据库而不是仅存放在内存。大致事理和Pluto相同。
商业的portal容器和技能支持有IBM的WebSphere等。