一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

基于 Struts 2 構(gòu)建 WebSphere Portal 上的 Portlet 應用

 WebSpherer 2009-03-31

Struts 2 是 MVC 框架發(fā)展的最新階段。Struts 2 從 WebWork 發(fā)展而來,而不是由 Struts 1 演化而來,因此利用 Struts 2 開發(fā)和部署應用程序有很多不同于 Struts 1 的地方,尤其是在開發(fā)和部署 Porlet 方面,Struts 2 更是有著以往 Portlet 應用程序開發(fā)方式所無法比擬的優(yōu)勢。本文的目的就是通過在 IBM 的 WebSphere Portal Server 上開發(fā)和部署一個基于 Struts 2 的 Porlet 應用,向讀者介紹利用 Struts 2 進行 Portlet 應用開發(fā)的優(yōu)勢和關(guān)鍵流程。

概述

     WebSphere Portal Server5.1 及以上版本支持兩種 Portlet API:第一種是 IBM Portlet,這種 Portlet API 是 WebSphere Portal Server 專有的一種 Portlet API;第二種是符合 JSR168 標準的 Portlet API。由于 JSR168 是一個開放的標準,因此符合 JSR168 標準的 Portlet 將更易于移植。

     IBM 為 IBM Portlet API 和 JSR168API 分別實現(xiàn)了基于 Struts1 的 Portlet 開發(fā)框架,由于基于 Struts1,這兩種 Portlet 框架 API 同 Portlet API 耦合緊密,尤其需要指出的是由于無論 IBM Portlet 還是在 WebSphere Portal Server 上實現(xiàn)的 JSR168 標準的 Porlet API, 它們的接口都直接依賴于 PortletRequest/PortletResponse 對象,這就使得程序移植和單元測試等變得比較困難。此外,我們在使用 Struts1 開發(fā) Servlet 應用時,習慣于將數(shù)據(jù)存放在 request 作用域中,通過頁面的跳轉(zhuǎn)將數(shù)據(jù)呈現(xiàn)到 jsp 視圖頁面。但是,這種做法在 portlet 開發(fā)中是不可行的。與 servlet 的生命周期有所不同,portlet 存在操作響應階段和呈現(xiàn)階段。 在 portlet 操作響應階段存放在 request 作用域的變量,在呈現(xiàn)階段就會失效。在原有 API 上解決這個問題既費時又不優(yōu)雅,而 Struts 2 對 Portlet 的支持將能夠很好的解決這些問題。

    本文就是要通過一個簡單的示例應用程序的開發(fā)和部署過程,來展示 Struts 2 怎樣解決舊有的 Portlet API 所無法克服的困難的。

    本文的重點不在于開發(fā)一個 Struts2 Web 應用程序,而在于開發(fā)一個作為 Portlet 的 Struts2 應用程序所需的的實現(xiàn)和配置。讀者可以了解到如何利用 Struts 2 來創(chuàng)建一個 Portlet,這個 Portlet 將完全獨立于其所開發(fā)和部署的平臺。

在示例應用程序的開發(fā)和部署中用到了下列產(chǎn)品:

  • IBM WebSphere Portal Server 集成測試環(huán)境 5.1
  • IBM WebSphere Application Server Version 5.1
  • Struts 2 Full Distribution 2.0.11
  • IBM Rational Application developer 7(RAD7)

Porlet 示例程序設計概述

示例應用程序是一個簡單的用戶登錄程序。合法的用戶將跳轉(zhuǎn)到的登錄成功頁面,登錄失敗的用戶則跳轉(zhuǎn)到登錄失敗頁面,并被要求輸入正確的用戶名和密碼。用戶 可以自由的在 Portlet 的 View、Edit 和 Help 模式之間進行切換。應用程序視圖部分分為以下幾部分:

  • 登錄頁面(login.jsp)——提示用戶輸入正確的用戶名和密碼,登錄應用程序。
  • 登錄成功頁面(success.jsp)——提示用戶登錄成功。
  • 登錄失敗頁面(fail.jsp)——提示用戶登錄失敗,提示用戶輸入正確的用戶名和密碼。
  • Edit 頁面(edit.jsp)——用戶進入 Edit 模式后的頁面。
  • Help 頁面(help.jsp)——用戶進入 Help 模式后的頁面。
  • 程序主類——Login.java。

