portlet和servlet有什么区别?

Raj*_*esh 96 java portlet servlets java-ee

我被要求处理portlet和门户.

我想知道portlet和servlet之间的区别?

portlet与servlet的不同之处(可能在功能上)在哪里?

Ash*_*lix 132

从Source增强: Servlets与Portlet

相似

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

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

  3. Portlet和Servlet都可以生成静态和动态内容.

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

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

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

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

  8. Servlet和Portlet都使用类似的服务器/ VM环境来支持它.尽管如此,在portlet使其打勾的情况下可能还需要一些其他配置
  9. 构建/ DI工具两者都相似 - 都支持Ant,Maven,Gradle等.大多数:) - 这与Liferay 7有所改变.

不同点

  1. Servlet可以呈现完整的Web页面,而Portlet呈现html片段.门户将这些片段聚合到一个完整的网页中.

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

  3. 不允许Portlet生成包含标签(例如正文,框架,框架集,头部,html或标题)的HTML代码.

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

  5. 可以为Portlet提供控件以操纵其窗口状态或portlet模式.

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

  7. Portlet支持持久配置和自定义,配置文件信息.

  8. Portlet可以有两种类型的请求即.呈现请求和操作请求.

  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而无需重新启动服务器,这在servlet的情况下是不可能的,而不使用OSGi等特殊库来模块化应用程序.


编辑 (来自评论)

Portlet容器构建在Servlet容器上.所以最终可以说portlet在Servlet容器上运行.但是在开发应用程序时,我们与Servlet/Java EE容器分开查看portlet容器.

  • 想到这一点最简单的方法是,servlet呈现整个网页,并且portlet呈现网页的特定矩形部分(子部分).例如,新闻页面右侧的广告栏可以呈现为portlet.但是你不会将单个编辑字段实现为portlet,因为它太精细了.基本上,如果您将网页分解为主要的截面区域,那么这些网页很适合制作portlet. (4认同)
  • Portlet容器构建在Servlet容器上.您可以说Portlet容器是一个具有许多"功能"的高级Servlet容器.但是直截了当地回答你的问题,是的.在开发应用程序时,我们与Servlet/JEE容器分开查看portlet容器. (2认同)

top*_*hef 64

Portlet是JSR-168标准的一部分,用于管理门户容器和组件.这是与Web容器(和servlet)标准不同的标准.虽然这两个标准之间肯定有很强的相似之处,但它们在容器,API,生命周期,配置,部署等方面存在差异.

portlet与servlet之间的主要区别在于,虽然servlet总是响应单一类型的操作 - 请求,portlet(由于其生命周期的性质和更强的容器绑定)必须响应两种类型的操作:呈现请求.当然还有更多内容,但我发现这是我研究门户开发时两者之间的核心差异.

  • 更新:Portlet 1 是 [JSR 168](https://www.jcp.org/en/jsr/detail?id=168),Portlet 2 是 [JSR 286](https://www.jcp.org/en) /jsr/detail?id=286),Portlet 3 是 [JSR 362](https://www.jcp.org/en/jsr/detail?id=362)。 (2认同)

djn*_*jna 8

portlet和servlet都接收一个http请求并返回一个响应,这通常是一些可以由浏览器呈现的HTML.在"门户"的上下文中使用portlet,其想法是用户看到的单个页面具有许多部分,想想瓦片,每个瓦片来自不同的portlet.

现在,您可以从普通服务器获得"平铺"效果(请参阅Struts + Tiles以获取示例)来自portlet的额外位是portlet在Portal提供的更丰富的环境中,提供额外的API以便任何portlet显示的内容都可以由各个用户配置为他们的首选项,并且这些porlet可以相互通信 - 按下一个按钮,一个按钮发生在另一个按钮中.


wha*_*ick 6

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