开发一个Portlet一般有以下步骤:
- 设置用于开发Portlet应用程序的环境
- 创建Portlet应用程序
- 编译Portlet应用程序
- 定制portlet.xml
- 部署Portlet应用程序
- 调试Portlet应用程序
在门户化Web企业应用时,应用中的EJB模块将作为后台应用保留。我们一般不需要对其进行修改。通常只需要将原有的Web模块改造成Portal应用。
2.1 将Servlet改造成为Portlet
将Servlet改造成为Portlet一般需要以下几个步骤:
- 更改Servlet的定义,使他们继承Portlet或其子类。Portlet不直接扩展HTTPServlet,他们扩展Portlet(扩展自HTTPServlet)或Portlet的子类,如PortletAdapter。
- 修改Init()方法。由于Portlet继承Portlet或其子类,因此需要调用相应的init()方法。
- 把doGet、doPost等方法改造为适当的mode方法。doGet、doPost等方法在Portlet中将不会直接用到,替代它们的将是适当的mode方法,如doView、doEdit、doConfigure、doHelp等,但至少要为Portlet定义doView方法。
2.2 修改JSP
- 删除所有页一级的标签,如, ,, 等。在Portal中,每个Portlet只提供部分标记,再由Portlet框架组装成一个完整的页面。Portal将把JSP输出植入到其他代码片断中,所以你需要确认标记是完整的,JSP不包含开放的标签,并只包含有效的HTML, WML, 或cHTML。
- 在命名空间中对命名的元素(如窗体、全局变量、Java脚本function名字)进行编码。在Portal中,每一个Portlet在自己唯一的命名空间中运行。对元素编码可以避免同其他页里的元素或同一页里其他Portlet冲突(例如在一个页中有两个Portlet,他们具有相同的窗体名称,将出现命名冲突。对两个窗体编码,Portal将能能够区分这两个窗体)。
2.3 添加Portlet部署描述符
除了Servlet部署描述符(web.xml)之外,Portlet必须提供一个Portlet部署描述符(portlet.xml)来定义Portlet在Portal Server中的功能。这些信息包括特定的Portlet或Portlet 应用的配置参数以及所有Portlet的通用信息,如Portlet支持的标记语言的种类等。Portal Server 使用这些信息来为Portlet提供服务。
2.4 添加EJB客户端存根
为了使portlet能够使用Web应用的EJB,我们需要把EJB客户端存根Jar加到portlet应用的lib目录。