﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-扁担领地-文章分类-portal</title><link>http://www.blogjava.net/weiyc-16000/category/27515.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 04 Jan 2008 05:57:32 GMT</lastBuildDate><pubDate>Fri, 04 Jan 2008 05:57:32 GMT</pubDate><ttl>60</ttl><item><title>Liferay Portal 开发环境配置说明文档（中国科学院研究生院网络中心）--有删改  </title><link>http://www.blogjava.net/weiyc-16000/articles/172727.html</link><dc:creator>IT扁担</dc:creator><author>IT扁担</author><pubDate>Fri, 04 Jan 2008 05:43:00 GMT</pubDate><guid>http://www.blogjava.net/weiyc-16000/articles/172727.html</guid><wfw:comment>http://www.blogjava.net/weiyc-16000/comments/172727.html</wfw:comment><comments>http://www.blogjava.net/weiyc-16000/articles/172727.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiyc-16000/comments/commentRss/172727.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiyc-16000/services/trackbacks/172727.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 1.&#8194; 文档说明本文基于Tomcat开发Portlet的部分根据LifeRay官方的Quick Start文档中&#8220;Writing a simple JSP Portlet&#8221;章节的内容试验精简而成，依据的文档版本是RC1，日期2006-06-15。对Liferay自身代码的编译、调试环境则参考了原Liferay 3.6.1版本官方文档的&#8220;User ...&nbsp;&nbsp;<a href='http://www.blogjava.net/weiyc-16000/articles/172727.html'>阅读全文</a><img src ="http://www.blogjava.net/weiyc-16000/aggbug/172727.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiyc-16000/" target="_blank">IT扁担</a> 2008-01-04 13:43 <a href="http://www.blogjava.net/weiyc-16000/articles/172727.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>liferay4.2.2开发环境安装</title><link>http://www.blogjava.net/weiyc-16000/articles/171593.html</link><dc:creator>IT扁担</dc:creator><author>IT扁担</author><pubDate>Sat, 29 Dec 2007 09:26:00 GMT</pubDate><guid>http://www.blogjava.net/weiyc-16000/articles/171593.html</guid><wfw:comment>http://www.blogjava.net/weiyc-16000/comments/171593.html</wfw:comment><comments>http://www.blogjava.net/weiyc-16000/articles/171593.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiyc-16000/comments/commentRss/171593.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiyc-16000/services/trackbacks/171593.html</trackback:ping><description><![CDATA[下载并安装 JDK1.5<br />
<br />
1、&nbsp; 下载并安装 Windows Platform J2SE(TM) Development Kit 5.0 Update ，下载网址 http://java.sun.com/j2se/1.5.0/download.jsp<br />
<br />
2、&nbsp; 在控制面板 --&gt; 系统 --&gt; 高级选项 --&gt; 环境变量，新增一个用户变量 JAVA_HOME 并指向 JDK 的安装目录<br />
<br />
3、 设置path变量,增加下面信息%JAVA_HOME%\bin<br />
2）&nbsp;&nbsp; 下载并安装 Liferay Portal<br />
<br />
1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下载并安装liferay-portal-tomcat-jdk5-4.2.2.zip, 下载网址 http://sourceforge.net/project/showfiles.php?group_id=49260&amp;package_id=42607<br />
<br />
2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 解压缩到一个目录，并确保硬盘上有足够的空间，我们称这个目录为 TOMCAT_HOME，如果你的系统有设置catalina_home的话，请将catalina_home指向此目录。<br />
3）&nbsp;&nbsp; 启动 TOMCAT<br />
<br />
到 TOMCAT/bin 目录下，运行 startup.bat 。<br />
<br />
你的 Apache Tomcat server 能够编译并运行 Liferay Portal 。默认情况下， portal 使用自带的 HSQL 数据库。在浏览器中输入 http://localhost:8080 ，将会看见 portal 首页。<br />
二、&nbsp; 开发环境配置<br />
1）&nbsp;&nbsp; 下载并安装 JDK1.5<br />
<br />
1、&nbsp; 下载并安装 Windows Platform J2SE(TM) Development Kit 5.0 Update ，下载网址 http://java.sun.com/j2se/1.5.0/download.jsp<br />
<br />
2、&nbsp; 在控制面板 --&gt; 系统 --&gt; 高级选项 --&gt; 环境变量，新增一个用户变量 JAVA_HOME 并指向 JDK 的安装目录<br />
2）&nbsp;&nbsp; 下载并安装 TOMCAT<br />
<br />
1、&nbsp; 下载 apache-tomcat-5.5.17.zip 并解压缩到一个目录，设置CATALINA_HOME指向此目录。<br />
3）&nbsp;&nbsp; 下载并安装JIKES和ANT、Eclipse<br />
1、 下载IBM的开源java编译器jikes，解压到一个目录，并设置JIKES_HOME指向此目录（最好此目录名不要包含中文名和空格）。<br />
2、 下载ant1.6.5解压到一个目录，并设置ANT_HOME指向此目录。<br />
3、 设置path变量,增加下面信息%ANT_HOME%\bin;%JAVA_HOME%\bin;%JIKES_HOME%;<br />
4、 下载eclipse3.2（还可以用myeclipse可以免装tomcat插件），安装tomcat插件等。<br />
<br />
4） 下载并安装 Liferay Portal<br />
<br />
1、&nbsp; 下载 liferay-portal-src-4.2.2.zip和liferay-portal-tomcat-4.2.2.zip，下载网址http://sourceforge.net/project/showfiles.php?group_id=49260&amp;package_id=42607<br />
<br />
2、&nbsp; 解压liferay -portal-src-4.2.2.zip到一个目录portal,进入此目录，创建app.server.{机器名}.properties，如我创建了（app.server.MEISTER.properties），在里面指定之后要用的ext目录和应用服务器路径：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我在里面设置了：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lp.ext.dir=D:/Projects/javaProjects/ext<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 应用服务器路径（可以不用设置）：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; app.server.parent.dir=D:/Projects/javaProjects/ext/servers<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; app.server.tomcat.dir=${app.server.parent.dir}/tomcat&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用命令行进入到此目录执行<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ant start&nbsp;&nbsp; 然后执行 ant built-ext&nbsp; 这样子可以在你用 lp.ext.dir指定的目录里面创建ext扩展开发项目。<br />
<br />
3、启动myeclipse, File-&gt;import-&gt;exsiting project in workspaces－》选择portal目录，这样你就可以简单你的eclipse项目树中多了一个项目叫portal，这个是 liferay4.2.2的原始项目来的，包含所有源码。再用同样方法打开ext目录，这样就又多了个ext项目，这是用来开发扩展liferay的，我们在liferay上开发，一般都是在此进行的，而不是直接在portal这liferay的本身源码上来进行的。<br />
<br />
4、解压liferay-portal-tomcat-4.2.2.zip到ext目录下面的servers\tomcat里面，并吧eclipse里面的tomcat插件指向此目录，如果设置了CATALINA_HOME的也指向此目录，这样方便进行调试。<br />
<br />
5、liferay数据库链接配置，是通过对tomcat里面的conf\Catalina\localhost\ROOT.xml来配置的，若用liferay默认的数据库，我们就不需要对它进行修改。<br />
<br />
我用的是mysql数据库，把mysql数据库jdbc驱动放置在tomcat下的\common\lib，设置ROOT.xml：<font color="#808080"><font color="#ffffff"><span 153, 153);?></font></font><br />
<div 204, 204); padding: 5px 4px 4px; font-size: 13px; width: 98%; background-color: rgb(238, 238, 238);?><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /> <span 0, 0);?>&lt;</span>Context path="" docBase="/" debug="0" reloadable="true" crossContext="true"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <resource><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="jdbc/LiferayPool"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth="Container"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.sql.DataSource"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; driverClassName="com.mysql.jdbc.Driver"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; url="jdbc:mysql://localhost:3306/lportal"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; username="root"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; password="password"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; maxActive="20"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <resource><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name="mail/MailSession "<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; auth="Container"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="javax.mail.Session"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mail.transport.protocol="smtp"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mail.smtp.host="localhost"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <realm><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; className="org.apache.catalina.realm.JAASRealm"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; appName="PortalRealm"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; userClassNames="com.liferay.portal.security.jaas.PortalPrincipal"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; roleClassNames="com.liferay.portal.security.jaas.PortalRole"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; debug="99"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; useContextClassLoader="false"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /&gt;<br />
</context><span 0, 0);?><img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /> <br />
<img alt="" src="http://www.blogjava.net/Images/OutliningIndicators/None.gif" align="top" /> </span></div>
6、配置好后，启动数据库（mysql），用工具执行ext项目里面\sql\create\下面的mysql的创建脚本建立数据库lportal.<br />
7、在myeclipse里面启动tomcat，用http://localhost:8080/打开就可以看到liferay的首页了。<br />
8、你可以在ext项目里面创建自己的portlet了，只需要创建好后用ant执行deploy，就会自动加入到你设定的tomcat下，成为liferay的一部分了。<br />
<br />
嗯。大概就这些。<br />
网上还有其他的安装配置方案都挺好的，大家不懂的看看很有帮助。网址如下：<br />
http://www.blogjava.net/coldtear/archive/2006/08/03/61454.html<br />
http://www.360doc.com/showWeb/0/0/292145.aspx<br />
http://blog.csdn.net/axu20/archive/2007/07/24/1705292.aspx<br />
http://hi.baidu.com/suridea/blog/category/Liferay/index/1</span>
<img src ="http://www.blogjava.net/weiyc-16000/aggbug/171593.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiyc-16000/" target="_blank">IT扁担</a> 2007-12-29 17:26 <a href="http://www.blogjava.net/weiyc-16000/articles/171593.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jetspeed2的安装</title><link>http://www.blogjava.net/weiyc-16000/articles/168172.html</link><dc:creator>IT扁担</dc:creator><author>IT扁担</author><pubDate>Mon, 17 Dec 2007 03:02:00 GMT</pubDate><guid>http://www.blogjava.net/weiyc-16000/articles/168172.html</guid><wfw:comment>http://www.blogjava.net/weiyc-16000/comments/168172.html</wfw:comment><comments>http://www.blogjava.net/weiyc-16000/articles/168172.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiyc-16000/comments/commentRss/168172.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiyc-16000/services/trackbacks/168172.html</trackback:ping><description><![CDATA[安装步骤：<br />
前提：<br />
本身已安装JDK1.5并配置好环境变量；<br />
安装好MySql，默认用户名&#8220;root&#8221;，密码test,并建一个新的库&#8220;jetspeed&#8221;。<br />
下载相关文件：<br />
&nbsp;&nbsp;&nbsp;&nbsp; 需要文件1、ant编译工具<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、maven管理工具<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、jdk1.5.0_06以上版本<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、servlet引擎<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tomcat5.5.8以上<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 。。。。<br />
1、Jetspeed2.1的安装文件：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 官方网站提供下载：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jetspeed-2.1-installer.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jetspeed-2.1-demo-installer.jar<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第二个文件安装完以后自带tomcat5.5.20服务器，所以，就不用下载新的服务器了。<br />
2、下载&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据库方面，由于MySql比较方便占资源比较少，比较适合开发，所以选择自己安装链接MySql；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同时还需下载ant,当前稳定版本为：ant 1.7.0；再下来就是Maven，当前版本：maven 2.0.5。<br />
3、配置<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 首先配置ant。将apache-ant-1.7.0-bin解压到某个路径,假设为D:\apache-ant-1.7.0 。然后配置系统变量，有三处：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JAVA_HOME, 值为所安装JDK的文件夹路径，如本机的设置：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; JAVA_HOME = C:\Program Files\Java\jdk1.5.0_02<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ANT_HOME, 就是ant所在文件夹路径，如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ANT_HOME = D:\apache-ant-1.7.0<br />
&nbsp;&nbsp;&nbsp; 其次将maven-2.0.5-bin解压到某个路径,假设为D:\maven-2.0.5 。<br />
&nbsp;&nbsp;&nbsp; 再来配置系统变量：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PATH, 在此变量上添加ant的bin文件夹路径：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PATH = %PATH%;D:\apache-ant-1.7.0\bin;D:\maven-2.0.5\bin;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
4、测试<br />
在命令提示符下输入：<br />
C：\〉 ant<br />
输出 Buildfile:build.xml does not exist!<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Build failed<br />
表示配置成功！<br />
C: \〉mvn --version<br />
输出 Maven version： 2.0.5<br />
成功！<br />
5、完成上面两步后，可以正式开始安装Jetspeed了。<br />
&nbsp;&nbsp;&nbsp;&nbsp; 一般来说，jar文件默认是用rar打开的，所以，最方便的办法是进入命令行模式：<br />
d:\downloads\〉java -jar Jetspeed-2.1-demo-installer.jar进行安装。<br />
文档提示，安装文件不要放于带有汉字的路径下，否则ant将不能识别，安装就不能进行了。<br />
6、（选择安装自带derby数据库的跳过）成功启动安装后会提示输入数据库信息，根据自身的数据库以及JDBC版本与驱动填写:<br />
Database type： mysql<br />
Username: root<br />
Password: test<br />
JDBC connection string：jdbc:mysql://localhost:3306/jetspeed<br />
JDBC driver name ：com.mysql.jdbc.Driver<br />
The location of a valid JDBC driver<br />
JDBC驱动，我用的是mysql-connector-java-5.0.5<br />
上面是我本机的输入信息，其中jetspeed就是原来在mysql中创建的空数据库。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装成功后打开Jetspeed文件夹中的bin文件夹就能找到Tomcat的启动文件。双击startup.bat启动Tomcat，等候N秒，打开浏览器，输入： http://localhost:8080/jetspeed<br />
呵呵，出现portal界面了吧，经典的guess number等portlet都在上面，如果要编程的话，懒惰的方法就是在demo的基础上修改一把，就可以了^_^
<img src ="http://www.blogjava.net/weiyc-16000/aggbug/168172.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiyc-16000/" target="_blank">IT扁担</a> 2007-12-17 11:02 <a href="http://www.blogjava.net/weiyc-16000/articles/168172.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Liferay Portal 架构解析 </title><link>http://www.blogjava.net/weiyc-16000/articles/165083.html</link><dc:creator>IT扁担</dc:creator><author>IT扁担</author><pubDate>Tue, 04 Dec 2007 01:48:00 GMT</pubDate><guid>http://www.blogjava.net/weiyc-16000/articles/165083.html</guid><wfw:comment>http://www.blogjava.net/weiyc-16000/comments/165083.html</wfw:comment><comments>http://www.blogjava.net/weiyc-16000/articles/165083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiyc-16000/comments/commentRss/165083.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiyc-16000/services/trackbacks/165083.html</trackback:ping><description><![CDATA[<h2><a name="_Toc117571976"></a><a name="_Toc117571147"><span><span style="font-size: 12pt; line-height: 173%; font-family: 宋体; mso-bidi-font-size: 16.0pt">第一章<span lang="EN-US"><span>&nbsp; </span>Liferay Portal</span></span></span></a><span lang="EN-US"> <O:P></O:P></span></h2>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">作为一个开源</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>产品，</span><span lang="EN-US">Liferay Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>提供对多个独立系统的内容集成，帮助多个组织实现更有效的合作。与其他商业的</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>产品相比，</span><span lang="EN-US">Liferay Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>有着一系列的优良特性，而且不需要付费。</span></p>
<h3><a name="_Toc117571977"></a><a name="_Toc117571148"><span><span style="font-size: 10.5pt; line-height: 173%; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 16.0pt">第一节</span></span></a><span><span style="mso-bookmark: _Toc117571977"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>Portal</span></span></span><span><span style="mso-bookmark: _Toc117571977"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>规范</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">随着</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>的兴起，越来越多的公司开始涉足</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>产品开发，并组建各自的</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>组件和基于其的产品，比如</span><span lang="EN-US">IBM</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>、</span><span lang="EN-US">BEA</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>、</span><span lang="EN-US">MicroSoft</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>、</span><span lang="EN-US">SAP</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>、</span><span lang="EN-US">Apache</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>等。各个厂商的接口互不兼容，给软件开发商以及开发人员带来诸多不便。</span></p>
<h3><a name="_Toc117571978"></a><a name="_Toc117571149"></a><ST1:CHSDATE isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12"><span><span style="mso-bookmark: _Toc117571978"><span lang="EN-US">1.1.1</span></span></span></ST1:CHSDATE><span><span style="mso-bookmark: _Toc117571978"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>JSR168</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">为此，</span><span lang="EN-US">JCP</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>组织发布了</span><span lang="EN-US">JSR168(Java Specification Request)</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>，</span><span lang="EN-US">Portlet Specification V1.0</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>，用来提供不同的</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>和</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>之间的互通性。只要开发的</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>遵循</span><span lang="EN-US">JSR168</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>，则就可以在所有遵循</span><span lang="EN-US">JSR168</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>的</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>上部署运行。</span></p>
<p class="MsoNormal"><span lang="EN-US">JSR168</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>中定义了</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>的实现规范和接口，并对理想的</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>进行了详细的规划和描述。</span></p>
<h3><a name="_Toc117571979"></a><a name="_Toc117571150"></a><ST1:CHSDATE isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12"><span><span style="mso-bookmark: _Toc117571979"><span lang="EN-US">1.1.2</span></span></span></ST1:CHSDATE><span><span style="mso-bookmark: _Toc117571979"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>WSRP</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal"><span lang="EN-US">WSRP</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>是</span><span lang="EN-US">OASIS Web Service for Remote Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>的缩写。</span><span lang="EN-US">WSRP</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>是</span><span lang="EN-US">Web Service</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>的一种新的商业应用，一种新的标准，主要用来简化</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>对于各种资源或者程序整合的复杂度，可以避免编程带来的整合麻烦和问题。而且</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>管理员可以从海量的</span><span lang="EN-US">WSRP</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>服务中选择需要的功能用以整合到目前所用的</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>中。它有三种角色：</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-no-proof: yes">①</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>、生产者</span> <span lang="EN-US" ?Times mso-hansi-font-family: Roman?; New Times Wingdings? mso-symbol-font-family: symbol; mso-char-type:><span>&#224;</span></span><span lang="EN-US"> </span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>提供</span><span lang="EN-US">Portlet</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-no-proof: yes">②</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>、消费者</span> <span lang="EN-US" ?Times mso-hansi-font-family: Roman?; New Times Wingdings? mso-symbol-font-family: symbol; mso-char-type:><span>&#224;</span></span><span lang="EN-US"> </span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>使用</span><span lang="EN-US">Portlet</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-no-proof: yes">③</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>、终端用户</span> <span lang="EN-US" ?Times mso-hansi-font-family: Roman?; New Times Wingdings? mso-symbol-font-family: symbol; mso-char-type:><span>&#224;</span></span><span lang="EN-US"> </span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>最终用户</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">它的特点在于生产者将消费者所需要的信息通过</span><span lang="EN-US">WSRP</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>返回给消费者，这些信息是相对标记片断，例如</span><span lang="EN-US">HTML</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>、</span><span lang="EN-US">XHTML</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>等，可以直接嵌入用户的页面中，而不用像</span><span lang="EN-US">Web Service</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>一样开发用户端接口。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">实现这个规范，</span><span lang="EN-US">Portal</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>可以跟各式各样的数据源打交道，彻底终结信息孤岛的窘境。</span></p>
<h3><a name="_Toc117571980"></a><a name="_Toc117571151"><span><span style="font-size: 10.5pt; line-height: 173%; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 16.0pt">第二节</span></span></a><span><span style="mso-bookmark: _Toc117571980"><span> <span style="mso-spacerun: yes">&nbsp;</span></span></span></span><span><span style="mso-bookmark: _Toc117571980"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>什么是</span></span></span><span><span style="mso-bookmark: _Toc117571980"><span lang="EN-US">Portal</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体">Portal</span><span>是基于<span lang="EN-US">Web</span>的，以&#8220;应用整合<span lang="EN-US">&#8221;</span>和&#8220;消除信息孤岛<span lang="EN-US">&#8221;</span>为最终目的，提供单点登录、内容聚合、个性化门户定制等功能的综合信息系统。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">完整的<span lang="EN-US">Portal</span>通常由<span lang="EN-US">Portal</span>服务器、<span lang="EN-US">Portlet</span>容器、<span lang="EN-US">Portlet</span>构成。<span lang="EN-US"><O:P></O:P></span></span></p>
<h3><a name="_Toc117571981"></a><a name="_Toc117571152"></a><ST1:CHSDATE isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12"><span><span style="mso-bookmark: _Toc117571981"><span lang="EN-US">1.2.1<span style="mso-spacerun: yes">&nbsp; </span>P</span></span></span></ST1:CHSDATE><span><span style="mso-bookmark: _Toc117571981"><span lang="EN-US">ortal </span></span></span><span><span style="mso-bookmark: _Toc117571981"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>服务器</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体">Portal</span><span>服务器是容纳<span lang="EN-US">Portlet</span>容器，支持<span lang="EN-US">Portlet</span>呈现的普通或者特殊<span lang="EN-US">Web</span>服务器。<span lang="EN-US">Portal</span>服务器通常会提供个性化设置、单点登录、内容聚合、信息发布、权限管理等功能，支持各种信息数据来源，并将这些数据信息放在网页中组合而成，提供个性化的内容定制，不同权限的浏览者能够浏览不同的信息内容。通常，<span lang="EN-US">Portal</span>提供以下功能<span lang="EN-US">:<O:P></O:P></span></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">单点登录：</span><span lang="EN-US">Portal</span><span>通常采用<span lang="EN-US">ACL</span>、<span lang="EN-US">SSL</span>、<span lang="EN-US">LDAP</span>等业界标准的安全技术，提供对所有现有应用系统的安全集成，只需在<span lang="EN-US">Portal</span>的唯一入口上登录一次，就可以访问所有应用系统和数据。</span><span>对于安全性要求较高的应用系统，如电子商务平台、交易系统等，通过扩展接口传递用户身份信息，如数字证书信息、数字签名信息等，进行二次身份认证，保证单点登陆的安全性。</span><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">权限控制<span lang="EN-US">:</span></span><span>系统采用</span><span lang="EN-US">LDAP</span><span>对用户资源进行统一的管理，同时提供二次开发接口，可以与其他应用系统的用户管理模块对接，并能随相关业务系统实时更新访问权限。通过完善的授权机制及存取控制，用户访问权限控制到字段级别，确保用户只能访问具有权限的应用系统及相关信息。</span><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">内容管理<span lang="EN-US">:</span></span><span lang="EN-US"> </span><span>实现应用系统之间实时交换信息。采用多种缓存机制，保证内容交换的性能和准确性。采用基于<span lang="EN-US">XML</span>的<span lang="EN-US">Rich Site Summary (RSS)</span>标准，迅速在各应用系统之间传播最新变化。</span><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">信息发布<span lang="EN-US">:</span></span><span lang="EN-US"> </span><span>实现信息门户内容的动态维护。动态网站系统可与</span><span lang="EN-US">OA</span><span>协同办公系统、知识管理系统等集成，网站信息须经</span><span lang="EN-US">OA</span><span>系统的审批流程流转通过后或知识管理平台设置具有外部共享权限后</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>才</span><span>可正式发布，真正实现内外信息发布的同步。</span><span lang="EN-US"><O:P></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">文件管理<span lang="EN-US">:</span></span><span lang="EN-US"> </span><span>系统实现</span><span>无缝集成多种数据源，包括：数据库、文档（<span lang="EN-US">Office</span>文档、<span lang="EN-US">PDF</span>、<span lang="EN-US">AutoCAD</span>、甚至<span lang="EN-US">ZIP</span>文档）、<span lang="EN-US">Web</span>网页、<span lang="EN-US">FTP</span>站点等，并对数据按业务要求和职务特点加以分析整理，通过统一<span lang="EN-US">Web</span>界面主动推送<span lang="EN-US">(Push)</span>至用户的门户桌面，帮助用户做出及时、正确的决策。</span><span lang="EN-US"><O:P></O:P></span></p>
<h3><a name="_Toc117571982"></a><a name="_Toc117571153"></a><ST1:CHSDATE isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12"><span><span style="mso-bookmark: _Toc117571982"><span lang="EN-US">1.2.2 <span style="mso-spacerun: yes">&nbsp;</span>P</span></span></span></ST1:CHSDATE><span><span style="mso-bookmark: _Toc117571982"><span lang="EN-US">ortlet</span></span></span><span><span style="mso-bookmark: _Toc117571982"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体">Portlet</span><span>容器提供<span lang="EN-US">Portlet</span>执行的环境，包含很多<span lang="EN-US">Portlet</span>并管理它们的生命周期，保存<span lang="EN-US">Portlet</span>的定制信息。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><span style="font-family: 宋体">一个<span lang="EN-US">Portal</span>容器接收到来自<span lang="EN-US">Portal</span>的请求后，接着将这个请求传递给存在<span lang="EN-US">Portal</span>容器的<span lang="EN-US">Portlet </span>执行。<span lang="EN-US">Portlet</span>容器没有义务去组合<span lang="EN-US">Portlet </span>产生的信息內容，这个工作必须由<span lang="EN-US">Portal</span>来处理。<span lang="EN-US">Portal</span>和<span lang="EN-US"> Portal</span>容器可以放在一起视为同一个系统的组件，或者分开成为两个独立的组件。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体">Portlet</span><span>容器是普通<span lang="EN-US">Web Servlet</span>容器的扩展，所以一个<span lang="EN-US">Portlet</span>容器可以构建于一个已经存在的<span lang="EN-US">Servlet</span>容器或者可能实现全部<span lang="EN-US">Web Servlet</span>容器的全部功能。无论<span lang="EN-US">Portlet</span>容器怎么实现，它的运行环境总是假定它支持<span lang="EN-US">Servlet2.3</span>规范。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">通常，</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器扩展自普通的</span><span lang="EN-US">Servlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器。</span></p>
<span ?Times mso-hansi-font-family: Roman?; New Times Roman??>
<h3><a name="_Toc117571983"></a><a name="_Toc117571154"><span><span style="font-size: 10.5pt; line-height: 173%; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 16.0pt">第三节</span></span></a><span><span style="mso-bookmark: _Toc117571983"><span> <span style="mso-spacerun: yes">&nbsp;</span></span></span></span><span><span style="mso-bookmark: _Toc117571983"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>什么是</span></span></span><span><span style="mso-bookmark: _Toc117571983"><span lang="EN-US">Portlet</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体">Portlet</span><span>是<span lang="EN-US">Portal</span>中最重要的组件，负责在<span lang="EN-US">Portal</span>中呈现信息内容，有相应的生命周期。通过自定义<span lang="EN-US">Portlet</span>，用户很容易定义个性化的<span lang="EN-US">Portal</span>页面。<span lang="EN-US">Portlet</span>由<span lang="EN-US">Portlet</span>容器负责管理、处理请求并返回动态页面，可以作为<span lang="EN-US">Portal</span>的可即插即用的界面组件。<span lang="EN-US"><O:P></O:P></span></span></p>
<h3><a name="_Toc117571984"></a><a name="_Toc117571155"></a><ST1:CHSDATE isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12"><span><span style="mso-bookmark: _Toc117571984"><span lang="EN-US">1.3.1<span style="mso-spacerun: yes">&nbsp; </span>P</span></span></span></ST1:CHSDATE><span><span style="mso-bookmark: _Toc117571984"><span lang="EN-US">ortlet</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal" align="left"><span style="font-family: 宋体; mso-bidi-font-size: 9.0pt; mso-bidi-font-family: Arial">一个<span lang="EN-US">Portlet</span>是以<span lang="EN-US">Java</span>技术为技术的<span lang="EN-US">Web</span>组件，由<span lang="EN-US">Portlet</span>容器所管理，专门处理客户的信息请求以及产生各种动态的信息内容。<span lang="EN-US">Portlet </span>为可插式的客户界面组件，提供呈现层成为一个信息系统。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal" align="left"><span style="font-family: 宋体; mso-bidi-font-size: 9.0pt; mso-bidi-font-family: Arial">这些由<span lang="EN-US">Portlet</span>产生的内容也被称为片段，而片段是具有一些规则的标记<span lang="EN-US">( HTML</span>、<span lang="EN-US">XHTML</span>、<span lang="EN-US">WML )</span>，而且可以和其他的片段组合而成一个复杂的文件。一个或多个 <span lang="EN-US">Portlet </span>的内容聚合而成为一个 <span lang="EN-US">Portal </span>网页。而 <span lang="EN-US">Portlet </span>的生命周期是被 <span lang="EN-US">Portlet </span>容器所管理控制的。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal" align="left"><span style="font-family: 宋体; mso-bidi-font-size: 9.0pt; mso-bidi-font-family: Arial">客户端和<span lang="EN-US">Portlet</span>的互动是由<span lang="EN-US">Portal</span>通过典型的请求<span lang="EN-US">/</span>响应方式实现，正常来说，客户会和<span lang="EN-US">Portlet</span>所产生的内容互动，举例来说，根据下一步的连接或者是确认送出的表单，结果<span lang="EN-US"> Portal</span>将会接收到<span lang="EN-US">Portlet</span>的动作，将这个处理状况转向到目标<span lang="EN-US">Portlet</span>。这些<span lang="EN-US">Portlet </span>内容的产生可能会因为不同的使用者而有不同的变化，完全是根据客户对于这个<span lang="EN-US">Portlet</span>的设置。<span lang="EN-US"><O:P></O:P></span></span></p>
<h3><a name="_Toc117571985"></a><a name="_Toc117571156"></a><ST1:CHSDATE isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12"><ST1:CHSDATE isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12"><span><span style="mso-bookmark: _Toc117571985"><span lang="EN-US">1.3.2</span></span></span></ST1:CHSDATE><span><span style="mso-bookmark: _Toc117571985"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>P</span></span></span></ST1:CHSDATE><span><span style="mso-bookmark: _Toc117571985"><span lang="EN-US">ortlet</span></span></span><span><span style="mso-bookmark: _Toc117571985"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>与</span></span></span><span><span style="mso-bookmark: _Toc117571985"><span lang="EN-US">Servlet</span></span></span><span><span style="mso-bookmark: _Toc117571985"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>的关系</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 9.0pt">Portlet</span><span>被定义成为一个新的组件，具有新的明确的界面与行为。为了尽可能与现有的 <span lang="EN-US">Servlet </span>结合达到重复使用的目的，<span lang="EN-US">Portlet </span>的规范利用了 <span lang="EN-US">Servlet </span>的规范，许多观念都很相似的，结合 <span lang="EN-US">Portlet</span>、<span lang="EN-US">Servlet </span>及 <span lang="EN-US">Jsp </span>在同一个网站系统中，我们称为<span lang="EN-US">Portlet </span>应用 。在同一个 <span lang="EN-US">Portlet </span>应用 中，他们将分享同一个类加载器<span lang="EN-US">(ClassLoader)</span>，上下文<span lang="EN-US">(Context) </span>及 <span lang="EN-US">Session</span>。 <span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><strong><span>①</span></strong><strong><span>、<span lang="EN-US">Portlet </span>和<span lang="EN-US"> Servlet </span>的相似之处<span lang="EN-US"><O:P></O:P></span></span></strong></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 9.0pt">@ Portlet </span><span>也是<span lang="EN-US"> Java </span>技术的<span lang="EN-US"> web </span>组件<span lang="EN-US"><br />
@ Portlet </span>也是有特定的<span lang="EN-US"> container </span>在管理<span lang="EN-US"><br />
@ Portlet </span>可以动态产生各种内容<span lang="EN-US"><br />
@ Portlet </span>的生命周期由<span lang="EN-US"> container </span>所管理<span lang="EN-US"><br />
@ Portlet </span>和客户端的互动是通过<span lang="EN-US"> request/response </span>的机制 <span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><strong><span>②</span></strong><strong><span>、<span lang="EN-US">Portlet </span>和<span lang="EN-US"> Servlet </span>也有一些不同<span lang="EN-US"><O:P></O:P></span></span></strong></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 9.0pt">@ Portlet </span><span>只产生<span lang="EN-US"> markup </span>信息片段，不是完整的网页文件。而 <span lang="EN-US">Portal </span>会将所有的 <span lang="EN-US">Portlet markup </span>信息片段放到一个完整的<span lang="EN-US"> Portal </span>网页。<span lang="EN-US"><br />
@ Portlet </span>不会和<span lang="EN-US"> URL </span>有直接的关系<span lang="EN-US"><br />
@ </span>客户端必须通过<span lang="EN-US"> portal </span>系统才能和 <span lang="EN-US">Portlet </span>互动<span lang="EN-US"><br />
@ Portlet </span>有一些定义好的<span lang="EN-US"> request </span>处理，<span lang="EN-US">action request </span>以及<span lang="EN-US"> render request</span>。<span lang="EN-US"><br />
@ Portlet </span>默认定义 <span lang="EN-US">Portlet modes </span>及窗口状态可以指出在网页中该 <span lang="EN-US">Portlet </span>的哪个功能正在执行及现在的 状态。<span lang="EN-US"><br />
@ Portlet </span>可以在同一个<span lang="EN-US"> portal </span>网页之中存在多个。<span lang="EN-US"> <O:P></O:P></span></span></p>
<p class="MsoNormal"><strong><span>③</span></strong><strong><span>、<span lang="EN-US">Portlet </span>有一些附加的功能是<span lang="EN-US"> Servlet </span>所没有的<span lang="EN-US"><O:P></O:P></span></span></strong></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 9.0pt; mso-bidi-font-family: Arial">@ Portlet </span><span>能够存取及储存永久配置文件及定制资料。<span lang="EN-US"><br />
@ Portlet </span>可以存取使用者数据<span lang="EN-US"><br />
@ Portlet </span>具有<span lang="EN-US"> URL </span>的重写功能在文件中去动态建立连结，允许<span lang="EN-US"> portal server </span>不用去知道如何在网页的片 段之中建立连结及动作。<span lang="EN-US"><br />
@ Portlet </span>可以储存临时性的数据在 <span lang="EN-US">Portlet session </span>之中，拥有两个不同的范围：<span lang="EN-US"><br />
application-wide scope </span>及 <span lang="EN-US">Portlet private scope </span>。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><strong><span>④</span></strong><strong><span>、<span lang="EN-US">Portlet </span>不具有一些功能， 但是<span lang="EN-US"> Servlet </span>却有提供<span lang="EN-US"><O:P></O:P></span></span></strong></p>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体; mso-bidi-font-size: 9.0pt">@ Servlet </span><span>具有设置输出的文字编码<span lang="EN-US">( character set encoding)</span>方式<span lang="EN-US"><br />
@ Servlet</span>可以设置<span lang="EN-US"> HTTP </span>输出的<span lang="EN-US"> header<br />
@ Servlet</span>才能够接收客户对于<span lang="EN-US"> portal </span>发出的 <span lang="EN-US">URL </span>请求</span><strong><span lang="EN-US"><O:P></O:P></span></strong></p>
<h3><a name="_Toc117571986"></a><a name="_Toc117571157"></a><ST1:CHSDATE isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12"><span><span style="mso-bookmark: _Toc117571986"><span lang="EN-US">1.3.3<span style="mso-spacerun: yes">&nbsp; </span>P</span></span></span></ST1:CHSDATE><span><span style="mso-bookmark: _Toc117571986"><span lang="EN-US">ortlet</span></span></span><span><span style="mso-bookmark: _Toc117571986"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>的生命周期</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal" align="left"><span style="color: black; font-family: 宋体; mso-bidi-font-size: 9.0pt; mso-font-kerning: 0pt; mso-ansi-language: ZH-CN">一个</span><span lang="EN-US">Portlet</span><span>有着良好的生命周期管理</span><span>，</span><span>定义了怎样装载</span><span>，</span><span>实例化和初始化</span><span>，</span><span>怎样响应来自客户端的请求及怎样送出服务。这个</span><span lang="EN-US">Portlet</span><span>生命周期由</span><span lang="EN-US">Portlet</span><span>接口的</span><span lang="EN-US">init</span><span>，<span lang="EN-US">processAction</span>，<span lang="EN-US">render</span></span><span>和</span><span lang="EN-US">destroy</span><span>方法来表达。<O:P></O:P></span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">载入和实例化</span><span lang="EN-US">:Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器负责载入和实例化</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>。当</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器运行</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>应用或者延迟到</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>需要服务使用者的请求时，</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>就会被载入并实例化。载入</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>类后，</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>类随即被实例化。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">初始化</span><span lang="EN-US">:Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>类实例化后，</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器还需要初始化</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>。以调用</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>去响应客户端的请求。</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器呼叫</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>接口中的</span><span lang="EN-US">init</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>方法初始化</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>。扩展自</span><span lang="EN-US">PortletConfig</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>的类可以取出定义在部署描述文件中的初始化参数，以及</span><span lang="EN-US">Resource Bundle</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">初始化异常</span><span lang="EN-US">:</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>在</span> <span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>初始化期间，</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>可能会丟出</span><span lang="EN-US"> UnavailableException </span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>或</span> <span lang="EN-US">PortletException </span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>异常。此时，</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器不能把</span> <span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>置入已启动的服务，并且</span> <span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器必需释放这个</span> <span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>。</span><span lang="EN-US"> destory</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>方法不能被呼叫，因为初始化被认为执行失败。发生</span> <span ?Times mso-hansi-font-family: Roman?; New Times Roman??>失败后，</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器会尝试着重新实例化及初始化</span> <span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>。这个异常处理的规则是：由一个</span><span lang="EN-US">UnavailableException </span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>指定一个不能执行的最小时间，当此异常发生时，</span><span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>容器必需等到指定时间过去后才产生并且初始化一个新的</span> <span lang="EN-US">Portlet</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>。</span></p>
<p class="MsoNormal"><span style="font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在初始化过程中所丟出的</span><span lang="EN-US"> Runtime Exception</span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>异常，被当作</span> <span lang="EN-US">PortletException </span><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>来处理。</span></p>
<h3><a name="_Toc117571987"></a><a name="_Toc117571158"><span><span style="font-size: 10.5pt; line-height: 173%; font-family: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 16.0pt">第四节</span></span></a><span><span style="mso-bookmark: _Toc117571987"><span lang="EN-US"><span style="mso-spacerun: yes">&nbsp; </span>Liferay Portal</span></span></span><span><span style="mso-bookmark: _Toc117571987"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>工作原理</span></span></span><span lang="EN-US"><O:P></O:P></span></h3>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体">Portal</span><span>系统根据需要由一个或者多个<span lang="EN-US">Portal</span>页面组成，每个<span lang="EN-US">Portal</span>页面包含零个或者多个的<span lang="EN-US">Portlet</span>。每个<span lang="EN-US">Portlet</span>呈现自己的信息内容，以此实现内容聚合。通过定义每个<span lang="EN-US">Portlet</span>的可用权限，实现个性化的桌面信息定制。<span lang="EN-US"><O:P></O:P></span></span></p>
<font color="#0000ff">
<h3><a name="_Toc117571988"></a><a name="_Toc117571159"></a><font color="#000000"><ST1:CHSDATE isrocdate="False" w:st="on" year="1899" day="30" islunardate="False" month="12"><span><span style="mso-bookmark: _Toc117571988"><span lang="EN-US">1.4.1<span style="mso-spacerun: yes">&nbsp; </span>P</span></span></span></ST1:CHSDATE><span><span style="mso-bookmark: _Toc117571988"><span lang="EN-US">ortlet </span></span></span><span><span style="mso-bookmark: _Toc117571988"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>样式以及窗口状态</span></span></span></font></h3>
<h3><font color="#000000"><span><span style="mso-bookmark: _Toc117571988"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>&nbsp;
<h3><font color="#000000"><span><span style="mso-bookmark: _Toc117571988"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??><img height="216" alt="图1.4.1-1.jpg" src="http://www.blogjava.net/images/blogjava_net/eamoi/Liferay Portal二次开发/图1.4.1-1.jpg" width="554" border="0" /><img height="228" alt="图1.4.1-2.jpg" src="http://www.blogjava.net/images/blogjava_net/eamoi/Liferay Portal二次开发/图1.4.1-2.jpg" width="552" border="0" /></span></span></span></font></h3>
<h3><font color="#000000"><span><span style="mso-bookmark: _Toc117571988"><span ?Times mso-hansi-font-family: Roman?; New Times Roman??>
<p class="MsoNormal"><span lang="EN-US" style="font-family: 宋体">JCP</span><span>组织提出的<span lang="EN-US">JSR168</span>规范定义了<span lang="EN-US">Portlet</span>的实现标准。每个<span lang="EN-US">Portlet</span>对外表现为一个小窗口，有自己的默认样式和窗口状态。如上图，<span lang="EN-US">Portlet</span>有自己的标题，浏览状态下支持编辑<a name="OLE_LINK2"></a><a name="OLE_LINK1"><span>、关闭、</span></a>上移、下移、最大化、最小化功能，编辑状态下支持返回和关闭功能。从各种数据来源提取的信息以<span lang="EN-US">Portlet</span>内容的形式呈现在<span lang="EN-US">Portal</span>中。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: black; font-family: 宋体; mso-bidi-font-size: 10.5pt">Portlet</span><span>样式指出 <span lang="EN-US">Portlet</span>正处于什么模式，<span lang="EN-US">Portlet</span>通常会根据所处的模式而执行不同的工作并产生不同的内容。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="paragraph"><span lang="EN-US" style="font-family: 宋体">Portlet</span><span>模式让 <span lang="EN-US">Portlet</span>决定它该显示什么内容和执行什么动作。调用一个 <span lang="EN-US">Portlet</span>的时候，<span lang="EN-US">Portlet </span>容器会提供一个 <span lang="EN-US">Portlet</span>模式给那个 <span lang="EN-US">Portlet</span>。当在处理一个请求动作时，<span lang="EN-US">Portlet </span>的模式是可以用程序来改变的。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="paragraph"><span lang="EN-US" style="font-family: 宋体">JSR168</span><span>规范定义了三个<span lang="EN-US">Portlet</span>模式： 浏览、编辑和帮助，<span lang="EN-US">Liferay Portal</span>支持其中的全部三个模式。同时<span lang="EN-US">Portal</span>是可以根据使用者的角色，来决定是要提供<span lang="EN-US">(</span>显示<span lang="EN-US">)</span>哪几个 <span lang="EN-US">Portlet </span>模式给使用者操作。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="paragraph"><span style="font-family: 宋体">例如，匿名使用者可以操作浏览和帮助等 <span lang="EN-US">Portlet </span>模式的内容， 而只有授权过的使用者可以操作编辑这个 <span lang="EN-US">Portlet </span>模式所提供的内容或动作。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><span style="color: black; font-family: 宋体; mso-bidi-font-size: 10.5pt">在浏览这个<span lang="EN-US">Portlet</span>模式里，所被期望要提供的功能是产生标记语言来表现此时 </span><span lang="EN-US"><font face="Times New Roman">Portlet</font></span><span>的状态。 举例来说， </span><span lang="EN-US"><font face="Times New Roman">Portlet</font></span><span>的 浏览 模式可以包含一个或多个画面让使用者可以浏览与互动， 或是一些不需要与使用者互动的静态内容。<span lang="EN-US"> <O:P></O:P></span></span></p>
<p class="MsoNormal"><span lang="EN-US" style="color: black; font-family: 宋体; mso-bidi-font-size: 10.5pt"><span>&nbsp;&nbsp; </span></span><span>在编辑这个<span lang="EN-US">Portlet</span>模式里， <span lang="EN-US">Portlet </span>需要提供内容和逻辑来让使用者定制 <span lang="EN-US">Portlet </span>的行为。典型的说，编辑模式的 <span lang="EN-US">Portlet </span>会设定或更新 <span lang="EN-US">Portlet </span>的参数设定值。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><span style="color: black; font-family: 宋体; mso-bidi-font-size: 10.5pt">在帮助这个模式里，<span lang="EN-US">Portlet</span>应该提供有关这个 <span lang="EN-US">Portlet</span>的帮助信息。这个帮助信息可以是有关这个 <span lang="EN-US">Portlet</span>的简单且条理清楚的视窗说明或是详细的说明整个来龙去脉。所有的<span lang="EN-US">Portlet</span>并不需要都提供帮助这个模式。<span lang="EN-US"><O:P></O:P></span></span></p>
<p class="MsoNormal"><span style="color: black; font-family: 宋体; mso-bidi-font-size: 10.5pt">一个 <span lang="EN-US">Portlet</span>可以根据窗口状态来决定在一个页面里该占多少空间。当调用一个 <span lang="EN-US">Portlet</span>时， <span lang="EN-US">Portlet</span>容器 需要告诉该 <span lang="EN-US">Portlet</span>目前的窗口状态。 此时 <span lang="EN-US">Portlet</span>可以根据窗口状态来决定它该对多少信息作处理。在处理请求的过程中， <span lang="EN-US">Portlet</span>可以通过程序的方式来改变窗口状态。</span></span></span></span></font></span></span></span></font></font></span></p>
</h3>
</h3>
<img src ="http://www.blogjava.net/weiyc-16000/aggbug/165083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiyc-16000/" target="_blank">IT扁担</a> 2007-12-04 09:48 <a href="http://www.blogjava.net/weiyc-16000/articles/165083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>liferay的安装</title><link>http://www.blogjava.net/weiyc-16000/articles/165082.html</link><dc:creator>IT扁担</dc:creator><author>IT扁担</author><pubDate>Tue, 04 Dec 2007 01:47:00 GMT</pubDate><guid>http://www.blogjava.net/weiyc-16000/articles/165082.html</guid><wfw:comment>http://www.blogjava.net/weiyc-16000/comments/165082.html</wfw:comment><comments>http://www.blogjava.net/weiyc-16000/articles/165082.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiyc-16000/comments/commentRss/165082.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiyc-16000/services/trackbacks/165082.html</trackback:ping><description><![CDATA[&nbsp;Liferay Portal<span ?Times New Times Roman??>分为</span><font face="Times New Roman">Professional </font><span ?Times New Times Roman??>和</span><font face="Times New Roman"> Enterprise</font><span ?Times New Times Roman??>两个版本。</span>
<p><font face="Times New Roman">Liferay Portal</font><span ?Times New Times Roman??>支持多个应用服务器和</span><font face="Times New Roman">Servlet</font><span ?Times New Times Roman??>容器。</span><font face="Times New Roman">Liferay Portal Ent</font><span ?Times New Times Roman??>版本需要一个健壮的</span><font face="Times New Roman">J2EE</font><span ?Times New Times Roman??>服务器，而</span><font face="Times New Roman">Pro</font><span ?Times New Times Roman??>版本只要一个普通的</span><font face="Times New Roman">Servlet</font><span ?Times New Times Roman??>服务器就可以运行。如果需要运行</span><font face="Times New Roman">EJB</font><span ?Times New Times Roman??>，建议使用</span><font face="Times New Roman">Pro</font><span ?Times New Times Roman??>版本。两个版本的源码和应用接口都是一样的。</span></p>
<p><span style="font-family: 宋体">默认的，</span><font face="Times New Roman">Pro</font><span ?Times New Times Roman??>版本分别集成</span><font face="Times New Roman">Tomcat / Jetty / Resin</font><span ?Times New Times Roman??>作为</span><font face="Times New Roman">Web</font><span ?Times New Times Roman??>服务器，采用</span><font face="Times New Roman">Struts</font><span ?Times New Times Roman??>作为</span><font face="Times New Roman">Web</font><span ?Times New Times Roman??>框架，实现轻量级的系统架构。</span><font face="Times New Roman">Enterprise</font><span ?Times New Times Roman??>集成</span><font face="Times New Roman">JBoss</font><span ?Times New Times Roman??>作为</span><font face="Times New Roman">Web</font><span ?Times New Times Roman??>服务器，采用</span><font face="Times New Roman">Spring</font><span ?Times New Times Roman??>作为</span><font face="Times New Roman">Web</font><span ?Times New Times Roman??>框架，兼顾</span><font face="Times New Roman">EJB</font><span ?Times New Times Roman??>。</span></p>
<p><font face="Times New Roman">Liferay Portal</font><span ?Times New Times Roman??>默认集成</span><font face="Times New Roman">HSQL</font><span ?Times New Times Roman??>数据库，来持久化保存用户自定义的数据。通过修改集成在</span><font face="Times New Roman">Liferay Portal</font><span ?Times New Times Roman??>的</span><font face="Times New Roman">Tomcat</font><span ?Times New Times Roman??>的部署描述文件，用户可以更改数据源。</span><font face="Times New Roman">Liferay Portal</font><span ?Times New Times Roman??>官方网站提供了数据库表的生成脚本。</span></p>
<p><span style="font-family: 宋体">下面以</span><font face="Times New Roman">Pro</font><span ?Times New Times Roman??>版本</span><font face="Times New Roman">(Tomcat</font><span ?Times New Times Roman??>服务器</span><font face="Times New Roman">)</font><span ?Times New Times Roman??>为例，讲述</span><font face="Times New Roman">Liferay Portal</font><span ?Times New Times Roman??>的用户策略、内容布局、桌面和品质。</span></p>
<h3><span style="font-size: 10.5pt; line-height: 173%; font-family: 宋体">第一节</span><font face="Times New Roman">&nbsp;Liferay Portal</font><span ?Times New Times Roman??>安装</span></h3>
<p><span style="font-family: 宋体">由于</span><font face="Times New Roman">Liferay Portal Pro</font><span ?Times New Times Roman??>版本集成了</span><font face="Times New Roman">Tomcat</font><span ?Times New Times Roman??>服务器</span><font face="Times New Roman">V5</font><span ?Times New Times Roman??>，所以只要把应用包下载解压就可以直接运行。</span></p>
<p><font face="Times New Roman">1</font><span ?Times New Times Roman??>、从</span><font face="Times New Roman"> <a href="http://www.iferay.om/web/guest/downloads/portal_pro">http://www.iferay.om/web/guest/downloads/portal_pro</a> </font><span ?Times New Times Roman??>下载</span><font face="Times New Roman">Pro</font><span ?Times New Times Roman??>版本</span><font face="Times New Roman">zip</font><span ?Times New Times Roman??>包，</span><span ?Times New Times Roman??>解压到目录</span><font face="Times New Roman">{PORTAL_HOME}</font><span ?Times New Times Roman??>，</span><span ?Times New Times Roman??>目录结构相对普通的</span><font face="Times New Roman">Tomcat</font><span ?Times New Times Roman??>增加了</span><font face="Times New Roman">Liferay</font><span ?Times New Times Roman??>文件夹。</span><font face="Times New Roman">Liferay</font><span ?Times New Times Roman??>是默认的</span><font face="Times New Roman">Web</font><span ?Times New Times Roman??>应用。</span></p>
<p><font face="Times New Roman">2</font><span ?Times New Times Roman??>、正确安装</span><font face="Times New Roman">JDK1.4</font><span ?Times New Times Roman??>或者</span><font face="Times New Roman">JDK1.5</font><span ?Times New Times Roman??>，并在环境变量里面正确配置</span><font face="Times New Roman">JAVA_HOME</font><span ?Times New Times Roman??>变量。</span></p>
<p><img height="106" alt="图2.1-1.jpg" src="http://www.blogjava.net/images/blogjava_net/eamoi/Liferay Portal二次开发/图2.1-1.jpg" width="505" border="0" /><br />
</p>
<p><font face="Times New Roman">3</font><span ?Times New Times Roman??>、从命令行启动</span><font face="Times New Roman">{PORTAL_HOME}/bin/startup.bat</font><span ?Times New Times Roman??>，启动</span><font face="Times New Roman">Liferay Portal</font><span ?Times New Times Roman??>。</span></p>
<p><font face="Times New Roman">4</font><span ?Times New Times Roman??>、在浏览器地址栏输入</span><a href="http://localhost/"><font face="Times New Roman">http://localhost</font></a><span ?Times New Times Roman??>，访问</span><font face="Times New Roman">Portal</font><span ?Times New Times Roman??>首页。</span></p>
<p><font face="Times New Roman">5</font><span ?Times New Times Roman??>、用</span><font face="Times New Roman">Login</font><span ?Times New Times Roman??>为</span><font face="Times New Roman">test@liferay.com</font><span ?Times New Times Roman??>密码为</span><font face="Times New Roman">test</font><span ?Times New Times Roman??>的用户登录</span><font face="Times New Roman">Portal</font><span ?Times New Times Roman??>系统，得到的是一个</span><font face="Times New Roman">Demo</font><span ?Times New Times Roman??>的首页。</span></p>
<p><img height="325" alt="图2.1-2.jpg" src="http://www.blogjava.net/images/blogjava_net/eamoi/Liferay Portal二次开发/图2.1-2.jpg" width="434" border="0" /><br />
</p>
<p><span style="font-family: 宋体">如果启动呈现异常，请查看</span><font face="Times New Roman">Tomcat</font><span ?Times New Times Roman??>控制台查找原因。</span></p>
<p><font face="Times New Roman">Liferay Portal</font><span ?Times New Times Roman??>启动之后，</span><font face="Times New Roman">HSQL</font><span ?Times New Times Roman??>数据库自动启动。</span></p>
<p><span style="font-family: 宋体">登录系统后，点击右上角&#8220;</span><font face="Times New Roman">My Account</font><span ?Times New Times Roman??>&#8221;链接，在&#8220;</span><font face="Times New Roman">Display</font><span ?Times New Times Roman??>&#8221;选项卡中将</span><font face="Times New Roman">Language</font><span ?Times New Times Roman??>改为&#8220;</span><font face="Times New Roman">Chinese(China)</font><span ?Times New Times Roman??>&#8221;，以便中文化</span><font face="Times New Roman">Portal</font><span ?Times New Times Roman??>界面。</span></p>
 <img src ="http://www.blogjava.net/weiyc-16000/aggbug/165082.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiyc-16000/" target="_blank">IT扁担</a> 2007-12-04 09:47 <a href="http://www.blogjava.net/weiyc-16000/articles/165082.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Pluto初始化流程</title><link>http://www.blogjava.net/weiyc-16000/articles/163475.html</link><dc:creator>IT扁担</dc:creator><author>IT扁担</author><pubDate>Tue, 27 Nov 2007 08:19:00 GMT</pubDate><guid>http://www.blogjava.net/weiyc-16000/articles/163475.html</guid><wfw:comment>http://www.blogjava.net/weiyc-16000/comments/163475.html</wfw:comment><comments>http://www.blogjava.net/weiyc-16000/articles/163475.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiyc-16000/comments/commentRss/163475.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiyc-16000/services/trackbacks/163475.html</trackback:ping><description><![CDATA[<table width="100%">
    <tbody>
        <tr>
            <td>
            <p><font face="Arial"><br />
            一、初始化流程</font> </p>
            <p><font face="Arial">&nbsp; //Servlet初始化<br />
            &nbsp; Pluto.PortalImpl.Servlet.init()</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp; // ServiceManager初始化<br />
            &nbsp;&nbsp;&nbsp;&nbsp; ServiceManager.init()</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ConfigService.init()&nbsp; // 配置服务</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LogService.init()&nbsp; // 日志服务</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FactoryManagerService.init()&nbsp; // 工厂管理器</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletDefinitionRegistryService.init()&nbsp; // Portlet定义注册表</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletEntityRegistryService.init()&nbsp; // Portlet实体注册表</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageRegistryService.init() // Page注册表</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //注，以上服务都读取同名的properties配置文件.</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp; // 初始化Portlet容器, 容器实现类在ConfigService.properties中指定<br />
            &nbsp;&nbsp;&nbsp;&nbsp; PortletContainerFactory.getPortletContainer().init()</font> </p>
            <p><font face="Arial">二、请求处理流程 </font></p>
            <p><font face="Arial">&nbsp; Pluto.PortalImpl.Servlet.doGet()</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp; 1. 创建PortalEnvironment;</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp; 2. 查找ActionWindow;</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp; 2a. 如找到ActionWindow, 则为Action<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行PortletContainer.processPortletAction();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 重定向输出.</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp; 2b. 找不到ActionWindow, 则为Render, 读取Page定义。<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RootFragment root = PageRegistry.getRootFragment();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root.service(servletRequest, servletResponse);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp; 3. 处理完毕;</font> </p>
            <p><font face="Arial">&nbsp; // 处理Fragment, RootFragment与Pageregistry.xml文件关联, 后者定义了页面的布局<br />
            &nbsp; Pluto.portalImpl.Aggregation.RootFragment.service()</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp; // 服务前置处理。<br />
            &nbsp;&nbsp;&nbsp; 1. preService(request, response);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp; // 包含与当前fragment同名的jsp文件，当前为RootFragment。<br />
            &nbsp;&nbsp;&nbsp; 2. RequestDispatcher rd = getServletConfig().getServletContext().<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getRequestDispatcher(BASE_ROOT+jspName);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rd.include(request, response);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp; // 服务后置处理<br />
            &nbsp;&nbsp;&nbsp; 3. postService(request, response);</font> </p>
            <p><font face="Arial">&nbsp; // Pageregistry.xml<br />
            &nbsp; 〈portal〉&nbsp; // 对应RootFragment<br />
            &nbsp;&nbsp;&nbsp; 〈fragment name="navigation" <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; class="org.apache.Pluto.portalImpl.aggregation.navigation.TabNavigation"〉<br />
            &nbsp;&nbsp;&nbsp; 〈/fragment〉</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp; 〈fragment name="test" type="page"〉&nbsp; // 对应PageFragment<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈navigation〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈title〉Test〈/title〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈description〉...〈/description〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/navigation〉</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈fragment name="row" type="row"〉&nbsp; // 对应RowFragment<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈fragment name="col1" type="column"〉&nbsp;&nbsp; // 对应ColumnFragment<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈fragment name="p1" type="portlet"〉&nbsp;&nbsp; // 对应PortletFragment<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈property name="portlet" value="3.1"/〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/fragment〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈fragment name="p2" type="portlet"〉&nbsp; // 对应PortletFragment<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈property name="portlet" value="4.1"/〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/fragment〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/fragment〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/fragment〉<br />
            &nbsp;&nbsp;&nbsp; 〈/fragment〉<br />
            &nbsp; 〈/portal〉</font> </p>
            <p><font face="Arial">&nbsp;&nbsp; // 上面的层次结构十分清楚，其中fragment与Fragment的子类对应，上面的定义中包括RootFragment, <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PageFragment, RowFragment, ColumnFragment和PortletFragment，除了PortletFragment外，<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其它Fragment的处理大致上是一样的，<br />
            &nbsp;&nbsp; Iterator childIterator = fragment.getChildFragments().iterator();</font> </p>
            <p><font face="Arial">&nbsp;&nbsp; // 遍历子fragment, 并调用其服务方法。<br />
            &nbsp;&nbsp; while (childIterator.hasNext()) {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Fragment subfragment = (Fragment)childIterator.next();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (subfragment instanceof AbstractNavigationFragment)<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; subfragment.service(request, response);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
            &nbsp; }</font> </p>
            <p><font face="Arial">三、Portal处理流程</font> </p>
            <p><font face="Arial">&nbsp; 先来看看Portlet的初始化, 主要是从配置文件中读取Portlet定义。<br />
            &nbsp; PortletFragment.init()</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 读取Portlet的实体Id, 在pageregistry.xml中由portlet属性指定.<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String portletEntityId = getInitParameters().getString("portlet");</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 读取Portlet实体. portlet实体在portletentityregistry.xml中定义.<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletEntity portletEntity = PortletEntityRegistry.getPortletEntity(...);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // portletentityregistry.xml<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet-entity-registry〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈application id="3"〉&nbsp; // 对应PortletApplicationEntity<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈definition-id〉testsuite〈/definition-id〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet id="1"〉&nbsp; // 对应PortletEntity<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈definition-id〉testsuite.TestPortlet1〈/definition-id〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈preferences〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈pref-name〉TestName4〈/pref-name〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈pref-value〉TestValue4〈/pref-value〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈read-only〉true〈/read-only〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/preferences〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/portlet&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/application&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈application id="4"〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈definition-id&gt;testsuite〈/definition-id〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet id="1"〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈definition-id&gt;testsuite.TestPortlet2〈/definition-id〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈preferences〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈pref-name〉TestName4〈/pref-name〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈pref-value〉TestValue4〈/pref-value〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈read-only〉true〈/read-only〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/preferences〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/portlet〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/application〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp; 〈/portlet-entity-registry〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //要注意这里的applicationid和portletid与pageregistry中的portletid的对应关系。</font> </p>
            <p><font face="Arial">&nbsp; // Portlet服务<br />
            &nbsp; PortletFragment.service()</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //load protlet<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletContainer.portletLoad(...)</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 1.取得PortletDefinition, 从portletentityregistry中定义的application中读取portlet定义.<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletDefinition def = portletWindow.getPortletEntity().getPortletDefinition();</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // portlet.xml<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet-app〉&nbsp;&nbsp; // 对应PortletApplicationDefinition<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet〉&nbsp;&nbsp;&nbsp;&nbsp; // 对应PortletDefinition<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈description〉TestSuiteDescription〈/description〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet-name〉TestPortlet1〈/portlet-name〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈display-name〉Test Portlet #1〈/display-name〉</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet-class〉org.apache.Pluto.portalImpl.portlet.TestPortlet〈/portlet-class〉</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈init-param&gt;<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈name〉config〈/name〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈value〉/WEB-INF/testsuite-config.xml〈/value〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/init-param〉</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈supports〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈mime-type〉text/html〈/mime-type〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet-mode〉VIEW〈/portlet-mode〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet-mode〉EDIT〈/portlet-mode〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet-mode〉HELP〈/portlet-mode〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/supports〉</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet-info〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈title〉Test Portlet #1〈/title〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈short-title〉Test #1〈/short-title〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈keywords〉Test,Testing〈/keywords〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/portlet-info&gt;</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈security-role-ref〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈role-name〉PlutoTestRole〈/role-name〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈role-link〉tomcat〈/role-link〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/security-role-ref〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈/portlet〉<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 〈portlet-app〉</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 2.取得PortletInvoker<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletInvoker invoker = PortletInvokerAccess.getPortletInvoker(def);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 3.执行load操作<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoker.load(renderRequest, renderResponse)</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // render Portlet<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletContainer.renderPortlet(...);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 1. 取得PortletInvoker<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PortletInvoker invoker = PortletInvokerAccess.getPortletInvoker(...);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 2. 执行render操作。<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; invoker.render(renderRequest, renderResponse);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 处理Title, support modes, </font></p>
            <p><font face="Arial">&nbsp; // Portlet调用.<br />
            &nbsp; ProtletInvoker.invoke(...)</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 取得Portlet应用的dispatcher.<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletDefinition servletDefinition = portletDefinition.getServletDefinition();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ServletContext servletContext = servletConfig.getServletContext();<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; RequestDispatcher dispatcher = servletDefinition.getRequestDispatcher(servletContext);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 设置属性, METHOD_ID为别对应load, render和action。<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servletRequest.setAttribute(Constants.METHOD_ID, methodID);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servletRequest.setAttribute(Constants.PORTLET_REQUEST, portletRequest);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; servletRequest.setAttribute(Constants.PORTLET_RESPONSE, portletResponse);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 调用Portlet&nbsp; <br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dispatcher.include(servletRequest, servletResponse);</font> </p>
            <p><font face="Arial">四、Portlet处理流程</font> </p>
            <p><font face="Arial">&nbsp; 在Portlet应用的web.xml中，定义了PortletServlet为Portlet的Servlet，它由dispatch方法统一进行请求处理.</font> </p>
            <p><font face="Arial">&nbsp; PortletServlet.dispatch(...)</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp; // 设置portletConfig.<br />
            &nbsp;&nbsp;&nbsp;&nbsp; request.setAttribute(org.apache.Pluto.Constants.PORTLET_CONFIG, portletConfig);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp; Integer method_id = (Integer)request.getAttribute(Constants.METHOD_ID);<br />
            &nbsp;&nbsp;&nbsp;&nbsp; if (method_id == Constants.METHOD_RENDER)<br />
            &nbsp;&nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; renderRequest = (RenderRequest)request.getAttribute(Constants.PORTLET_REQUEST);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; renderResponse = (RenderResponse)request.getAttribute(Constants.PORTLET_RESPONSE);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // prepare container objects to run in this webModule<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prepareRenderRequest(renderRequest, request);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prepareRenderResponse(renderResponse, request, response);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; portletClass.render(renderRequest,renderResponse);<br />
            &nbsp;&nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp;&nbsp; else if (method_id==org.apache.Pluto.Constants.METHOD_ACTION)<br />
            &nbsp;&nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actionRequest = (ActionRequest)request.getAttribute(Constants.PORTLET_REQUEST);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; actionResponse = (ActionResponse)request.getAttribute(Constants.PORTLET_RESPONSE);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // prepare container objects to run in this webModule<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prepareActionRequest(actionRequest, request);<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; prepareActionResponse(actionResponse, request, response);</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; portletClass.processAction(actionRequest,actionResponse);<br />
            &nbsp;&nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp;&nbsp; else if (method_id == org.apache.Pluto.Constants.METHOD_NOOP)<br />
            &nbsp;&nbsp;&nbsp;&nbsp; {<br />
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //nothing to do<br />
            &nbsp;&nbsp;&nbsp;&nbsp; }<br />
            &nbsp;&nbsp;&nbsp;&nbsp; //注: portletClass即为portlet的具体实现类。</font> </p>
            <p><font face="Arial">&nbsp;&nbsp;&nbsp;&nbsp; 至此，请求就由portlet进行处理了。</font> </p>
            <p><font face="Arial">从上面的流程可以看出，Pluto就是将请求分派到页面上的各个portlet，portlet根据method执行相应操作，</font> </p>
            <p><font face="Arial">最后由Pluto将它们处理的结果按特定布局进行显示。</font> </p>
            </td>
        </tr>
    </tbody>
