简介
IBM WebSphere® sMash 基于 Project Zero,是一个适宜多种开发言语的开发和运转时环境,它支持 Web 2.0、PHP、基于 Java™ 的使用顺序,以及 LDAP 和 DB2® 数据库。
运用 WebSphere sMash,能够降低开发时间并简化基于 Web 的使用顺序的创立。本文引见 WebSphere sMash 服务器上的一些 App Builder 函数。
场景
为展现 WebSphere sMash 的威力,本文将运用一个在线图书馆系统模拟。这个模拟中的功用比拟根本,比如验证和图书挑选。要检查本文运用的样例代码,请参见 下载 局部。
创立模拟
要运转这个模拟,须要一些根本装置顺序。
下载 IBM WebSphere sMash 服务器,遵照针对您的系统的装置标明举行装置。
装置完毕后,在根目录的命令提示中输进 appbuilder open 。 这个命令将在阅读器中翻开一个新的选项卡(或窗口)。
继续下一步之前,必需创立一个使用顺序。
挑选 Create a new application。
输进使用顺序称号 onlineLibrarySimulation(或许您挑选的其他称号)和根目录(与您的装置目录不一样)。
单击 Create。显示的清单类似于图 1。
图 1. App Builder - Create new application
[] 检查原图(大图)
单击使用顺序称号转到该使用顺序视图,如图 2 所示。
图 2. App Builder - Application view
![sMashing 您的利用顺序...... Ajax 措施:运用 PHP 在 WebSphere sMash Developer's Edition 上开发利用顺序[多图]图片2](/Files/BeyondPic/2010-6/5/10652350371243.jpeg)
检查原图(大图)
单击 New File 并挑选 Html in /public/。在指定文件名的文本区域中输进 /public/login.html 并单击 Create。
另一个窗口翻开,讯问一个缺失的依托项,如图 3 所示。
图 3. App Builder - Missing Dependency
![sMashing 您的利用顺序...... Ajax 措施:运用 PHP 在 WebSphere sMash Developer's Edition 上开发利用顺序[多图]图片3](/Files/BeyondPic/2010-6/5/106523503768357.jpeg)
单击 Add 继续。sMash 将自动挑选须要的依托项。
导航到 Design 选项卡并检验工具调整色调板。能够运用这个调整色调板来创立表单元素。
挑选表单元素并将其拖放到窗口中。右键单击表单元素并编辑属性。确保举措为 login_1.php 且办法为 POST。
如今能够添加其他表单元素,比如文本框、标签和按钮。您的 login.html 应该类似于图 4。
图 4. 登录页面
[] login.html 页面就绪后,下面能够转向实践业务逻辑,即背后的 PHP 脚本编写。本文假定这个在线图书馆模拟只对 IBM 员工开放(比如,在内联网上)。一切有效员工都能在提供他们的公司凭证后访问并登录这个站点,因而不须要一个 Edit User Profile 页面。用户依据 LDAP 接受验证。
留意:能够实验不一样的验证方式,比如议决 mysql 或 DB2®。另外,假设您情愿创立一个 Edit User Profile 页面,也可以够尝试一下,将其当做另一个练习。
要验证用户,须要创立一个拥有验证登录的 PHP 文件。
单击 New File 并挑选 Other File in /public。输进文件名 /public/functions.php。
类似于 login.html,sMash 将显示一个窗口以便添加缺失的 PHP 依托项。单击 Add 继续。
如今能够开端为验证编写业务逻辑了。
身份验证
本文假定您熟识 LDAP 观点,解释 LDAP 超出了本文的范围。
LDAP 身份验证是一个特定于服务器的流程,触及两个步骤。第一步触及获取员工的 Distinguished Name,或 DN(类似于主键观点,DN 是员工代码)。运用 username 作为搜索过滤器查询 LDAP 服务器。这是一个双层验证:它既能够前往现有用户的 DN,也可以够用于验证员工的正当性。
第二步是运用取回的 DN 来与 LDAP 服务器绑定。绑定到 LDAP 触及运用用户提供的密码和获取的 DN 来实践验证用户身份。这个查询的后果将确定用户能不能提供了正确的密码。清单 1 中的样例代码将这个流程瓜分为两局部:一个办法获取 DN,另一个办法实践绑定到 LDAP 服务器。
[] 清单 1. 获取 DN 的函数 getDN($email)
functiongetDN($email)
{
//Connecting to predefined LDAP Server
$ldapconn=ldap_connect(‘ldap://yourldapserver.com','portNumber');
// 'Get 'just 'the 'DN 'attribute 'from 'LDAP instead of the entire result set
$filter_array=array("dn");
' //Search ' LDAP 'server 'by 'using the e-mail 'of 'the 'user
' $ldap_search=ldap_search($ldapconn,BASE_DN,"email=".$email,$filter_array);
' //Get 'the 'DN
$info=ldap_get_entries($ldapconn, '$ldap_search);
//If the count is more than zero, return the DN, else return ‘'
if($info[0]['dn']!='')
return ' '$info[0]['dn'];
else
return'';
} 清单 1 中的办法将衔接并查询 LDAP 服务器,获取用户的 DN。清单 2 中的代码展真实践验证流程。
清单 2. validateuser($email,$passWord) 函数
functionvalidateUser($email, '$password)
{
// Connect to predefined LDAP Server
$ldapconn=ldap_connect(‘ldap://yourldapserver.com','portNumber');
// Verify if user input is valid
' if((trim($email)!="") '&& '(trim($password)!=""))
' ' '{
// Fetch the DN
$dn=getDN($email);
// If the DN is blank, user doesn't exist else user is valid
if($dn=="")
return 'false;
else
' ' ' ' ' ' ' '{
// Bind to the LDAP Server with obtained DN and user-provided password
' ' ' ' ' ' ' ' ' '$ldapbind '= '@ldap_bind($ldapconn, '$dn, '$password);
// Close the connection
ldap_close($ldapconn);
//If bind is false – user is not validated
if($ldapbind)
return 'true ' ' ' ' ';
else
return 'false;
' ' ' ' ' ' ' '}
'}
}[] 以上就是身份验证逻辑。用户议决验证后,一些用户详细(比如姓名)将被添加到 PHP 会话中,用户将被重定向到 index.php。假设身份验证失败,用户将被发回到 login.html。
清单 3 显示了 login_1.php 文件。
清单 3. login_1.php
<?php
include_once'functions.php';
session_start();
extract($_POST);
$bool='';
// Validate the User.
$bool=validateUser($textUserName,$textPassWord);
// If the user has been authenticated, get the user's callupname else redirect
if($bool)
{
$_SESSION['userInfo']['userName']=fetchInfo($textUserName);
' header('Location:index.php');
}
else
header('Location:login.html');
?>创立函数
身份验证机制就绪后,如今能够为这个示例在线图书馆系统创立一些功用。您将创立一个页面,依据类别显示图书馆中的图书。这个示例运用 MySQL 作为后端数据库来存储类别和图书信息。要在 sMash 服务器中启用 MySQL,须要编辑 ivy.XML 文件,添加一个 MySQL 条目。您将添加清单 4 中的内容。
[] 清单 4. 编辑 ivy.xml
<dependency name="mysql-connector-java" org="mysql" rev="5.1+"/> 能够在 <dependency> 标志中的任何位置添加这行内容。要将 MySQL 用作一个资源,您将创立一个全局衔接,这个衔接将被几种办法运用,获取对 MySQL 数据库的访问。检验清单 5 中显示的这个文件,它恰本地命名为 mysql.php。您须要在这个文件中填充适当的信息,以便创立一个成功的衔接。
清单 5. mysql.php —— 创立全局衔接
<?
$link = mysql_connect('localhost','mysqlUser','mysqlPassword');
if(!$link)
{
echo '<br> Failed to connect to MySQL!';
}
$db_selected = mysql_select_db('chosenDB',$link);
?> 要参考表构造,请在 下载 局部检查本文包含的 zip 文件。
您须要在 index.php 中显示这个在线图书馆系统可用的图书的类别列表。要显示这个列表,能够创立一个办法来前往数据库中的一切类别。能够在 下载 文件中检查这个函数的实践代码。index.php 如今应该类似于图 5 所示。
图 5. 显示图书类别的 Index.php
![sMashing 您的利用顺序...... Ajax 措施:运用 PHP 在 WebSphere sMash Developer's Edition 上开发利用顺序[多图]图片5](/Files/BeyondPic/2010-6/5/106523503777573.jpeg)
[] 检查原图(大图)
某个特定类别中的一本图书能够有 3 中形态:已分配给一个用户,已被一个用户预订,或许闲置。假设一本图书已分配给用户或已被用户预订,当用户单击图书称号时,将显示该信息。假设图书曾经发送给用户,那么将显示该图书可供借阅之前的剩余时间。这种校验和验证将运用 Ajax 完成。假设图书可用,那么用户能够挑选它,然后在稍后实践借阅。
每个类别都是一个链接,议决一个 JavaScript 办法完成,如清单 6 所示。这个 JavaScript 办法 showBooks() 接纳一个参数 category Id。这个参数的传递必需在创立类别表时在 index.php 中完成。
showBooks 办法创立了一个 XMLHttpRequest 对象。这个办法运用 XMLHttpRequest 对象与服务器对话,传递并接纳数据。然后,该办法将控制权和数据(category Id)传递到另一个 PHP 文件。这个 PHP 页面将运用提供的有关输进(category Id)实践查询 MySQL 数据库。这个 PHP 页面还将兼并数据并将其重定向回到 showBooks() 办法。
showBooks() 办法将接纳数据并将数据显示在一个(通常)事先定义的 <div> 元素中。这就是数据显示在 Web 阅读器中的流程。清单 6 中的代码段展现了一个示例。这段代码运用了另一个办法 GetXmlHttpObject(),该办法前往 XMLHttpRequest 对象。
清单 6. Ajax 函数 —— 显示图书
functionshowBooks(category)
{
' ' ' ' ' 'globalCat '= 'category;
// Get the XMLHttpRequest object
' ' ' ' ' 'xmlHttp=GetXmlHttpObject();
if(!xmlHttp)
alert('Your 'browser 'does 'not 'support 'AJAX');
// The JavaScript method passes control to another PHP .
// This PHP will query the db and consolidate the data
var 'url="getlist.php";
' ' ' ' ' 'url=url+"?value="+category+"&key=getBooks";
/* This is where we tell Ajax to pass control to the PHP file along with
parameters. When the control comes back to Ajax, the showBooksChanged
method will be called. This method will display the data on the browser.*/
xmlHttp.onreadystatechange=showBooksChanged;
' ' ' ' ' 'xmlHttp.open("GET",url,true);
' ' ' ' ' 'xmlHttp.send(null);
}
functionshowBooksChanged()
{
// Once the request is completed we will check the response
if(xmlHttp.readyState == 4)
' ' ' '{
if(xmlHttp.responseText=="")
' ' ' ' ' ' ' '{
// Accessing the predefined div. globalCat contains the categoryId
// Since the response from the server is null, the div is blank.
' ' ' ' ' ' ' ' ' ' ' 'document.getElementById("div"+globalCat).style.display '="none";
' ' ' ' ' ' ' '}
else
' ' ' ' ' ' ' '{
var 'responseText= 'xmlHttp.responseText.replace(/^\s*\s*$/g,'');
// Since the server has responded, we have to display the data
' ' ' ' ' ' ' ' ' ' ' 'document.getElementById
("div"+globalCat).style.display '="block";
' ' ' ' ' ' ' ' ' ' ' 'document.getElementById
("div"+globalCat).innerHTML '= 'responseText;
' ' ' ' ' ' ' '}
' ' ' '}
} [] 图 6 中展现的 3 个屏幕演示了如何运用 Ajax 生成基于类别的图书列表。
图 6. 基于类别的图书列表
![sMashing 您的利用顺序...... Ajax 措施:运用 PHP 在 WebSphere sMash Developer's Edition 上开发利用顺序[多图]图片6](/Files/BeyondPic/2010-6/5/106523503733717.jpeg)
检查原图(大图)
![sMashing 您的利用顺序...... Ajax 措施:运用 PHP 在 WebSphere sMash Developer's Edition 上开发利用顺序[多图]图片7](/Files/BeyondPic/2010-6/5/106523503774488.jpeg)
检查原图(大图)
![sMashing 您的利用顺序...... Ajax 措施:运用 PHP 在 WebSphere sMash Developer's Edition 上开发利用顺序[多图]图片8](/Files/BeyondPic/2010-6/5/106523503852759.jpeg)
检查原图(大图)
显示形态
如今,您能够编写代码来显示用户挑选的每本图书的形态。Ajax 将是底层技术,就像在生成基于类别的图书中一样。用于获取图书形态的业务逻辑触及创立一个新办法,该办法接纳一个参数 book Id。
javascript 办法 showBookStatus() 创立一个 XMLHttpRequest 对象,类似于上一个例子。控制权被发送到另一个 PHP 页面,这个页面依据提供的 book Id 查询 MySQL 表,获取图书的形态。假设该图书曾经发送到用户,这个示例将显示图书可供借阅之前的天数。假设图书可用,这个示例将提供一些函数来标志选中的图书。清单 7 中的代码与清单 6 中展现的示例十分类似,二者的首要区别是创立的查询。用户单击图书称号时将触发 showBookStatus 办法。
[] 清单 7. Ajax 函数 —— 显示图书形态
functionshowBookStatus(bookId)
{
' ' ' ' ' 'globalBk '= 'bookId;
//Creating the XMLHttpRequest object
' ' ' ' ' 'xmlHttp=GetXmlHttpObject();
if(!xmlHttp)
alert('Your 'browser 'does 'not 'support 'AJAX');
// Passing the control to another PHP that will query the database and redirect
var 'url="getlist.php";
' ' ' ' ' 'url=url+"?value="+bookId+"&key=getBookStatus";
' ' ' ' ' 'xmlHttp.onreadystatechange=showBookStatusChanged;
' ' ' ' ' 'xmlHttp.open("GET",url,true);
' ' ' ' ' 'xmlHttp.send(null);
}
// This method will display the status in a predefined <div> element in the table
functionshowBookStatusChanged()
{
if(xmlHttp.readyState==4)
' ' ' '{
if(xmlHttp.responseText=="")
' ' ' ' ' ' ' '{
' ' ' ' ' ' ' ' ' ' ' 'document.getElementById("divbk"+globalBk).style.display '="Block";
' ' ' ' ' ' ' '}
else
' ' ' ' ' ' ' '{
var 'responseText= 'xmlHttp.responseText.replace(/^\s*\s*$/g,'');
' ' ' ' ' ' ' ' ' ' ' 'document.getElementById
("divbk"+globalBk).style.display '="block";
' ' ' ' ' ' ' ' ' ' ' 'document.getElementById
("divbk"+globalBk).innerHTML '= 'responseText;
' ' ' ' ' ' ' '}
' ' ' '}
} [] 图 7 展现了不带形态的图书列表显示。
图 7. 不带形态的图书列表
![sMashing 您的利用顺序...... Ajax 措施:运用 PHP 在 WebSphere sMash Developer's Edition 上开发利用顺序[多图]图片9](/Files/BeyondPic/2010-6/5/106523503870437.jpeg)
检查原图(大图)
图 8 展现了带有形态的图书列表。
图 8. 带有形态的图书列表
![sMashing 您的利用顺序...... Ajax 措施:运用 PHP 在 WebSphere sMash Developer's Edition 上开发利用顺序[多图]图片10](/Files/BeyondPic/2010-6/5/106523503890554.jpeg)
检查原图(大图)
假设用户想挑选一本闲置形态的图书,有一个函数能够用来预订该图书;尚有一个办法可用来预订一切可用图书。JavaScript 办法 bookABook 接纳参数 book Id。依据 Ajax 的原理,您将控制权传递到另一个 PHP 页面,该页面将更新 MySQL 表并将该书的形态标志为 “assigned”。图 9 显示了用户单击 Book it! 链接时出现的劝诫框。
图 9. 预订图书音讯
![sMashing 您的利用顺序...... Ajax 措施:运用 PHP 在 WebSphere sMash Developer's Edition 上开发利用顺序[多图]图片11](/Files/BeyondPic/2010-6/5/106523503833464.jpeg)
检查原图(大图)
运转使用顺序
剩下的任务就是运转这个使用顺序。
在使用顺序视图上挑选 Start(图 2 中右边)。
在阅读器中翻开以下链接:http://[your-server]:8080/login.html
或许,使用顺序启动后,一个链接将出如今 Stop 按钮旁边。单击该链接,这个页面将自动把您带到 login.html 文件。
[] 完毕语
IBM WebSphere sMash 和基于 Web 的 App Builder 是您的调整色调板的强悍工具,它们准许您议决最小的全力创立满足自己要求的基于 Web 的使用顺序,同时获得最大的灵敏性。本文只是 sMash 服务器众多功用的一个简述,建议您深化探求功用丰厚的 sMash、PHP、LDAP、MySQL 和 Ajax 环境。
本文向您展现了如何:
为 Web2.0 开发装置 IBM WebSphere sMash 环境。
创立一个 PHP-LDAP 衔接并依据 LDAP 验证用户身份。
创立一个容易的在线图书馆系统的 Ajax 模拟。
您能够将本文作为一个始点,议决运用几种幽默的工具(比如 Zero Resource Model 和 REST 服务)来扩展您的 Ajax 使用。Project Zero 提供了一些有意义的 sMash 服务器样例和文档。
本文示例源代码或素材下载
读库教程网文章由网络收集后整理发布,文章发布人拥有该内容的所有权力及责任!
如果你喜欢这页,可以按Ctrl+D收藏起来。







