开发一个Portlet

下面这部分将介绍如何进行简单的Portlet开发。首先创建一个标准的Java项目,然后创建一个portlet.xml文件,在这个文件中定义哪些Portlet对哪些容器有效,以及在实例化时需要使用哪些类,但这个文件并没有定义如何注册和识别Portlet。

图4显示了一个示例Portlet项目的目录结构。

图 4 Portlet项目结构示例

下面的portlet.xml定义了一个Portlet:<?xmlversion ="1.0"encoding="UTF-8"?>

"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation=

"http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd"

version="1.0">

QuickSearch

org.springframework.web.portlet.DispatcherPortlet

contextConfigLocation

/WEB-INF/context/portlet/QuickSearchDefinition.xml

text/html

view

Quick Search

从上面的内容可以看出portlet.xml指定contextConfigLocation为Spring类的初始化参数。

列表1显示了完整的contextConfigLocation文件的内容。<?xmlversion ="1.0"encoding="UTF-8"?>

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:aop="http://www.springframework.org/schema/aop"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.0.xsd

http://www.springframework.org/schema/aop

http://www.springframework.org/schema/aop/spring-aop-2.0.xsd

class="com.portlet.controller.QuickSearchController"

parent="basePageController">

true

value="com.portlet.command.commandObject"/>

quick.search

quick.search

true

org.springframework.web.portlet.handler.

PortletModeParameterHandlerMapping">

"org.springframework.web.portlet.handler.PortletModeHandlerMapping">

接下来就是编写Java代码实现控制器,视图和Portlet处理程序了。视图是一个JSP页面,控制器和Portlet处理程序是Java类。在控制器和处理程序的帮助下,从不同数据源提取数据,如Web Service,数据库或feed等,你可以通过命令模式将这些数据传给视图,运输工具使用commandObject。下面的代码展示了如何使用Portlet API获取数据并返回给视图层。@Override

protectedModelAndView handleRenderRequestInternal(

RenderRequest request, RenderResponse response)throwsException

{

logger.info ("Inside Controller handleRenderRequestInternal");

Map model =new

HashMap();

CommandObject commandObject =

(CommandObject)request.getPortletSession().getAttribute(

CommandObject.COMMAND_NAME,PortletSession.APPLICATION_SCOPE);

if(commandObject ==null){

commandObject =newCommandObject();

}

// logic to get the data and put it in the commandObject

// should be here...

String view = getFormView();

model.put("commandObject", commandObject);

ModelAndView mav =newModelAndView(view, model);

returnmav;

}

@Override

publicvoidonSubmitAction (finalActionRequest request,

finalActionResponse response,finalObject command,

finalBindException bindException)throwsException

{

logger.info ("Inside onSubmitAction");

// Set the form bean into session so that it will be available

CommandObject commandObject = (CommandObject)command;

logger.info("Command Object :"+ToStringBuilder.reflectionToString(

commandObject));

request.getPortletSession ().setAttribute ("command_obj",

command,PortletSession.APPLICATION_SCOPE);

}

在JSP文件中,你可以象下面这样检索数据:

method="post"commandName="commandObject">

var="listItem"varStatus="loop">

注意这个Portlet并没有指出它在屏幕上的布局,是否可以调整大小,宽度和高度应该保持多少为佳,这些属性都由Portlet容器来进行控制的。

为了让Portlet可以真正运行,你还需要编译并部署它。在编译时,创建一个标准的Java war文件(一般使用Ant或Maven创建),部署时将war文件放到托管Portlet容器的应用服务器上。当Portlet配置好,且在Portlet容器中注册后,就要借助portlet.xml文件查找哪些容器中可以使用哪些Portlet了。例如,在Vignette Portal中,你可以通过搜索找到需要的Portlet,然后将其添加到门户中,如图5和图6所示。

图 5 在Vignette中添加一个Portlet

图 6 在Vignette中搜索Portlet

添加Portlet到Portlet容器后,你还可以设置它们的位置、布局和属性,例如,你可以设置默认的宽度和位置,以及是否可以最小化和移动位置等。

图7显示了Vignette示例页面有三个Portlet,当用户登录到门户后默认就看到这三个Portlet。

图 7 在Vignette调整Portlet布局

图8显示了eXo JBoss Portlet容器默认的布局,当然你也可以在此基础上重新调整,以符合你特殊需要。

图 8  eXo JBoss 中可选的Portlet容器默认布局

通过Portlet容器可以很容易地改变整个网站的外观,风格,只需要改变Portlet的布局、皮肤或UI主题即可。

小结

本文介绍了门户和Portlet的入门基础知识,并提供了一个简单的实例,对如何创建和部署Portlet做了简要说明。目前既有开源的也有商业化的门户产品,不管采用哪种产品,基于门户的开发将使程序员的重心转移到业务逻辑上。门户技术还处于不断发展中,未来几年有可能出现新的门户技术,如果你正从事企业级开发,那么从现在开始关注门户技术吧!

原文:An Introduction to Java Enterprise Portals and Portlet Development

作者:Vlad Kofman

【责任编辑:杨赛 TEL:(010)68476606】

