LMS scorm1.2 JAVA开发经历

最近一直在看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页面,内容如下:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
 <head>
  <script type="text/javascript">
    window.API = new Object();
    API.name = "hero";
    API.LMSInitialize=function(param){
     return window.document.APIAdapterApplet.LMSInitialize(param);
  };
  API.LMSFinish=function(param){
   return window.document.APIAdapterApplet.LMSInitialize(param);
  };
  API.LMSGetValue=function(element){
   return window.document.APIAdapterApplet.LMSGetValue(element);
  };
  API.LMSSetValue=function(element,value){
   return window.document.APIAdapterApplet.LMSSetValue(element,value);
  };
  API.LMSCommit=function(param){
   return window.document.APIAdapterApplet.LMSCommit(param);
  };
  API.LMSGetLastError=function(){
   return window.document.APIAdapterApplet.LMSGetLastError();
  };
  API.LMSGetErrorString=function(errorCode){
   return window.document.APIAdapterApplet.LMSGetErrorString(errorCode);
  };
  API.LMSGetDiagnostic=function(errorCode){
   return window.document.APIAdapterApplet.LMSGetDiagnostic(errorCode);
  };
   </script>
 </head>

 <body>

  
  <applet code="org/adl/samplerte/client/APIAdapterApplet.class" codebase="plugin/" name="APIAdapterApplet"  width="550" height="100"></applet>
  <iframe src="viewCourses.jsp" width="900" height="600"></iframe>
 </body>
</html>

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

猜你喜欢

转载自gavin2232.iteye.com/blog/1041633