PLT.3
我们先看一下Servlet v2.3规范中对Servlet的定义:
“Servlet是基于Java技术的Web组件。容器(Container)对servlet进行管理,并生成动态内容。像其它基于Java的组件一样,Servlets是平台独立性的Java类,被编译成与平台无关的二进制文件,最后被适用Java的Web服务器动态载入并运行。容器,有时也被称作Servlet引擎,是属于能够提供servlet功能的Web服务器的扩展。Servlet通过由Servlet容器实现的request/response实现类来与Web客户端进行交互。”
根据以上定义,我们可以知道Portlet与Servlet具有以下相同特点:
同时,我们也可以知道Portlet具有以下与Servlet不同的特点:
Portlet还可以访问以下servlet所不能访问的功能:
同时,以下是Servlet可以但Portlet却不能访问的功能:
由于这些不同,专家组决定将Portlet视为一个新的组件。因此,Portlet不是Servlet。 这样就允许为Portlet定义清晰的接口和行为。
为了尽可能地重用servlet的基础架构,本Portlet标准文档尽一切可能地采纳Servlet标准文档中的内容。这包括部署、类的载入、Web应用、Web应用生命周期的管理、会话管理和请求分发。许多概念和Portlet API的部分都是根据Servlet API构建的。
将Portlet、Servlet和JSPs组合到一个扩展的Web应用中,被称为Portlet应用。在同一个Portlet应用中,Portlet、Servlet和JSPs共享载类器、应用上下文和会话。
PTL3.1 在Portlet中使用Servlet/JSPs
Portlet可以使用Servlet、JSPs或JSP标签库来生成内容。
如同Servlet可以利用请求派发器(见PLT.16派发请求到Servlet和JSPs)调用其它Servlet和JSPs,Portlet可以调用Servlet和JSPs。为了实现Portlet与Servlet的无缝整合,Portlet规范吸纳了许多Servlet对象。
在从Portlet内调用Servlet或JSP时,发给Servlet或JSP的Servlet request是基于Portlet request,而返给Servlet或JSP的Servlet response是基于Portlet response。
PTL3.2 Servlet容器与Portlet容器的关系
Portlet容器是Servlet容器的扩展。也就是说,Portlet容器可以建在Servlet容器之上或它可以实现Servlet容器的所有功能。不管Portlet容器是怎么实现的,它的运行环境应该支持Servlet规范2.3。