portlet java_探秘企业门户开发:Java Portlet入门(2)相关推荐

  1. portlet java_比较 JSR 168 Java Portlet 规范与 IBM Portlet API

    本文详细说明了 Java TMJava TMStandardization Request for the Java Portlet 规范(以下称为 JSR 168)和 IBM WebSphere P ...

  2. java gui介绍_IntelliJ IDE 开发Java GUI 入门

    原标题:IntelliJ IDE 开发Java GUI 入门 j主要对java 的GUI相关知识进行简单的介绍和总结,整个博客按照创建一个java GUI的顺序进行介绍,期间穿插讲解用到的java S ...

  3. editplus 格式java_用Editplus开发Java

    ☆ 准备工作 ①,已安装好jdk,同时配置系统变量(3个,JAVA_HOME,PATH,CLASSPATH) ②,电脑已安装Editplus,并做好设置. ☆ Editplus配置java开发环境 对 ...

  4. idea前端可视化_IntelliJ IDE 开发Java GUI 入门

    本博客主要对java 的GUI相关知识进行简单的介绍和总结,整个博客按照创建一个java GUI的顺序进行介绍,期间穿插讲解用到的java Swing的布局.控件等相关知识.本博客所进行的讲解及工程的 ...

  5. portlet java_[Java] 使用 Spring 2 Portlet MVC 框架构建 Portlet 应用

    Spring 除了支持传统的基于 Servlet 的 Web 开发之外,也支持 JSR 168 Portlet 的开发.Spring Portlet MVC 框架尽可能多地继承了 Spring Ser ...

  6. java portlet,(Portal 开发读书笔记)Portlet和Servlet的异同

    Portlet和Servlet的相同点: (1)都是基于java技术的web组件 (2)都是被专门的容器管理 (3)都是生成动态内容 (4)生命周期都被容器管理 (5)都是与web客户端通过reque ...

  7. Java Portlet 工具:将 Java Web 应用程序转换为自适型 Portlet--page1

    Java Portlet 工具:将 Java Web 应用程序转换为自适型 Portlet 作者 Andrew Lorek 05/30/2006 译者: 墩子 摘要 这篇文章介绍了如何将工作于门户以外 ...

  8. 【技术文档】Jeecg-P3开发环境搭建入门(java插件开发框架)

    一.项目工程说明 jeecg-p3-web       | 启动主项目 jeecg-p3-biz-demo | 插件项目     注意:项目为maven工程,采用maven方式导入eclipse等ID ...

  9. Java极速入门系列:第一章Java概述、Java环境、IDEA开发工具

    Java极速入门-第一章Java概述.Java环境.IDEA开发工具 一.什么是Java 1.好的编程语言的特性 2.Java的特点 3.Java的运行机制 4.Java的三大体系 5.Java环境 ...

最新文章

  1. 人类吃屎用屎指南:用做肥料不如制咖啡、当展品、做炸弹
  2. 神经网络是存储了海量的信息还是将海量的关系映射存储在了一起(发挥了存储记忆功能),还是变成了看似是一个公式,实际是成千上万个规律的公式融合在一个式子中( 类似于正弦波的傅里叶分解成无限中频率的波的加和
  3. Linux 小知识翻译 - 「代理服务器」
  4. centos快速安装cacti
  5. Pycharm下载tensorflow问题
  6. java包命名规则名词_java中命名规范
  7. thetae_1在MATLAB中的意思,无刷直流电机在Matlab中的建模与仿真研究_荣军
  8. ElementUI 组件库 md-loader 的解析和优化
  9. 如果删除github上项目的文件
  10. 【华为出品】物联网全栈开发实战营第2期来啦!送海思开发板
  11. (转)对各种初始化函数的理解:OnInitDialog、InitInstance、InitApplication函数的理解...
  12. odbc数据库access丢失_有关使用access数据库,odbc中碰到的一些问题。
  13. Delphi编程(二)__Delphi安装
  14. 国科大学习资料--模式识别与机器学习(黄庆明)--2020期末考试题
  15. PC机(笔记本)安装Linux系统
  16. Spring IOC学习
  17. 0045-量化第十天:QMT-以DMA指标为例调用系统指标
  18. html5游戏 做广告联盟怎么样,几个比较好的国外广告联盟推荐
  19. 二维数组malloc申请空间以及初始化方式
  20. Maya角色UV展平技巧笔记

热门文章

  1. MPB:生态环境中心陈保冬组-基于高通量测序技术的丛枝菌根真菌多样性研究方法...
  2. 7天搞定图神经网络,实战助力新冠疫情防控!
  3. python使用列表推导式(list comprehension)和itertools生成浮点数列表
  4. R语言威尔考克森秩和统计分布函数Wilcoxon rank Sum Statistic Distribution(dwilcox, pwilcox, qwilcox rwilcox)实战
  5. R语言使用ggplot2包使用geom_violin函数绘制分组小提琴图(分组颜色配置、位置配置)实战
  6. R语言sys方法:sys.getpid函数获取R会话的进程ID、sys.glob函数和file.path函数匹配文件夹下的所有特定类型文件、sys.info函数获取系统和用户信息
  7. R语言NaN函数实战(计数、替换、删除)
  8. 特征重要度(feature importance)如何获取、排序、可视化、以及可视化阈值设置?
  9. 在linux批量删除多级目录下同一格式的文件
  10. (邓爱萍)类对象-this关键字