阿迪.Java

我开始练习 从容地前进 优雅地转身 并保持冷静思考的模样

用户操作
[留言]  [发消息]  [加为好友] 
订阅我的博客
XML聚合    FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
adijava的公告
<!-- Blog日历表开始 --> <script language="javascript"> var diarydays="<2004-07-26><2004-07-25><2004-07-22><2004-07-21><2004-07-20><2004-07-19><2004-07-18><2004-07-16><2004-07-15><2004-07-14><2004-07-13><2004-07-12><2004-07-11><2004-07-10><2004-07-09><2004-07-08><2004-07-06><2004-07-05><2004-07-04><2004-07-03><2004-07-02><2004-07-01><2004-06-30><2004-06-27><2004-06-26>"; </script> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <style> .calendarBigBorder { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; text-decoration: none; width: 170; background-color: #FFFFFF; font-size: 9pt;border:1px dotted #999; } .calendarTd { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #000000; background-color: #eeeeee; height: 18px; width: 11%; text-align: center;} .calendarMInput { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; text-decoration: none; background-color: #FFFFFF; height: 15px; border: 1px solid #666666; width: 19px; color: #0099FF;} .calendarYInput { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #0099FF; text-decoration: none; background-color: #FFFFFF; height: 15px; width: 34px; border: 1px solid #666666;} .calendarMonthTitle { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; font-weight: normal; height: 24px; text-align: center; color: #333333; text-decoration: none; background-color: #eeeeee; border-top-width: 1px; border-right-width: 1px; border-bottom-width: 1px; border-left-width: 1px; border-bottom-style: none; border-top-color: #999999; border-right-color: #999999; border-bottom-color: #999999; border-left-color: #999999;} .calendarNow { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; font-weight: bold; color: #000000; background-color: #C0C9D3; height: 18px; text-align: center;} .calendarDaySat { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #333333; text-decoration: none; background-color: #eeeeee; text-align: center; height: 18px; width: 12%;} .calendarDaySun { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; color: #333333; text-decoration: none; background-color: #eeeeee; text-align: center; height: 18px; width: 12%;} .calendarLink { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; font-weight: normal; color: #333333; text-decoration: none; background-color: #E7E7F6; text-align: center; height: 18px;} .categoryTxt { font-family: "Arial", "Helvetica", "sans-serif", "宋体"; font-size: 9pt; line-height: 23px; color: #333333; text-decoration: none;} .categoryTable { border-right-width: 1px; border-bottom-width: 1px; border-right-style: solid; border-bottom-style: solid; border-left-style: none; border-right-color: #000000; border-bottom-color: #000000; border-top-width: 1px; border-top-style: solid; border-top-color: #71b99c;} </style> <SCRIPT LANGUAGE="JavaScript"> var months = new Array("一", "二", "三","四", "五", "六", "七", "八", "九","十", "十一", "十二"); var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30, 31); var days = new Array("日","一", "二", "三","四", "五", "六"); var classTemp; var calendarHover="calendarHover"; var today=new getToday(); var year=today.year; var month=today.month; var newCal; //得到某月天数 function getDays(month, year) { if (1 == month) return ((0 == year % 4) && (0 != (year % 100))) ||(0 == year % 400) ? 29 : 28; else return daysInMonth[month]; } //得到当天时间信息 function getToday() { this.now = new Date(); this.year = this.now.getFullYear(); this.month = this.now.getMonth(); this.day = this.now.getDate(); } //生成日历 function Calendar() { newCal = new Date(year,month,1); //当前月的第一天 today = new getToday(); var day = -1; //用来判断日历中是否为当天 var startDay = newCal.getDay(); //当月开始时间 var endDay=getDays(newCal.getMonth(), newCal.getFullYear());//当月结束时间 var daily = 0; //用来生成日历中的天数值 if ((today.year == newCal.getFullYear()) &&(today.month == newCal.getMonth())) day = today.day; var caltable = document.all.caltable.tBodies.calendar; //得到日历表格的集合 var intDaysInMonth =getDays(newCal.getMonth(), newCal.getFullYear()); //得到当月天数 //生成日历 for (var intWeek = 0; intWeek < caltable.rows.length;intWeek++) for (var intDay = 0;intDay < caltable.rows[intWeek].cells.length;intDay++) { var cell = caltable.rows[intWeek].cells[intDay]; //得到单元袼 //生成字符串用于判断当天是否有日志 var montemp=(newCal.getMonth()+1)<10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1); if ((intDay == startDay) && (0 == daily)){ daily = 1;} var daytemp=daily<10?("0"+daily):(daily); var d="<"+newCal.getFullYear()+"-"+montemp+"-"+daytemp+">"; //选择样式 if(day==daily) cell.className="calendarNow"; else if(diarydays.indexOf(d)!=-1) cell.className="calendarLink"; else if(intDay==6) cell.className = "calendarDaySat"; else if (intDay==0) cell.className ="calendarDaySun"; else cell.className="calendarTd"; //生成值 if ((daily > 0) && (daily <= intDaysInMonth)) { cell.innerText = daily; daily++; } else cell.innerText = ""; } document.all.year.value=year; document.all.month.value=month+1; } function subMonth() { if ((month-1)<0) { month=11; year=year-1; } else { month=month-1; } Calendar(); } function addMonth() { if((month+1)>11) { month=0; year=year+1; } else { month=month+1; } Calendar(); } //得到响应事件 function getDiary() { var mon=(newCal.getMonth()+1)<10?("0"+(newCal.getMonth()+1)):(newCal.getMonth()+1); var day=event.srcElement.innerText<10?("0"+event.srcElement.innerText):(event.srcElement.innerText); var d="<"+newCal.getFullYear()+"-"+mon+"-"+day+">"; if ("TD" == event.srcElement.tagName) if (("" != event.srcElement.innerText)&&(diarydays.indexOf(d)!=-1)) { diary.location="/chensheng913/archive/"+newCal.getFullYear()+"/"+mon+"/"+day+".aspx"; window.location.href = diary.location; } } function setDate() { if (document.all.month.value<1||document.all.month.value>12) { alert("月的有效范围在1-12之间!"); return; } year=Math.ceil(document.all.year.value); month=Math.ceil(document.all.month.value-1); Calendar(); } </SCRIPT> <table border="0" cellpadding="1" cellspacing="1" class="calendarBigBorder" id="caltable" width="200"> <thead> <tr align="center" valign="left"> <td colspan="7" class="calendarMonthTitle"> <input name="year" type="text" class="calendarYInput" size="3" maxlength="4" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" onpaste="this.value=this.value.replace(/[^0-9]/g,'')">年<input name="month" type="text" class="calendarMInput" size="1" maxlength="2" onkeydown="if (event.keyCode==13){setDate()}" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" onpaste="this.value=this.value.replace(/[^0-9]/g,'')">月<a onClick="addMonth()" href="javascript:;">下月</a><a onClick="subMonth()" href="javascript:;">上月</a></td></tr> <tr align="center" valign="middle"> <SCRIPT LANGUAGE="JavaScript"> document.write("<TD class=calendarDaySun id=diary>" + days[0] + "</TD>"); for (var intLoop = 1; intLoop < days.length-1; intLoop++) document.write("<TD class=calendarTd id=diary>" + days[intLoop] + "</TD>"); document.write("<TD class=calendarDaySat id=diary>" + days[intLoop] + "</TD>"); </SCRIPT> </TR> </thead> <TBODY border=1 cellspacing="0" cellpadding="0" ID="calendar" ALIGN=CENTER ONCLICK="getDiary()" onmouseup=document.selection.empty() oncontextmenu="return false" onselectstart="return false" ondragstart="return false" onbeforecopy="return false" oncopy=document.selection.empty() onselect=document.selection.empty()> <SCRIPT LANGUAGE="JavaScript"> for (var intWeeks = 0; intWeeks < 6; intWeeks++) { document.write("<TR style='cursor:hand'>"); for (var intDays = 0; intDays < days.length;intDays++) document.write("<TD class=calendarTd onMouseover='{classTemp=this.className;this.className=calendarHover}' onMouseOut='this.className=classTemp'></TD>"); document.write("</TR>"); } </SCRIPT> </tbody> </table> <script LANGUAGE="JavaScript"> Calendar(); </script> <!-- Blog日历表结束 --> <b>今日天气</b><br> <div align=left><iframe width=170 height=240 frameborder=0 scrolling=NO src="http://appnews.qq.com/cgi-bin/news_qq_search?city="南京"></iframe></div>
文章分类
Database
AskTom
eygle的个人站点
Fenng的个人站点
Itpub论坛-oracle
Oracle FAQS
Oracle中国用户讨论组
雪狼的个人站点
fashion
先锋网
新潮电子
时尚
Java
!Java的专栏
ibm.com-java专区
J道
LinuxAid技术支持中心
侯捷的Blog
我的第一个个人主页
王森的专栏
蔡学镛的专栏
键者天行
other links
BBS水木清华站
China Daily
donews
Msn Messenger 中文专业站
上海热线-下载
在线查询Unix命令
天涯虚拟社区
新浪-精品贴图
旺旺英语
猫扑
西祠胡同
Partial Blog
18摸
Dovebear的音乐杂记
Sunset House BLOG | 日落酒馆™
一亩三分地
北京女病人
将涛的Blog
比老榕年轻
竹笋炒肉
西园
WAP
KJava游戏联盟
Nokia中文论坛
SP联盟
wapforum-wap联盟
wap世界网
万易网
中国Java手机网
中国wap论坛
卓望科技
移动梦网-开发者园地
移动梦网-开发者园地
诺基亚开发论坛
wireless information
无线资讯网
Workflow
Workflow China
中国Java工作流
银狐
银狐999的工作流Blog
存档

原创  WAP手机下载服务流程图释说明 收藏

wap下载流程
图1-下载服务系统的逻辑结构

    内容服务器是为移动用户提供MIME内容的实体。下载服务器接收来自终端的下载请求,并管理从内容服务器到终端浏览器内容的传递。 内容服务器使用WAP Push业务装入(Service Loading)触发内容下载。下载服务器可以提供的功能如下:
    设备存储能力管理
    数据下载管理
    内容的异步传递

支持的下载业务包括铃声下载、图片下载、屏保下载、短视频下载等。此外,下载服务具备标准的OTA下载服务器功能,可用于Java/Brew系统的下载服务器。

典型的下载流程分为MS发起的下载和由网络发起的下载,由网络发起的下载具体如下:
下载服务流程
1) 内容服务器(Content Server)使用WAP PAP协议[WAP PAP]向为移动用户服务的Push Proxy(WAP网关)发送WAP Push SL[WAP SL]消息。当手机接收到SL通知消息时,在SL内容类型中有用户的中断指示。在Push SL消息中指示了下载应用(DF Server application)URL,具体说明请参见第4节。
2) Push Proxy解析MS地址,完成某些接入控制检查(如果要求的话),然后将Push SL内容类型传递给MS浏览器(X-WAP-Application-ID头指示了WML User Agent)。
3) WML用户浏览器执行SL内容,并且与Pull Proxy建立连接以便下载SL 内容类型中指明的MMC文档。
4) MS应使用预设的DF Server的URL代替proxy:download。在这一事件 ,如果DF Server地址未设置,但MS收到了包含proxy:download的消息,则MS浏览器应显示错误信息;WML用户浏览器对指定SL 内容类型URL执行WSP GET操作,Pull Proxy解析此URL并发向DF Server应用程序。
5) 在GET响应消息中,DF Server构造并发送包含OPEN操作(指示MS浏览器建立MMC会话)和READ操作(决定当前可用的存储量)的MMC文档。MMC文档的satus-uri属性(参见第5节)是与DF Server相关的资源。
6) DF Agent 根据前面的请求,对MMC状态文档执行POST操作。这个文档包含mmc-id属性的会话ID(由DF Agent产生)和以字节为单位的有效存储量。随后由DF Server发出的MMC文档就是指mmc-id属性标识的会话。
7) DF Server比较待下载对象大小和手机存储有效值。如果手机的有效存储量小于下载对象,则向内容服务器发"out of memory"STATUS消息(参考第4.3节),而向DF Agent发送DISCONNECT操作。跳过步骤8-12。
8) 如果手机有足够的存储量,DF Server构造并发送包含WRITE 和 COMMIT操作的MMC文档。然而,已下载对象不会提交到手机的永久存储中去,除非它已被成功地下载(参考5.2.4)。下载状态消息作为display.message参数的取值也包含在MMC文档。MMC文档(参见第5节)中的status-uri属性是与DF Server相关的资源。
9) DF Agent从MMC文档中的URL处下载fun对象。
10) DF Agent向DF Server报告MMC操作状态。
11) 如果WRITE(s)和COMMIT操作执行成功,则DF Server构造包含DISCONNECT操作的另一MMC文档并发送给DF Agent以结束本次MMC会话。MMC文档的status-uri属性要么是来自Content Server(内容服务器)的资源,要么是与DF Server相关的资源。DF Server记录本次交易。
12) DF Agent就MMC状态对status-uri属性所指的URL执行POST(S)操作,以便触发计费事件和(或者)返回下一个card到浏览器显示。
由MS发起的下载服务流程与由网络发起的下载服务流程相似,所不同的是,下载是当用户在Content Server中选中一项服务时,由Content Server返回的嵌入到内容中的URL触发。

发表于 @ 2004年08月20日 11:39:00 | 评论( loading... ) | 编辑| 举报| 收藏

旧一篇:[新闻纪实]两所乡村小学和一个支教者-转 | 新一篇:长沙印象

  • 发表评论
  • 评论内容:
  •  
Copyright © adijava
Powered by CSDN Blog