圖 1. 程序初始頁面
 程序初始頁面


下圖是本文示例的 Action 與頁面的交互圖:


圖 2. Action 與頁面的交互圖
Action 與頁面的交互圖

利用 Struts2 實現(xiàn) Portlet

在本文中,使用 Struts2 開發(fā) Portlet 應用需要經(jīng)歷以下步驟:

  1. 使用 RAD7 建立開發(fā)環(huán)境
  2. 生成 web.xml 配置文件
  3. 生成 portlet.xml 配置文件
  4. 編輯 jsp 文件
  5. 應用 Struts2
  6. 部署 Portlet 應用程序
  7. 訪問 Portlet 應用

使用 RAD7 建立開發(fā)環(huán)境

在 Rational Application developer 7 中啟動一個 Portlet 項目,需要遵循下列步驟:

  1. 選擇新建一個 Portlet 項目,如圖 3 所示:

    圖 3. 新建一個 Portlet 項目
     新建一個 portlet 項目

  2. 輸入項目名 Struts2TestPortlet,目標運行時選擇 WebSphere Portal v5.1 或者更高版本,注意 Portlet API 選擇 JSR 168 Portlet, 注意勾掉創(chuàng)建 portlet 選項,點擊完成按鈕。如圖 4 所示:

    圖 4. 設置項目屬性
     設置項目屬性

    生成 portlet 項目及其結(jié)構(gòu)如圖 5 所示:

    圖 5.portlet 項目及其結(jié)構(gòu)
    portlet 項目及其結(jié)構(gòu)

  3. 接下來到 Apache 官方網(wǎng)站下載 strtus2 的完整版 (Full Distribution)。將下載到的 Zip 文件解壓縮。本文中使用的版本為 struts-2.0.11。將 struts-2.0.11 j4 文件夾下的 backport-util-concurrent-3.0.jar, retrotranslator-runtime-1.2.2.jar,struts2-core-j4-2.0.11.jar,xwork-j4-2.0.4.jar 和 lib 目錄下的 ognl-2.6.11.jar, freemarker-2.3.8.jar 文件拷貝到 portlet web 工程的 WEB-INF/lib 目錄下。

    在這里需要注意的是從 j4 文件夾下拷貝過來的 JAR 包,這是因為 WebSphere Portal Sever 5.1 基于 jdk1.4,而 j4 文件夾下的內(nèi)容就是 Struts2 支持 JDK1.4 的 JAR 文件。

     如果你使用的是Struts2.1.6版本,則必須將commons-fileupload-1.2.1.jar,commons-io-1.3.2.jar,commons-logging-1.0.4.jar也加入到classpath中,否則會出現(xiàn)無法加載Struts-default.xml文件的錯誤

生成 web.xml 配置文件

雙擊 WEB-INF/web.xml,打開 web 部署描述符界面,如圖 6 所示:


圖 6.web 部署描述符界面
web 部署描述符界面


