在ColdFusion和J2EE之间共享数据
副标题#e#
在已往,ColdFusion和WebSphere并不是被看好的一对组合。 可是,跟着ColdFusion MX的呈现,这个状况变了。本文将向开拓者先容如何把他们的ColdFusion代码设置进WebSphere Application Server J2EE情况。
先容
ColdFusion标注语言( CFML)是一门很容易学的剧本语言。基于ColdFusion标志的措施设计模子思量到快速网络开拓的需要,而且这个模子固有的简明性使得Internet应用措施开拓对付宽大开拓者都成为大概。
在本文中,我们将先容用于IBM WebSphere Application Server(简称Application Server)的Macromedia ColdFusion MX可以在ColdFusion和J2EE组件之间共享会话变量。我们将先容如何使这两个强大的产物成为最佳的组合。
本文将报告如何设置ColdFusion MX,和Application Server共享会话数据。
利用ColdFusion MX打点员界面使其可以或许利用会话内存变量
在开始之前,请担保用于IBM WebSphere Application Server的ColdFusion MX正在运行。
1. 登录到ColdFusion MX打点员界面,可利用下面的几种要领中的一种:
o 选择 开始>措施> Macromedia ColdFusion MX J2EE > ColdFusion MX Administrator,可能
o 打开一个欣赏器,输入
http://<server:port>/<cfmx_contextroot>/CFIDE/administrator/index.cfm
o 譬喻, http://localhost/cfmx/CFIDE/administrator/index.cfm
2. 从ColdFusion MX打点员界面中,从主菜单的处事器配置中选择内存变量(Memory Variables),如图1所示:
图1:从处事器配置中选择内存变量
3. 在下一个面板中,担保Use J2EE session variables(利用J2EE会话变量)和Enable Session Variables(答允利用会话变量)这两个选项被选中,如图⒉所示。点击Submit Changes(提交变动)来应用所做出的变动。
图2答允利用J2EE会话变量
4. 从头启动用于IBM WebSphere Application Server的ColdFusion MX。
恭喜你,你已经乐成的答允利用J2EE会话打点。
#p#副标题#e#
应用措施开拓
在本节,我们将进入两个"登录"示例应用措施。 第一个应用措施,名为CFMXSESSIONA,将先容一个Java开拓者如何利用在ColdFusion中建设的会话工具。第二个,名为CFMXSESSIONB,将先容一个ColdFusion开拓者如何利用在Java中建设的会话工具。
答允利用用于ColdFusion MX应用措施的会话打点
在CFMXSESSIONA中,ColdFusion需要建设和打点会话工具。ColdFusion利用一个<cfapplication>标志,这个标志在名为Application.cfm的文件中(在CFMX根目次下的网络应用措施的根目次中),来界说了应用措施的配置,如图3所示。
图3网络应用措施根目次中的APPLICATION.CFM文件
NAME属性界说了ColdFusion MX应用措施名,如下面列表1所示。 这是一个利用会话变量所需的属性。
列表1CFAPPLICATION的NAME属性
<cfapplication name="CFMXSESSIONA" clientmanagement="no" sessionmanagement="yes" sessiontimeout="#createtimespan(0,0,15,0)#">
接下来,我们通过配置sessionmanagement属性为YES,答允在你的ColdFusion MX应用措施里利用会话变量,如列表2所示。
目次2答允利用ColdFusion MX应用措施的会话打点
<cfapplication name="CFMXSESSIONA" clientmanagement="no" sessionmanagement="yes" sessiontimeout="#createtimespan(0,0,15,0)#">
选择性地,就象我们在示例应用措施中所做的一样,你大概包围界说在ColdFusion打点界面中的默认会话超时时距离断,通过明晰地指定sessiontimeout期望的时距离断(见列表2)。 我们利用ColdFusion函数createtimespan,以(Days,Hours,Minutes,Seconds)这样的名目建设期望的时距离断。
建设会话工具
本节向ColdFusion开拓者和J2EE开拓者先容建设会话的须要的步调,这些会话工具很容易在这两种技能之间共享,这取决于哪种技能将认真会话打点。
在ColdFusion MX中建设会话
首先,在一个称为LoginAction.cfm的ColdFusion页面中,我们界说了作为一个ColdFusion struct荟萃工具的会话,存储一组属性,如列表3所示。
目次3建设一个会话布局生存属性
<!--- Create Session Structure --->
<cfset SESSION = StructNew()>
<!-- Define Variables within the Session Structure -->
<cfset SESSION.SESSIONCREATEDBY = "ColdFusion">
<cfset SESSION.ISAUTHENTICATED = "Y">
<cfset SESSION.USERID = selectUser.userid>
<cfset SESSION.USERNAME = selectUser.username>
<cfset SESSION.ROLE = selectUser.role>
接下来,我们添加象userid这样的属性到新界说的session荟萃中,如列表4所示。
目次4在session布局中建设属性
#p#分页标题#e#
<!--- Create Session Structure --->
<cfset SESSION = StructNew()>
<!-- Define Variables within the Session Structure -->
<cfset SESSION.SESSIONCREATEDBY = "ColdFusion">
<cfset SESSION.ISAUTHENTICATED = "Y">
<cfset SESSION.USERID = selectUser.userid>
<cfset SESSION.USERNAME = selectUser.username>
<cfset SESSION.ROLE = selectUser.role>
在Java中建设会话
此刻我们将做我们在前面部门所做的事情,可是这次是从一个J2EE开拓者的角度。 为了在可以或许很容易翻译到ColdFusion的Java中建设会话工具,我们把属性放入一个名为LoginAction.jsp的文件的java.util.Map布局中,如列表5所示。
列表5、在一个java.util.map布局中建设属性
// Define Variables within a java.util.Mapmap.put("SESSIONCREATEDBY","JAVA");
map.put("ISAUTHENTICATED","Y");
map.put("USERID",Integet.toString(resultSet.getInt("USERID")));
map.put("USERNAME",resultSet.getString("USERNAME"));
map.put("ROLE",Integer.toString(resultSet.getInt("ROLE")));
我们把Map工具作为CFMXSESSIONB存储进会话,如列表6所示。
列表6 把java.util.map布局存储进会话
// Store the Map in the HttpSessionsession.setAttribute("CFMXSESSIONB",map);
会话变量数据范例翻译
用于Application Server的ColdFusion MX让J2EE开拓者和ColdFusion在这两个技能之间彼此映射数据范例,这样致使信息互换很是容易。 表1显示公用数据范例的样例。 想获得具体信息,请参阅Macromedia ColdFusion MX技能资料。
表1. ColdFusion和Java之间的数据范例映射
ColdFusion 数据范例 Java数据范例
ARRAY java.util.Vector
DATE java.util.Date
NUMBER java.lang.Double (默认)
RECORDSET java.sql.ResultSet
STRING java.lang.String
STRUCT java.util.Map
会见会话变量
既然我们在Java和ColdFusion这两种技能中建设了会话工具,我们想利用一种"异花授粉"范例要领论共享会话内容。 通过共享包括在会话中的数据工具,这两个技能之间无缝的交互浸染让技能纯熟的ColdFusion和J2EE开拓者可以利用单一的整合的办理方案事情。
在Java中会见ColdFusion MX建设的会话工具
在"在ColdFusion MX中建设会话"这节, 我们界说了一个ColdFusion struct荟萃工具来存储我们的属性。 在Java中,你大概把ColdFusion struct工具表明为一个java.util.Map(见表1)。 因此,Map是我们将利用来存取会话布局内容的数据范例。
ColdFusion注册session布局为界说在<CFAPPLICATION>标志中的name属性值(见列表1)。 因此,我们可以在一个Java页面中会见ColdFusion建设的会话工具,在我们的例子DisplaySession.jsp中,通过挪用尺度getAttribute要领,把返回工具强制转化为一个java.util.Map,如列表7所示。
列表7取得CFMX会话工具并把它强制转化为一个java.util.Map
//// Get the CFMX Created Session Object
//// The CF Session is automatically named as the CFAPPLICATION's
/// NAME attribute value
////
map = (java.util.Map) session.getAttribute("CFMXSESSIONA");
因为会话内容被作为一个java.util.Map布局被生存,我们可以挪用尺度get要领来会见它的值,如列表8所示。
列表8 利用get要了解见值
<%-- Display session variables --%>
<tr>
<td align="right" class="label" width="250">USERID</td>
<td width="300"><%= map.get("USERID") %></td>
</tr>
<tr>
<td align="right" class="label">USERNAME</td>
<td><%= map.get("USERNAME")%></td>
</tr><tr>
<td align="right" class="label">ROLE:</td>
<td><%= map.get("ROLE")%></td>
</tr><tr>
<td align="right" class="label">SESSION CREATED IN:</td>
<td><b><%= map.get("SESSIONCREATEDBY")%></b></td>
</tr>
在ColdFusion MX中会见Java建设的会话工具
既然我们已经从ColdFusion MX共享数据到Java,让我们从相反的偏历来思量这个问题。 在本节,我们将在一个名为DisplaySession.cfm的ColdFusion页面中会见Java建设的会话工具。 ColdFusion开拓者可以通过利用createObject函数在一个ColdFusion页面内建设" Java "工具。 我们将需要建设三个Java工具,如列表9所示。
列表9、建设须要的Java工具
#p#分页标题#e#
<!-- Create Java objects within CF --->
<cfset REQ=createObject("Java","javax.servlet.http. HttpServletRequest")>
<cfset SES=createObject("Java","javax.servlet.http.HttpSession")>
<cfset MAP=createObject("Java","java.util.Map")>
此刻,我们必需取得一个被传送到javax.servlet.http.HttpServletRequest工具中的java.servlet.http.HttpSession会话工具。 一旦这步完成,我们可以通过挪用会话的getAttribute要了解见会话工具,如列表10中所示。
列表10、于会见会话工具的Java要领
<!--- Get the HttpServletRequest --->
<cfset REQ = GetPageContext().getRequest()>
<!--- Get the HttpSession --->
<cfset SES = req.getSession()>
<!--- Get the CFMX session object (java.util.Map) --->
<cfset MAP = ses.getAttribute("CFMXSESSIONB")>
因为ColdFusion可以表明java.util.Map布局,我们可以通过利用尺度ColdFusion变量输出约定显示会话值,如列表11所示。
列表11、通过尺度ColdFusion约定会见值
<!--- Display Session Variables --->
<tr>
<td align="right" class="label" width="250">USERID</td>
<td width="300">#MAP.USERID#</td>
</td>
<tr>
<td align="right" class="label">USERNAME</td>
<td width="300">#MAP.USERNAME#</td>
</tr><tr>
<td align="right" class="label">ROLE:</td>
<td width="300">#MAP.ROLE#</td>
</tr><tr>
<td align="right" class="label">SESSION CREATED IN:</td>
<td width="300"><b>#MAP.SESSIONCREATEDBY#</b></td></tr>
示例应用措施
下载措施包(ftp://www6.software.ibm.com/software/developer/library/i-coldstudio.zip)包括一个用于J2EE的简朴的ColdFusion MX应用措施,利用ColdFusion Java组件之间共享的会话变量。 阅读readme.doc文件,取得完整的安装教程。
图4给你关于我们的应用措施的一瞥。 这里,我们已经乐成地在一个ColdFusion MX页面中取得Java会话数据。
图4示例应用措施
结论
已往,WebSphere Application Server和ColdFusion在J2EE方面的结归并不彻底。在本文中,我们先容了如安在ColdFusion和你的WebSphere J2EE软件产物中共享会话数据。这样共享的会话数据让你操作这两种技能的优势来名目化网络应用措施,而不粉碎IBM WebSphere Application Server的J2EE本领。