LMS scorm1.2 JAVA开发经历

来源:互联网 发布:农村淘宝吴集服务站 编辑:程序博客网 时间:2024/05/22 02:13
最近一直在看scorm资料,初步要求开发一个能够解析scorm1.2课件的LMS系统。 

经过近一个星期的努力,初步明了了如何实现“LMS”系统,现与大家一同分享,希望能给予帮助。 

一.首先弄清楚几个概念: 

asset(微单元/原始素材):学习资源的最基本形式是微单元。微单元是上传到网上并呈现给学习者的电子形式的媒体,如文本、图像、声音、评价对象或任何其他一块数据。几个微单元可以集合在一起建立新的微单元。 

SCO(可共享内容对象):是一个或者多个微单元的集合,它可以在SCORM运行环境中与学习管理系统(LMS)进行数据传递。可重用内容对象是LMS通过SCORM运行时间环境可以跟踪的最低粒度水平的学习资源。 

LMS(学习管理系统):能够解析scorm课件,跟踪学习体验者的学习记录的web系统。 



二.scorm课件交互过程 

1.下载SCORM运行时间环境(RTE)http://www.adlnet.gov/Technologies/scorm/SCORMSDocuments/Forms/AllItems.aspx?RootFolder=%2fTechnologies%2fscorm%2fSCORMSDocuments%2fPrevious%20Versions%2fSCORM%201%2e2%2fSRTE%20%28SCORM%201%2e2%29&FolderCTID=0x0120007F801FCD5325044C89D91240519482D7&View=%7b4D6DFFDE%2d3CFC%2d4DD9%2dA21A%2d4B687728824A%7d

解压安装到本地,如:D:\Sample_RTE_1_2_2 。 

2.按照网上SCORM RTE安装说明,启动D:\Sample_RTE_1_2_2目录中的Tomact,结果启动失败。 

3.无奈打开myeclipse工具,新建一个web工程,拷贝源码目录(D:\Sample_RTE_1_2_2\source)及web目录(D:\Sample_RTE_1_2_2\jakarta-tomcat\webapps\adl)中的资源文件。以为万事大吉,赶紧发布部署,不料登录系统,应用导入scorm1.2课件时后台解析xml异常。 

4.几番折腾发现缺了好几个jar包,既然缺那就就加上去呗,果然导入课件成功了。下来就是注册课件了,按页面提示操作,系统提示成功, 

可后台一堆错。 

5.还好哥用的是myeclipse,那咱就调试下,发现F:\SampleRTEFiles\tempUploads\C3D226C574868E6AC60457C8FE773508\imsmanifest.xml 文件不存在,只一个zip的文件,打开一看zip文件中包含上述文件,抱着一试的心理将压缩文件解压到当前目录,嘿,成功了! 

6.本以为这下大功告成了,可点击显示课程连接时,点击进入课件,页面正常跳转,没过一会猛抛“Unable to find an API adapter”异常 

7.查看异常出处:异常来自:APIWrapper.js/getAPI函数。在网上搜了些资料如下图: 



认为API实例是LMS系统中的一个java类对象实例,可怎么想也不知道js怎么可以调用java对象实例呢。直到发现RTE代码中的APIAdapterApplet类,才恍然明白,是通过applet形式交互的。其实上图“API实例”是指LMS系统页面中的js自定义对象。 

8.新建一个jsp页面,内容如下: 

Java代码  收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <html>  
  3.  <head>  
  4.   <script type="text/javascript">  
  5.     window.API = new Object();  
  6.     API.name = "hero";  
  7.     API.LMSInitialize=function(param){  
  8.      return window.document.APIAdapterApplet.LMSInitialize(param);  
  9.   };  
  10.   API.LMSFinish=function(param){  
  11.    return window.document.APIAdapterApplet.LMSInitialize(param);  
  12.   };  
  13.   API.LMSGetValue=function(element){  
  14.    return window.document.APIAdapterApplet.LMSGetValue(element);  
  15.   };  
  16.   API.LMSSetValue=function(element,value){  
  17.    return window.document.APIAdapterApplet.LMSSetValue(element,value);  
  18.   };  
  19.   API.LMSCommit=function(param){  
  20.    return window.document.APIAdapterApplet.LMSCommit(param);  
  21.   };  
  22.   API.LMSGetLastError=function(){  
  23.    return window.document.APIAdapterApplet.LMSGetLastError();  
  24.   };  
  25.   API.LMSGetErrorString=function(errorCode){  
  26.    return window.document.APIAdapterApplet.LMSGetErrorString(errorCode);  
  27.   };  
  28.   API.LMSGetDiagnostic=function(errorCode){  
  29.    return window.document.APIAdapterApplet.LMSGetDiagnostic(errorCode);  
  30.   };  
  31.    </script>  
  32.  </head>  
  33.   
  34.  <body>  
  35.   
  36.     
  37.   <applet code="org/adl/samplerte/client/APIAdapterApplet.class" codebase="plugin/" name="APIAdapterApplet"  width="550" height="100"></applet>  
  38.   <iframe src="viewCourses.jsp" width="900" height="600"></iframe>  
  39.  </body>  
  40. </html>  

浏览器中访问该页面,点击进入课件学习,控制台有日志信息输出


http://gavin2232.iteye.com/blog/1041633


0 0