Servlet规范中是这样定义的:
A servlet is a Java technology based web component, managed by a container, that generates dynamic content. Like other Java-based components, servlets are platform independent Java classes that are compiled to platform neutral bytecode that can be loaded dynamically into and run by a Java enabled web server. Containers, sometimes called servlet engines, are web server extensions that provide servlet functionality. Servlets interact with web clients via a request/response paradigm implemented by the servlet container. |
Servetl是居于java技术的web组件,被servlet容器管理,生成动态内容。Servlet通过servlet容器与web客户端展开request、response交互。
其实很难说出Portlet与servelt之间的关系,从某个层面说portlet与servlet之间没有任何关系,但是从另一个层面来说又有个千丝万缕的关系,就像马和牛一样,所以这里只是做一些技术上的比较
Portlets与 servlets的相同点:
• 都是基于java技术的web 组件
• 都被专门的容器管理
• 都生成动态内容
• 生命周期都被容器管理
• 都是与web客户端通过request/response的方式交互
Portlets与 servlets的不同点:
• portlet只生成内容片断,portal来负责把这些片断聚集在一个页面中。
• portlet不能直接映射成一个url
• Web 客户端同portlet交互需要通过portal system
• Portlets 有多种request, action requests 和 render requests
• Portlets 定义了 portlet modes and window states
• Portlets可以离开多次在portal 页面
Portlet提供的附加功能但是servlet没有提供
• Portlets 可以持久化存储和访问数据
• Portlets可以访问用户的信息
• Portlets 具有url重写功能,可以让portal来生成访问portlet的链接和action。
• Portlets 可以在session的两个范围中存储数据,application-wide scope 和 the portlet private scope.
• Portlet可以互相接受、发送事件
Portlets 不具备的servlet提供的功能
• 在response中设置字符编码
• 直接通过url访问
Jsr286中新提供的serveResource具有完全的response控制。
就是由于上述的不同,才定义了这个新的web组件规范。Portlet重用了很多servlet中基础的、重要的概念,比如部署方式、类加载、生命周期管理、session管理、request分发。在同一个portlet 应用中的portlet、servlet、jsp共享类加载、应用上下文、session。
Portlet与servlet/jsp中的桥梁
Portlet可以利用servlet、jsp生成内容,一个portlet可以使用request分发调用servlet、jsp,就像一个servlet可以调用servlet、jsp。当一个servlet被portlet调用,servlet的request基于portlet的request,servlet的response基于portlet的response。比如:
• 在portlet中request设置的属性,servlet可以获得。
• Portlet、servlet、jsp共享一个输出流。
• 使在portlet中session设置的属性,servlet可以获得。
用servlet生命周期事件
Portlet中的PortletContext 、PortletSession与servlet中的SevletContext、HttpSession是有关联关系的,所有这对servlet生命周期的listener同样对portlet有效
Servlet容器与portlet容器之间的关系
Portlet的容器是servlet容器的扩展,根据中间件厂商的实现方式portlet容器可以单独实现也可以基于servlet扩展。