我被要求处理portlet和门户。
我想知道portlet和servlet之间的区别吗?
portlet与servlet的不同之处(可能在功能上)在哪里?
答案 0 :(得分:129)
从源增强 :Servlets Vs Portlets
相似之处
Servlet和Portlet是使用Java的基于Web的组件 他们的实施。
Portlet由portlet容器管理,就像servlet一样 由servlet容器管理。
静态和动态内容都可以由Portlet生成 的servlet。
- 控制
portlet和servlet的生命周期由容器
客户端/服务器模型用于servlet和portlet
包装和部署基本相同,WAR / EAR。
应用程序会话存在于Servlet和Portlet容器中。它是在portlet容器中从呈现阶段到动作阶段(或任何较低阶段)共享数据(粗略的Portlet间通信)的方式之一。
- Servlet和Portlet都使用支持它的类似服务器/ VM环境。虽然,在portlet的情况下可能需要一些其他配置来打勾
- 构建/ DI工具两者都相似 - 都支持Ant,Maven,Gradle等。大部分:) - 这与Liferay 7有所改变。
醇>
不同点
Servlet可以呈现完整的网页,而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范围 通信。
Portlet不能设置响应的字符集编码也不行 它设置了HTTP响应头。
Portlet无权访问请求URL。所以它无法访问 查询参数附加到URL。 Portlet无法设置cookie。
Portlet API的典型方法是
doView()
,doEdit()
,doHelp()
和processAction()
而servlet的service()
,doPost()
,doGet()
。- 醇>
Portlet的部署涉及different approach而不是Servlet应用程序。一些提供程序(Liferay / Alfresco / WebSphere)支持热部署portlet而无需重新启动服务器,这在servlet的情况下是不可能的,而不使用OSGi等特殊库模块化应用程序。
修改 (来自评论)
Portlet容器构建在Servlet容器上。所以最终可以说portlet在Servlet容器上运行。但是在开发应用程序时,我们分别从Servlet / Java EE容器中查看portlet容器。
答案 1 :(得分:63)
Portlet是JSR-168标准的一部分,用于管理门户容器和组件。这是与Web容器(和servlet)标准不同的标准。虽然这两个标准之间肯定有很强的相似之处,但它们在容器,API,生命周期,配置,部署等方面存在差异。
portlet与servlet之间的主要区别在于,虽然servlet总是响应单一类型的操作 - 请求,但portlet(由于其生命周期的性质和更强的容器绑定)必须响应有两种类型的操作:呈现和请求。当然还有更多内容,但我在研究门户开发时发现这是两者之间的核心差异。
答案 2 :(得分:8)
portlet和servlet都会收到一个http请求并返回一个响应,这通常是一些可以由浏览器呈现的HTML。在“门户”的上下文中使用portlet,其想法是用户看到的单个页面有很多部分,想想瓦片,每个瓦片来自不同的portlet。
现在,您可以从普通服务器获得“平铺”效果(请参阅Struts + Tiles以获取示例)来自portlet的额外位是Portlet在Portal提供的更丰富的环境中,额外的API是提供,以便任何portlet显示的内容可以由个人用户配置为他们的首选项,并且porlet可以相互通信 - 按一个按钮,一个按钮发生在另一个。
答案 3 :(得分:6)
Servlet有一个java定义(处理HTTP GET / POST请求的应用程序),而portlet有一个用户界面定义。一个组件执行类似于windows vista小部件的特定功能或者这里的stackoverflow中使用的很多组件。它们不一定需要服务器端的servlet支持。但Portlet标准是与java一起开发的。 O'Reilly有一个很好的tutorial。
答案 4 :(得分:4)
本质上,Servlet提供的内容通常占用浏览器中的整个页面(除非您使用的是框架),并且portlet提供由窗口包装的内容。使用portlet,您可以将多个portlet彼此并排放置,每个portlet可以提供与另一个不同的内容和功能。 portlet可以为一种类型的应用程序提供完整的交互,而另一种portlet可以为另一种类型的应用程序提供内容。门户网站可以提供一些内务管理功能,并保护页面上所有portlet的单一入口点。至于他们之间的细节(相似/不同),请继续阅读。以下是一些相似之处:Servlet和Portlet是基于Web的组件,它们利用Java实现Portlet由类似于servlet容器的portlet容器管理这两个组件都生成内容,这些内容可以是静态的或动态的