</table>
<img src ="http://www.blogjava.net/weiyc-16000/aggbug/163475.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiyc-16000/" target="_blank">IT扁担</a> 2007-11-27 16:19 <a href="http://www.blogjava.net/weiyc-16000/articles/163475.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>门户资源收集</title><link>http://www.blogjava.net/weiyc-16000/articles/162667.html</link><dc:creator>IT扁担</dc:creator><author>IT扁担</author><pubDate>Fri, 23 Nov 2007 08:47:00 GMT</pubDate><guid>http://www.blogjava.net/weiyc-16000/articles/162667.html</guid><wfw:comment>http://www.blogjava.net/weiyc-16000/comments/162667.html</wfw:comment><comments>http://www.blogjava.net/weiyc-16000/articles/162667.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/weiyc-16000/comments/commentRss/162667.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/weiyc-16000/services/trackbacks/162667.html</trackback:ping><description><![CDATA[<p>Open source projects </p>
<p>http://jportlet.sourceforge.net/ <br />
http://jakarta.apache.org/jetspeed/site/index.html <br />
http://www.liferay.com/home/index.jsp <br />
http://basicportal.com/ <br />
http://www.jahia.org/ <br />
http://jporta.sourceforge.net/ <br />
<a href="http://jakarta.apache.org/pluto">http://jakarta.apache.org/pluto</a></p>
<p>Commercial products <br />
BEA WebLogic Portal - http://edocs.bea.com/wlp/docs81/javadoc/com/bea/portal/model/Portlet.html <br />
IBM Websphere Portal - http://www.software.ibm.com/wsdd/zones/portal/ <br />
Oracle Portal Developer Kit - http://portalstudio.oracle.com/ </p>
<p>其它: <br />
PSML - http://jakarta.apache.org/jetspeed/site/psml.html<br />
Apache Software Foundation: Jakarta JetSpeed 1.3<br />
JetSpeed home page: http://jakarta.apache.org/jetspeed/site/index.html <br />
JetSpeed Portlet API: http://cvs.apache.org/viewcvs/jakarta-jetspeed/proposals/portletAPI/<br />
BEA: Web Logic Portal 4.0 http://www.bea.com/products/weblogic/portal/index.shtml<br />
IBM: WebSphere Portal 2.1 http://www-4.ibm.com/software/webservers/portal/ <br />
iPlanet: iPlanet Portal Server 3.0 http://www.iplanet.com/products/iplanet_portal/home_portal.html<br />
Oracle: Oracle 9i Portal http://www.oracle.com/ip/deploy/ias/portal/index.html<br />
Apache Software Foundation: Jakarta JetSpeed 1.3<br />
JetSpeed home page: http://jakarta.apache.org/jetspeed/site/index.html <br />
JetSpeed Portlet API: http://cvs.apache.org/viewcvs/jakarta-jetspeed/proposals/portletAPI/<br />
BEA: Web Logic Portal 4.0 http://www.bea.com/products/weblogic/portal/index.shtml<br />
IBM: WebSphere Portal 2.1 http://www-4.ibm.com/software/webservers/portal/ <br />
iPlanet: iPlanet Portal Server 3.0 http://www.iplanet.com/products/iplanet_portal/home_portal.html<br />
Oracle: Oracle 9i Portal http://www.oracle.com/ip/deploy/ias/portal/index.html<br />
SAP Portal: http://www.iviewstudio.com<br />
Epicentric portal: http://www.epicentric.com/solutions/products/efs/</p>
 <img src ="http://www.blogjava.net/weiyc-16000/aggbug/162667.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/weiyc-16000/" target="_blank">IT扁担</a> 2007-11-23 16:47 <a href="http://www.blogjava.net/weiyc-16000/articles/162667.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>