這里我們主要以4.0的版本為主,雖然還只是rc1版,但相信正式版應該很快就出來了。
一、portal服務器下載和運行環境
首先訪問liferay的官方網站http://www.liferay.com下載portal服務器,我們可以選擇它的tomcat集成版下載,這樣可以省去一些麻煩。
然后啟動bin目錄下的statup.bat就啟動了tomcat服務,然后通過http://localhost:8080訪問就可以,默認的用戶名和密碼是 test@liferay.com/test。
登錄以后可以通過左方面的連接進入相關的操作:
“我的帳戶”里可以進行個人信息,歡迎信息,語言等基本信息的設置。
“我的地方”可以分別進行個人,公開,gust,cms,suport等環境的設置,其實就相當于幾個不同的虛擬站點。
針對“我的地方“的每個站點可以進行”頁設置“,即站點頁面和級次的設置
”增加內容“則是對當前所在的頁面進行內容的添加或改變頁面模版(但目前感覺它的范本設置還存在問題),如果要刪除的話直接點擊每個portlet的刪除按鈕就可以了。
另外在我的私人空間首頁,即登錄后默認的首頁里,在”管理者“的portlet里我們可以進行相應的設置,像企業里可以改變站點的語言,banner圖片等基本信息,portlets里可以進行目前的所有portlet的管理。
這個里面基本上都是一些設置的熟悉和使用,相信每個地方都試一試就會有所了解了。
二、簡單的開發自己的portlet
做portlet開發通常首先也要建立一個獨立的工程(避免和系統的混在一起不便于管理)。建立工程的時候不管是用jbuilder還是eclipse,和我們建立普通的web工程并沒有什么不同。測試的例子以前網上有一篇介紹3.6.1的開發的寫的很不錯,我只是指出其中的一些不同和做一些補充,避免大家在多花去一些不必要的時間,我也是多花了幾個小時才找出來的。
1、portlet程序編寫
其中HelloWorldPortlet和HelloJSPPortlet 是兩個獨立的portlet測試,只不過前面一個類似servlet直接輸出,而后者使用了jsp頁面的顯示。
package com.lyj.portal;
import java.io.IOException;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
public class HelloWorldPortlet extends GenericPortlet {
public void doView(RenderRequest req, RenderResponse res)
throws IOException, PortletException {
res.setContentType("text/html");
res.getWriter().println("HelloWorld liuyujun test one! 中文測試一");
}
public void doEdit(RenderRequest req, RenderResponse res)
throws IOException, PortletException {
res.setContentType("text/html");
res.getWriter().println("HelloWorld liuyujun test two! 中文測試二");
}
}
package com.lyj.portal;
import java.io.IOException;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.PortletPreferences;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
public class HelloJSPPortlet extends GenericPortlet {
public void doView(RenderRequest req, RenderResponse res) throws
IOException, PortletException {
res.setContentType("text/html");
String jspName = getPortletConfig().getInitParameter("view-jsp");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
jspName);
rd.include(req, res);
}
public void doEdit(RenderRequest req, RenderResponse res) throws
IOException, PortletException {
res.setContentType("text/html");
String jspName = getPortletConfig().getInitParameter("edit-jsp");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
jspName);
rd.include(req, res);
}
}
2、我們在工程的web的根目錄下再增加HelloJSPPortlet需要用到的兩個jsp文件
view.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%>
<table cellpadding="8" cellspacing="0" width="100%">
<tr>
<td>
<font class="Portlet-font" style="font-size: x-small;">
This is a <b>Sample JSP Portlet</b> used in viewing model。 Use this as a quick
wayy to include JSPs。 view 成功
</td>
</tr>
</table>
edit.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%>
<table cellpadding="8" cellspacing="0" width="100%">
<tr>
<td>
<font class="Portlet-font" style="font-size: x-small;">
This is a <b>Sample JSP Portlet</b> used in viewing model。 Use this as a quick
wayy to include JSPs。edit 萬歲
</td>
</tr>
</table>
注意橙色背景的內容一定要加上,不然會有中文亂碼問題
3、web.xml配置
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="TestPortal">
<display-name>TestPortal</display-name>
<context-param>
<param-name>company_id</param-name>
<param-value>liferay.com</param-value>
</context-param>
<listener>
<listener-class>com.liferay.portal.shared.servlet.PortletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>HelloWorldPortlet</servlet-name>
<servlet-class>com.liferay.portal.servlet.PortletServlet</servlet-class>
<init-param>
<param-name>portlet-class</param-name>
<param-value>com.lyj.portal.HelloWorldPortlet</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldPortlet</servlet-name>
<url-pattern>/HelloWorldPortlet/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>HelloJSPPortlet</servlet-name>
<servlet-class>com.liferay.portal.servlet.PortletServlet</servlet-class>
<init-param>
<param-name>Portlet-class</param-name>
<param-value>com.lyj.portal.HelloJSPPortlet</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloJSPPortlet</servlet-name>
<url-pattern>/HelloJSPPortlet/*</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>http://java.sun.com/portlet</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
</taglib>
</web-app>
其中紅色字體和藍色字體的內容,如果以前使用3.6.1的一定要注意,藍色部分以前是不需要加的,但是現在是必須的,如果不加的話,在portal管理列表里能列出我們開發的portlet,但在添加內容時無法找到我們自己的portlet。紅色字體的部分相對原來多了shared,也就是它的類包進行了一定的調整,注意一下就可以了。
4、另外增加WEB-INF下增加portlet的私有配置文件
portlet.xml
<?xml version="1.0"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
<portlet>
<portlet-name>HelloWorldPortlet</portlet-name>
<display-name>HelloWorldPortlet</display-name>
<portlet-class>com.lyj.portal.HelloWorldPortlet</portlet-class>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>edit</portlet-mode>
</supports>
<portlet-info>
<title>HelloWorldPortlet</title>
<short-title>HelloWorldPortlet</short-title>
<keywords>HelloWorldPortlet</keywords>
</portlet-info>
<portlet-preferences>
<preference>
<name>portlet-title</name>
<value></value>
</preference>
<preference>
<name>show-portlet-borders</name>
<value>true</value>
</preference>
</portlet-preferences>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
<portlet>
<portlet-name>HelloJSPPortlet</portlet-name>
<display-name>HelloJSPPortlet</display-name>
<portlet-class>com.lyj.portal.HelloJSPPortlet</portlet-class>
<init-param>
<name>view-jsp</name>
<value>/view.jsp</value>
</init-param>
<init-param>
<name>edit-jsp</name>
<value>/edit.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>edit</portlet-mode>
</supports>
<portlet-info>
<title>HelloJSPPortlet</title>
<short-title>HelloJSPPortlet</short-title>
<keywords>HelloJSPPortlet</keywords>
</portlet-info>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
</portlet-app>
liferay-portlet.xml
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 3.5.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_3_5_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>HelloWorldPortlet</portlet-name>
<struts-path>HelloWorldPortlet</struts-path>
<use-default-template>true</use-default-template>
<instanceable>true</instanceable>
</portlet>
<portlet>
<portlet-name>HelloJSPPortlet</portlet-name>
<struts-path>HelloJSPPortlet</struts-path>
<use-default-template>true</use-default-template>
<instanceable>true</instanceable>
</portlet>
<role-mapper>
<role-name>administrator</role-name>
<role-link>Administrator</role-link>
</role-mapper>
<role-mapper>
<role-name>guest</role-name>
<role-link>Guest</role-link>
</role-mapper>
<role-mapper>
<role-name>power user</role-name>
<role-link>Power User</role-link>
</role-mapper>
<role-mapper>
<role-name>user</role-name>
<role-link>User</role-link>
</role-mapper>
</liferay-portlet-app>
liferay-display.xml
<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 3.5.0//EN" "http://www.liferay.com/dtd/liferay-display_3_5_0.dtd">
<display>
<category name="category.test">
<portlet id="HelloWorldPortlet"/>
<portlet id="HelloJSPPortlet"/>
</category>
</display>
5、在WEB-INF下新建一個tld目錄,把 tomcat\liferay\WEB-INF\tld\liferay-portlet.tld 復制過來就可以了
6、編譯完成后,像我們正常的發布web的方式發布就可以了,比如修改tomcat的配置文件,直接用一個虛擬目錄TestPortal指向我們工程的web 目錄;或者把我們的web目錄打包成TestPortal.war放到tomcat的webapps目錄下就可以了。重新啟動tomcat,登錄后,我們會在portlet管理中發現增加了HelloWorldPortlet,HelloJSPPortlet兩個portlet,在增加內容的時候在彈出的內容頁面 測試(test)中多了上述的兩個portlet。并且可以增加到我們的頁面中看看效果吧。
一、portal服務器下載和運行環境
首先訪問liferay的官方網站http://www.liferay.com下載portal服務器,我們可以選擇它的tomcat集成版下載,這樣可以省去一些麻煩。
然后啟動bin目錄下的statup.bat就啟動了tomcat服務,然后通過http://localhost:8080訪問就可以,默認的用戶名和密碼是 test@liferay.com/test。
登錄以后可以通過左方面的連接進入相關的操作:
“我的帳戶”里可以進行個人信息,歡迎信息,語言等基本信息的設置。
“我的地方”可以分別進行個人,公開,gust,cms,suport等環境的設置,其實就相當于幾個不同的虛擬站點。
針對“我的地方“的每個站點可以進行”頁設置“,即站點頁面和級次的設置
”增加內容“則是對當前所在的頁面進行內容的添加或改變頁面模版(但目前感覺它的范本設置還存在問題),如果要刪除的話直接點擊每個portlet的刪除按鈕就可以了。
另外在我的私人空間首頁,即登錄后默認的首頁里,在”管理者“的portlet里我們可以進行相應的設置,像企業里可以改變站點的語言,banner圖片等基本信息,portlets里可以進行目前的所有portlet的管理。
這個里面基本上都是一些設置的熟悉和使用,相信每個地方都試一試就會有所了解了。
二、簡單的開發自己的portlet
做portlet開發通常首先也要建立一個獨立的工程(避免和系統的混在一起不便于管理)。建立工程的時候不管是用jbuilder還是eclipse,和我們建立普通的web工程并沒有什么不同。測試的例子以前網上有一篇介紹3.6.1的開發的寫的很不錯,我只是指出其中的一些不同和做一些補充,避免大家在多花去一些不必要的時間,我也是多花了幾個小時才找出來的。
1、portlet程序編寫
其中HelloWorldPortlet和HelloJSPPortlet 是兩個獨立的portlet測試,只不過前面一個類似servlet直接輸出,而后者使用了jsp頁面的顯示。
package com.lyj.portal;
import java.io.IOException;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
public class HelloWorldPortlet extends GenericPortlet {
public void doView(RenderRequest req, RenderResponse res)
throws IOException, PortletException {
res.setContentType("text/html");
res.getWriter().println("HelloWorld liuyujun test one! 中文測試一");
}
public void doEdit(RenderRequest req, RenderResponse res)
throws IOException, PortletException {
res.setContentType("text/html");
res.getWriter().println("HelloWorld liuyujun test two! 中文測試二");
}
}
package com.lyj.portal;
import java.io.IOException;
import javax.portlet.GenericPortlet;
import javax.portlet.PortletException;
import javax.portlet.PortletRequestDispatcher;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
import javax.portlet.PortletPreferences;
import javax.portlet.ActionRequest;
import javax.portlet.ActionResponse;
public class HelloJSPPortlet extends GenericPortlet {
public void doView(RenderRequest req, RenderResponse res) throws
IOException, PortletException {
res.setContentType("text/html");
String jspName = getPortletConfig().getInitParameter("view-jsp");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
jspName);
rd.include(req, res);
}
public void doEdit(RenderRequest req, RenderResponse res) throws
IOException, PortletException {
res.setContentType("text/html");
String jspName = getPortletConfig().getInitParameter("edit-jsp");
PortletRequestDispatcher rd = getPortletContext().getRequestDispatcher(
jspName);
rd.include(req, res);
}
}
2、我們在工程的web的根目錄下再增加HelloJSPPortlet需要用到的兩個jsp文件
view.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%>
<table cellpadding="8" cellspacing="0" width="100%">
<tr>
<td>
<font class="Portlet-font" style="font-size: x-small;">
This is a <b>Sample JSP Portlet</b> used in viewing model。 Use this as a quick
wayy to include JSPs。 view 成功
</td>
</tr>
</table>
edit.jsp
<%@ page language="java" contentType="text/html;charset=GBK"%>
<table cellpadding="8" cellspacing="0" width="100%">
<tr>
<td>
<font class="Portlet-font" style="font-size: x-small;">
This is a <b>Sample JSP Portlet</b> used in viewing model。 Use this as a quick
wayy to include JSPs。edit 萬歲
</td>
</tr>
</table>
注意橙色背景的內容一定要加上,不然會有中文亂碼問題
3、web.xml配置
<?xml version="1.0"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app id="TestPortal">
<display-name>TestPortal</display-name>
<context-param>
<param-name>company_id</param-name>
<param-value>liferay.com</param-value>
</context-param>
<listener>
<listener-class>com.liferay.portal.shared.servlet.PortletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>HelloWorldPortlet</servlet-name>
<servlet-class>com.liferay.portal.servlet.PortletServlet</servlet-class>
<init-param>
<param-name>portlet-class</param-name>
<param-value>com.lyj.portal.HelloWorldPortlet</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldPortlet</servlet-name>
<url-pattern>/HelloWorldPortlet/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>HelloJSPPortlet</servlet-name>
<servlet-class>com.liferay.portal.servlet.PortletServlet</servlet-class>
<init-param>
<param-name>Portlet-class</param-name>
<param-value>com.lyj.portal.HelloJSPPortlet</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>HelloJSPPortlet</servlet-name>
<url-pattern>/HelloJSPPortlet/*</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>http://java.sun.com/portlet</taglib-uri>
<taglib-location>/WEB-INF/tld/liferay-portlet.tld</taglib-location>
</taglib>
</web-app>
其中紅色字體和藍色字體的內容,如果以前使用3.6.1的一定要注意,藍色部分以前是不需要加的,但是現在是必須的,如果不加的話,在portal管理列表里能列出我們開發的portlet,但在添加內容時無法找到我們自己的portlet。紅色字體的部分相對原來多了shared,也就是它的類包進行了一定的調整,注意一下就可以了。
4、另外增加WEB-INF下增加portlet的私有配置文件
portlet.xml
<?xml version="1.0"?>
<portlet-app xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd" version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_1_0.xsd">
<portlet>
<portlet-name>HelloWorldPortlet</portlet-name>
<display-name>HelloWorldPortlet</display-name>
<portlet-class>com.lyj.portal.HelloWorldPortlet</portlet-class>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>edit</portlet-mode>
</supports>
<portlet-info>
<title>HelloWorldPortlet</title>
<short-title>HelloWorldPortlet</short-title>
<keywords>HelloWorldPortlet</keywords>
</portlet-info>
<portlet-preferences>
<preference>
<name>portlet-title</name>
<value></value>
</preference>
<preference>
<name>show-portlet-borders</name>
<value>true</value>
</preference>
</portlet-preferences>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
<portlet>
<portlet-name>HelloJSPPortlet</portlet-name>
<display-name>HelloJSPPortlet</display-name>
<portlet-class>com.lyj.portal.HelloJSPPortlet</portlet-class>
<init-param>
<name>view-jsp</name>
<value>/view.jsp</value>
</init-param>
<init-param>
<name>edit-jsp</name>
<value>/edit.jsp</value>
</init-param>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
</supports>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>edit</portlet-mode>
</supports>
<portlet-info>
<title>HelloJSPPortlet</title>
<short-title>HelloJSPPortlet</short-title>
<keywords>HelloJSPPortlet</keywords>
</portlet-info>
<security-role-ref>
<role-name>guest</role-name>
</security-role-ref>
<security-role-ref>
<role-name>power user</role-name>
</security-role-ref>
<security-role-ref>
<role-name>user</role-name>
</security-role-ref>
</portlet>
</portlet-app>
liferay-portlet.xml
<?xml version="1.0"?>
<!DOCTYPE liferay-portlet-app PUBLIC "-//Liferay//DTD Portlet Application 3.5.0//EN" "http://www.liferay.com/dtd/liferay-portlet-app_3_5_0.dtd">
<liferay-portlet-app>
<portlet>
<portlet-name>HelloWorldPortlet</portlet-name>
<struts-path>HelloWorldPortlet</struts-path>
<use-default-template>true</use-default-template>
<instanceable>true</instanceable>
</portlet>
<portlet>
<portlet-name>HelloJSPPortlet</portlet-name>
<struts-path>HelloJSPPortlet</struts-path>
<use-default-template>true</use-default-template>
<instanceable>true</instanceable>
</portlet>
<role-mapper>
<role-name>administrator</role-name>
<role-link>Administrator</role-link>
</role-mapper>
<role-mapper>
<role-name>guest</role-name>
<role-link>Guest</role-link>
</role-mapper>
<role-mapper>
<role-name>power user</role-name>
<role-link>Power User</role-link>
</role-mapper>
<role-mapper>
<role-name>user</role-name>
<role-link>User</role-link>
</role-mapper>
</liferay-portlet-app>
liferay-display.xml
<?xml version="1.0"?>
<!DOCTYPE display PUBLIC "-//Liferay//DTD Display 3.5.0//EN" "http://www.liferay.com/dtd/liferay-display_3_5_0.dtd">
<display>
<category name="category.test">
<portlet id="HelloWorldPortlet"/>
<portlet id="HelloJSPPortlet"/>
</category>
</display>
5、在WEB-INF下新建一個tld目錄,把 tomcat\liferay\WEB-INF\tld\liferay-portlet.tld 復制過來就可以了
6、編譯完成后,像我們正常的發布web的方式發布就可以了,比如修改tomcat的配置文件,直接用一個虛擬目錄TestPortal指向我們工程的web 目錄;或者把我們的web目錄打包成TestPortal.war放到tomcat的webapps目錄下就可以了。重新啟動tomcat,登錄后,我們會在portlet管理中發現增加了HelloWorldPortlet,HelloJSPPortlet兩個portlet,在增加內容的時候在彈出的內容頁面 測試(test)中多了上述的兩個portlet。并且可以增加到我們的頁面中看看效果吧。