切換到過濾器選項卡,點擊添加按鈕,創(chuàng)建一個過濾器,名稱設定為 Struts2 Filter, URL 映射為 /*, 并且使用現(xiàn)有的過濾器類 org.apache.struts2.dispatcher.FilterDispatcher,如圖 7 所示。點擊完成


圖 7. 創(chuàng)建一個過濾器
 創(chuàng)建一個過濾器


生成的 web.xml 描述文件內(nèi)容如下所示:


web.xml 描述文件內(nèi)容
                
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java./dtd/web-app_2_3.dtd">
<web-app id="WebApp_ID">
<display-name>Struts2TestPortlet</display-name>
<filter>
<filter-name>Struts2 Filter</filter-name>
<display-name>Struts2 Filter</display-name>
<description>Struts2 Filter</description>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>Struts2 Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>





回頁首


生成 portlet.xml 配置文件

雙擊 portlet.xml,打開 Portlet 部署描述符界面,切換到 portlet 選項卡,如圖 8 所示:


圖 8.Portlet 部署描述符界面
Portlet 部署描述符界面


點擊添加按鈕,添加一個 portlet, 輸入 portlet 類型 org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher,確定,如圖 9 所示:


圖 9. 添加 portlet
 添加 portlet


編輯該 portlet 的其它信息,分別設定 Portlet 名稱,顯示名稱,標題,簡短標題,關(guān)鍵字。本示例中均輸入 Struts2 Test Portlet。如圖 10 所示:


圖 10. 編輯 portlet 信息
 編輯 portlet 信息


接下來在本頁中編輯受支持的方式 text/html, 添加 portlet 模式 view,edit, help。如圖 11 所示:


圖 11. 添加 portlet 模式
 添加 portlet 模式


Portlet 模式讓 Portlet 決定它該顯示什么內(nèi)容和執(zhí)行什么動作。調(diào)用一個 Portlet 的時候,Portlet 容器會提供一個 Portlet 模式給那個 Portlet。當在處理一個請求動作時,Portlet 的模式是可以用程序來改變的。

JSR168 規(guī)范定義了三個 Portlet 模式: 瀏覽 (View)、編輯 (Edit) 和幫助 (Help)。Struts2 支持其中的全部三個模式。同時 Portal 還可以根據(jù)使用者的角色,來決定是要提供 ( 顯示 ) 哪幾個 Portlet 模式給使用者操作。在我們的例子中就使用了這三個模式。

繼續(xù)在本頁中添加初始化參數(shù),首先是 Namespace 相關(guān)的參數(shù)見表 1:


表 1. Namespace 相關(guān)的參數(shù)
名稱
viewNamespace /view
editNamespace /edit
helpNamespace /help

考慮到在同一個 Web 應用中需要同名 Action,Struts2 以命名空間方式管理 Action。同一個命名空間里不能有同名的 Action,不同的命名空間里可以有同名的 Action。Struts2 不支持為單獨的 Action 設置命名空間,而是通過為包指定 namespace 屬性來為下面所有的 Action 指定共同的命名空間。這一點可以從下面的 portlet.xml 清單中看出。Struts2 對 portlet 的三種模式的支持是通過 namespace 體現(xiàn)的。View, Edit, Help 三種模式分別對應 ViewNamespace, editNamespace, helpNamespace。

Action 相關(guān)的參數(shù)見表 2:


表 2. Action 相關(guān)的參數(shù)
名稱
defaultViewAction view
defaultEditAction edit
defaultHelpAction help

這些參數(shù)指定了在 portlet 的三種模式下的默認 aciton 名稱,進入 View、Edit、Help 模式分別首先調(diào)用名稱為 view、edit、help 的 action。


圖 12. 編輯 portlet 初始化參數(shù)
 編輯 portlet 初始化參數(shù)


生成 portlet.xml 文件如下:


portlet.xml 描述文件內(nèi)容
                
<?xml version="1.0" encoding="UTF-8"?>
<portlet-app
xmlns="http://java./xml/ns/portlet/portlet-app_1_0.xsd"
version="1.0" xmlns:xsi="http://www./2001/XMLSchema-instance"
xsi:schemaLocation="http://java./xml/ns/portlet/portlet-app_1_0.xsd
http://java./xml/ns/portlet/portlet-app_1_0.xsd"
id="com.ibm.faces.portlet.FacesPortlet.3ccbdcb861">
<portlet>
<portlet-name>Struts2 Test Portlet</portlet-name>
<display-name>Struts2 Test Portlet</display-name>
<portlet-class>
org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher
</portlet-class>
<init-param>
<name>viewNamespace</name>
<value>/view</value>
</init-param>
<init-param>
<name>editNamespace</name>
<value>/edit</value>
</init-param>
<init-param>
<name>helpNamespace</name>
<value>/help</value>
</init-param>
<init-param>
<name>defaultViewAction</name>
<value>view</value>
</init-param>
<init-param>
<name>defaultEditAction</name>
<value>edit</value>
</init-param>
<init-param>
<name>defaultHelpAction</name>
<value>help</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>view</portlet-mode>
<portlet-mode>edit</portlet-mode>
<portlet-mode>help</portlet-mode>
</supports>
<portlet-info>
<title>Struts2 Test Portlet</title>
<short-title>Struts2 Test Portlet</short-title>
<keywords>Struts2 Test Portlet</keywords>
</portlet-info>
</portlet>
</portlet-app>

在本清單中 Portlet 類“org.apache.struts2.portlet.dispatcher.Jsr168Dispatcher”在將 Struts2 集成到 Portlet 中起到了關(guān)鍵作用,該類將 Portlet 操作分發(fā)給 Struts2。





回頁首


編輯 jsp 文件

在 WEB-INF 下新建 jsp 文件夾,并生成幾個 jsp 文件及內(nèi)容如下 :


input.jsp
                
<%@ taglib prefix="s" uri="/struts-tags"%>

<H2>Please sign in</H2>
<s:form action="login" method="POST">
<s:textfield label="User Name" name="username" value="%{username}" />
<s:password label="Password" name="password" value="%{password}" />
<s:submit value="Sign in" />
</s:form>


success.jsp
                
<%@ taglib prefix="s" uri="/struts-tags"%>

<H2>Welcome <s:property value="username" /></H2>
<p /><a href="<s:url action="view"/>">Back to sign in page</a>


fail.jsp
                
<%@ taglib prefix="s" uri="/struts-tags"%>

<H2>Invalid username or password!</H2>
<p /><a href="<s:url action="view"/>">Back to sign in page</a>


edit.jsp
                
<%@ taglib prefix="s" uri="/struts-tags"%>

<H2>This is edit page!</H2>


help.jsp
                
<%@ taglib prefix="s" uri="/struts-tags"%>

<H2>This is help page!</H2>





回頁首


應用 Struts2

建立 Struts2 配置文件 struts.xml

在 src 目錄下建立 struts.xml,工程構(gòu)建之后 struts.xml 會被置于 WEB-INF/classes 下,這也是 Struts2 默認的配置文件路徑。

struts.xml 文件是基于 Struts2 的項目的核心配置文件。在 portlet 開發(fā)過程最重要的內(nèi)容就是要將 "struts-portlet-default.xml" 包含進來,這個 xml 文件存在于前面步驟中我們拷貝過來的 struts2-core-j4-2.0.11.jar 中,只有把它包含進來我們才能使 Struts2 支持 portlet。接下來描述的內(nèi)容就是將前面定義的 action 和頁面關(guān)聯(lián)起來。從中可以看出我們定義的 login 這個 actoin 的輸入界面是 input.jsp,如果成功則會被轉(zhuǎn)向 success.jsp,失敗則會被轉(zhuǎn)向 fail.jsp。


struts.xml
                
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts./dtds/struts-2.0.dtd">
<struts>
<include file="struts-portlet-default.xml" />
<package name="view" extends="struts-portlet-default"
namespace="/view">
<action name="view">
<result>/WEB-INF/jsp/input.jsp</result>
</action>
<action name="login" class="struts2TestPortlet.action.Login">
<result name="input">/WEB-INF/jsp/input.jsp</result>
<result name="success">/WEB-INF/jsp/success.jsp</result>
<result name="fail">/WEB-INF/jsp/fail.jsp</result>
</action>
</package>
<package name="edit" extends="struts-portlet-default"
namespace="/edit">
<action name="edit">
<result>/WEB-INF/jsp/edit.jsp</result>
</action>
</package>
<package name="help" extends="struts-portlet-default"
namespace="/help">
<action name="help">
<result>/WEB-INF/jsp/help.jsp</result>
</action>
</package>
</struts>

新建 java 類 Login.java


Login.java
                
package struts2TestPortlet.action;

public class Login extends ActionSupport {
String username;

String password;

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String execute() throws Exception {
if (username.equals("yanzhid") && password.equals("pwd")) {
return "success";
} else {
return "fail";
}
}
}

同 Struts1 的比較

在實現(xiàn)相同功能的前提下,我們不妨看一下 Struts 1 的相關(guān)實現(xiàn),示例中采用的是 IBM 的 Struts for JSR168 Portlet 實現(xiàn)。

首先,我們必須針對用戶輸入的表單數(shù)據(jù)創(chuàng)建一個 ActionForm,當然,您也可以通過 xml 文件配置的方式創(chuàng)建一個 DynamicForm。


java 類 LoginActionForm.java
                
public class LoginActionForm extends ActionForm {
String username;

String password;

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

public String getUsername() {
return username;

}

public void setUsername(String username) {
this.username = username;
}

public void reset(ActionMapping mapping, HttpServletRequest request) {

username = null;
password = null;

}

public ActionErrors validate(ActionMapping mapping,
HttpServletRequest request) {

ActionErrors errors = new ActionErrors();
return errors;
}
}

接下來,我們需要實現(xiàn)一個 Action 類。


java 類 LoginAction.java
                
public class LoginAction extends com.ibm.portal.struts.action.StrutsAction {
public ActionForward execute(ActionMapping mapping, ActionForm form,
PortletRequest request, PortletResponse response) throws Exception {
|-------10--------20--------30--------40--------50--------60--------70--------80--------9|
|-------- XML error: The previous line is longer than the max of 90 characters ---------|
LoginActionForm loginActionForm = (LoginActionForm) form;
String username = loginActionForm.getUsername();
String password = loginActionForm.getPassword();
if (username.equals("yanzhid") && password.equals("pwd")) {
StrutsViewCommand.addAttributeNameToSave("username");
request.setAttribute("username", username);
return mapping.findForward("success");
} else {
return mapping.findForward("fail");
}
}
}

在 Struts1 中,我們習慣使用 JSTL 從 request 作用域中取得數(shù)據(jù),呈現(xiàn)到 JSP 頁面上,success.jsp 頁面被改動如下:


success.jsp
                
<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib uri="http://java./portlet" prefix="portlet"%>
<%@taglib uri="http://java./jstl/core" prefix="c"%>
<portlet:defineObjects />
<H2>Welcome <c:out value="${username}"/></H2>

由于精通 Struts1 的讀者很多,其余相關(guān)改動和 struts1 的配置我們不再拗述,請讀者查閱相關(guān)文獻。

從中我們可以看出 struts2 和 struts1 的區(qū)別,并從中體會到 Struts2 的優(yōu)勢:

  1. 捕獲輸入:
    Struts1 使用 ActionForm 對象捕獲輸入。所有的 ActionForm 必須繼承一個基類。因為其他 JavaBean 不能用作 ActionForm,開發(fā)者經(jīng)常創(chuàng)建多余的類捕獲輸入。當然您也可以使用 xml 文件描述一個 DynamicForm,但工作量并未顯著減少。
    Struts 2 可以直接使用 Action 屬性作為輸入屬性,消除了對第二個輸入對象的需求。當然,Struts2 也支持 ActionForm 模式,用作輸入 / 輸出對象。
  2. Action 類 :
    Struts1 要求 Action 類繼承一個抽象基類。Struts1 的一個普遍問題是使用抽象類編程而不是接口。
    Struts2 Action 類可以實現(xiàn)一個 Action 接口,也可實現(xiàn)其他接口。Struts2 提供一個 ActionSupport 基類去實現(xiàn)常用的接口,但 Action 接口不是必須的,任何有 execute 標識的 POJO 對象都可以用作 Struts2 的 Action 對象。
  3. Portlet 依賴 :
    Struts1 Action 依賴于 Portlet API , 當一個 Action 被調(diào)用時,PorletRequest 和 PortletResponse 被傳遞給 execute 方法。
    Struts2 Action 不依賴于容器,允許 Action 脫離容器單獨被測試。如果需要,Struts2 Action 仍然可以訪問初始的 request 和 response。但是,其他的元素減少或者消除了直接訪問 PorletRequest 和 PortletResponse 的必要性。
  4. 可測性 :
    測試 Struts1 Action 的一個主要問題是 execute 方法暴露了 Portlet API,這使得測試要依賴于容器。
    Struts2 Action 可以通過初始化、設置屬性、調(diào)用方法來測試,使測試更容易。
  5. 對 Portlet 的支持程度:
    Struts1 框架天生并不支持 Portlet, 為了將大批 Struts 程序員吸引到 WebSphere Portal 開發(fā)上來,IBM 公司針對自己的兩種 Portlet 實現(xiàn)(IBM Portlet 和 JSR168 Portlet), 分別對 Struts 框架進行了擴展,以適應 Portlet 開發(fā)。細心的讀者一定已經(jīng)發(fā)現(xiàn)了,我們的 LoginAction 類繼承的是 com.ibm.portal.struts.action.StrutsAction 這個基類,而不是 Struts1 官方框架中的 Action 類。
    Struts1 程序員剛剛進行 Portlet 開發(fā)的時候,一般會忽略一個重要的問題。與 servlet 的生命周期有所不同,portlet 存在操作響應 (Action) 階段和呈現(xiàn)(Render)階段。 在 portlet 操作響應階段存放在 request 作用域的數(shù)據(jù),在呈現(xiàn)階段就會失效。為了解決這個問題,一個方案就是把數(shù)據(jù)放在 session 作用域中,考慮到服務器性能的原因,這個方案顯然不被推薦。另一個方案就是使用 IBM 提供的一些特殊的 API, 按照 LoginAction 那樣,在將數(shù)據(jù)放在 request 作用域之前,將數(shù)據(jù)變量名作為參數(shù)傳給 StrutsViewCommand 的 addAttributeNameToSave 方法。為了說明這個問題,我們可以將 StrutsViewCommand.addAttributeNameToSave("username") 這行代碼刪掉,程序運行候就可以發(fā)現(xiàn),success.jsp 將不會呈現(xiàn) username 變量中保存的數(shù)據(jù)。
    Struts2 的官方框架支持 JSR168 Portlet, 除了前期需要對 web.xml、portlet.xml 和 struts.xml 文件進行少許特殊配置外,程序員不需要考慮 Portlet 和 Servlet 之間的不同,無論是 Action 類的開發(fā)還是 JSP 頁面中 Struts2 標簽的應用,同在 Servlet 容器中用法是完全一樣的。

Struts2 的驗證功能

采用 Struts2 的校驗框架時,只需為該 Action 指定一個校驗文件即可。該文件指定了 Action 的屬性必須滿足怎樣的規(guī)則,下面清單即本應用中 Action 的校驗文件的代碼。Struts2 的校驗文件規(guī)則與 Struts1 的校驗文件設計方式不同,Struts2 中每個 Action 都可以有一個校驗文件,該文件的文件名遵守如下規(guī)則:

<Action 名字 >-validation.xml

前面的 Action 名是可以改變的,后面的 -validation.xml 部分是固定不變的,且該文件應該被保存于 Action class 文件相同的路徑下。如在本例中此校驗文件在項目構(gòu)建后保存在 WEB-INF/classes/Struts2TestPortlet/action/ 下,與 login.class 在同一目錄中。


Login-validation.xml
                
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www./xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name="username">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Please input username!</message>
</field-validator>
</field>
<field name="password">
<field-validator type="requiredstring">
<param name="trim">true</param>
<message>Please input password!</message>
</field-validator>
</field>
</validators>





回頁首


部署 Portlet 應用程序

首先在 RAD7 控制臺的服務器視圖中添加一個可以運行 Portlet 的服務器。該視圖中單擊鼠標右鍵,選擇新建—> 服務器。如圖 13 所示 :


圖 13. 新建服務器
 新建服務器


在彈出的新建服務器窗口中選擇目標運行服務器,在本例中我們選擇 WebSphere Portal V5.1 測試環(huán)境 , 對話框底部的服務器運行時呈現(xiàn)為 WebSphere Portal V5.1。在服務器主機名中輸入 localhost,如圖 14 所示。點擊下一步,默認端口號為 9081。


圖 14. 選擇目標運行服務器
 選擇目標運行服務器


繼續(xù)點擊下一步,出現(xiàn)門戶網(wǎng)站服務器設置對話框,在這里需要將默認的管理員用戶及密碼設置成您在安裝相應 Portal server 時設置的管理員用戶及密碼。如圖 15 所示:


圖 15. 門戶網(wǎng)站服務器設置
 門戶網(wǎng)站服務器設置


點擊下一步,進入添加項目界面,將 " 可用的項目 " 一欄中的 Portlet 項目添加到右側(cè) " 已配置項目 " 欄中。點擊完成,于是我們就完成了這個 Portlet 項目在 RAD7 中的配置和部署。如圖 16 所示:


圖 16. 添加 portlet 項目
 添加 portlet 項目


在啟動服務器之前,需要右鍵點擊服務器標簽頁中的已添加的服務器,選擇 " 打開 ",然后進入 " 門戶網(wǎng)站 " 標簽頁,檢查確認管理員用戶和密碼已經(jīng)被設置成安裝 Portal server 時設置的管理員用戶,如圖 17 所示。以確保 Portal server 啟動成功。


圖 17. 檢查確認管理員用戶和密碼設置
 檢查確認管理員用戶和密碼設置


接下來,右鍵點擊服務器標簽頁中已添加的服務器,選擇 " 啟動 ",服務器被啟動。您可以從控制臺中觀察啟動過程輸出的日志。


圖 18. 啟動服務器
 啟動服務器




回頁首


訪問 Portlet 應用

打開瀏覽器網(wǎng)頁輸入:http://localhost:9081/wps/myportal, 輸入管理員用戶和密碼,進入 Portal。程序轉(zhuǎn)入 portlet view 模式的登錄界面。如圖 19 所示:


圖 19. 登錄界面
 登錄界面


該 portlet 中用戶需要輸入自己的用戶名和密碼,本例中用戶名和密碼分別為 yanzhid 和 pwd,輸入后點擊 sign in 后進入成功頁面,如圖 20 所示:


圖 20. 登錄成功界面
 登錄成功界面


如果用戶未輸入合法的用戶名和密碼,程序?qū)⑻D(zhuǎn)到登錄失敗頁面。如圖 21 所示:


圖 21. 登錄失敗界面
 登錄失敗界面


通過點擊 edit 按鈕,potrlet 進入 edit 模式,如圖 22 所示:


圖 22.edit 模式
edit 模式


通過點擊 help 按鈕,potrlet 調(diào)用 help 模式,彈出 help 窗口,如圖 23 所示:


圖 23.help 模式
help 模式


為了使用本例中的 Struts2 的校驗功能,返回到登錄頁面,重新登錄。登錄時不輸入任何用戶名和密碼,直接點擊 "Sign in" 按鈕,您會看到用戶名和密碼文本框上方出現(xiàn) "Please input username!" 和 "Please input password!" 字樣,則說明本例中的校驗功能正確執(zhí)行了。如圖 24 所示:


圖 24.Struts2 的校驗功能
Struts2 的校驗功能






回頁首


結(jié)束語

本文討論了如何使用 Struts2 在 IBM WebSphere Portal 上來開發(fā)和部署一個 Portlet 應用,按照本文講述的步驟操作,就可以在 WebShere Portal 上建立一個比較完整的 Portlet 應用了。


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    韩国激情野战视频在线播放| 九九久久精品久久久精品| 九九热国产这里只有精品| 亚洲精品福利视频在线观看| 九九热这里有精品20| 亚洲一区二区欧美激情| 亚洲精品一区三区三区| 老熟女露脸一二三四区| 国产精品香蕉一级免费| 亚洲午夜av一区二区| 欧美亚洲91在线视频| 欧美日韩国产另类一区二区 | 亚洲一区二区三区日韩91| 日本丁香婷婷欧美激情| 伊人网免费在线观看高清版| 一区二区不卡免费观看免费| 欧洲精品一区二区三区四区| 国产91人妻精品一区二区三区| 国产精品色热综合在线| 亚洲欧美日本视频一区二区| 国产二级一级内射视频播放| 麻豆精品在线一区二区三区| 91精品国产综合久久精品 | 天堂网中文字幕在线观看| 亚洲中文字幕人妻av| 在线精品首页中文字幕亚洲| 免费啪视频免费欧美亚洲| 麻豆视频传媒入口在线看| 国产目拍亚洲精品区一区| 精品久久久一区二区三| 欧美字幕一区二区三区| 国产一区二区三区成人精品| 欧美不雅视频午夜福利| 久久99这里只精品热在线| 男生和女生哪个更好色| 亚洲精品国产第一区二区多人| 欧美一级内射一色桃子| 国产成人精品午夜福利| 欧美日韩综合在线第一页 | 中文字幕高清不卡一区| 国产熟女高清一区二区|