使用 OTA 方式从 APACHE 服务器下载 MIDlet 失败

leedan 2004-08-09 01:51:03
提示“the connection dropped”,具体细节请参阅图片:

http://alumni.5istudy.net/midp/1.gif
http://alumni.5istudy.net/midp/2.gif


用的服务器是 TOMCAT 5.0,MIME 配置已经加入 JAD 和 JAR,路径也正确,
http://alumni.5istudy.net/midp/3.gif

可以以WEB方式下载JAR文件。这怎么回事啊?
...全文
151 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
leedan 2004-08-10
  • 打赏
  • 举报
回复
呵呵,莫名其妙,想不到居然可以在sumsang的wtk里 OTA 下载,faint~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`


谢谢 宇凡 :)谢谢
yufanzx 2004-08-10
  • 打赏
  • 举报
回复
如果你的OTA并没有按照这样的格式去响应请求,也完全有可能导致connection dropped...毕竟你使用的仿真是SUN提供的...虽然那只是个建议标准...但是没准他自己的仿真上就不仅仅是建议而是严格要求的了... >_<
yufanzx 2004-08-10
  • 打赏
  • 举报
回复
我们公司的使用的MIDP仿真是自主开发的(这块我只参与了界面移植,不过网络部分的代码我能看到),OTA是我做的...环境是Resin-2.1.3,开发模型是Struts/Hibernate/hSQL/Java。其中响应下载请求的Action类的关键代码如下,你可以做个参考:

String jarPath = midelt_manager.getJarPath(jadName);
ServletContext ctx = servlet.getServletConfig().getServletContext();
String mimeType = ctx.getMimeType(jadName);

JadProperties props = midelt_manager.getProps(jadName);

props.setProperty(MidletManagerImpl.MIDLET_JAR_URL, RequestUtils.absoluteURL(request, jarPath).toString());

ByteArrayOutputStream baos = new ByteArrayOutputStream();
props.storeWithEncoding(baos, null);

// OTA Provisioning: default encoding is UTF8
response.setContentType(mimeType + "; charset=utf-8");
response.setHeader("Content-Length", new Integer(baos.size()).toString());
response.setStatus(response.SC_OK);
OutputStream outs = response.getOutputStream();
baos.writeTo(outs);



其中你可以看到有两点可能跟你的不同:
1. jar地址我是动态写入的,换句话说,不管你jad里记录的是什么,我在响应请求的时候都会根据Servlet的内容重写这个属性值。实际上在jad属性里很多涉及到路径的属性我在响应前都是重写了的,例如属性:MIDlet-Install-Notify
2. 我在响应前指明了编码格式是UTF-8,这是必须的一步,如果不这样会有很多奇怪的问题发生,在我们这里至少表现为很多类型的手机完全不认识下载下来的是什么东西...不然就是一运行就出错..但是从来没有不可以下载过..

最后我觉得有可能引起你的这个错误的原因是:
SUN提出了一个OTA建议标准,在这个标准中,严格定义了一个应用从被发现到安装然后安装状态报告的送回,这样一个过程中每一步的请求与响应的标准:

【请求下载应用描述文件】
HTTP请求如下所示:
GET http://midp.yourdomain.com/app-dir/game.jad HTTP/1.1
Host: midp.yourdomain.com
Accept: text/vnd.sun.j2me.app-descriptor
User-Agent: MyMIDP/1.2 Profile/MIDP-1.0 Configuration/
CLDC-1.0
Accept-Language: en-US, zh-CN
Accept-Charset: utf-8

响应如下所示(不含正文):
HTTP/1.1 200 OK
Server: MyOTA 1.0
Set-Cookie:Name=”abc”;Domain=”.yourdomain.com”;Path=”/app-dir”;
JSESSIONID=”123”; VERSION=”1”
Content-Length: 2345
Content-Type: text/vnd.sun.j2me.app-descriptor; charset=utf-8

【请求下载MIDLet包】
HTTP请求如下所示:
GET http://midp.yourdomain.com/app-dir/game.jar HTTP/1.1
Host: midp.yourdomain.com
Cookie: Name=”abc”; Domain=”.yourdomain.com”; Path=”/
app-dir”; JSESSIONID=”123”; VERSION=”1”
Accept: application/java, application/java-archive

响应如下所示(不含正文):
HTTP/1.1 200 OK
Server: MyOTA 1.0
Content-Length: 25432
Content-Type: application/java-archive
Cookie: Name=”abc”; Domain=”.yourdomain.com”; Path=”/app-dir”; \
JSESSIONID=”123”; VERSION=”1”

yufanzx 2004-08-10
  • 打赏
  • 举报
回复
你帖出来的这些部分都是没有问题的...问题不出在这些地方...我也没有遇见过你说的这个错误...我们公司MIDP设备和OTA服务器都是自主开发的...报了错可以查看源代码很容易的发现是什么问题...

所以你现在可能需要去查查你那个MIDP设备的模拟器文档,看看文档中有没有说明引起这个错误会是些什么原因?

此外,这个错误是不是你一确认下载就立刻报出的?我感觉还是你们的OTA服务器的代码可能有什么地方没处理对。OTA是你们开发的吗?响应下载请求这部分的代码可不可以看到?
leedan 2004-08-10
  • 打赏
  • 举报
回复
错误信息抓图:

http://alumni.5istudy.net/midp/5.gif
leedan 2004-08-10
  • 打赏
  • 举报
回复
对了,我用的是SUN 公司的MIDP2.0程序,直接在COMMAND LINE下运行 MIDP 命令,然后显示的模拟器中运行的。
leedan 2004-08-10
  • 打赏
  • 举报
回复
1.
我的下载URL是:http://127.0.0.1/midp/1.htm

1.htm 内容:
***************************************
<html>
<head><title>The Hello MIDlet</title></head>
<body>
<a href="http://127.0.0.1/midp/demos.jad">demos<a> <br>
<a href="http://127.0.0.1/midp/auction.jad">auction<a> <br>
<a href="http://127.0.0.1/midp/games.jad">game<a> <br>

</body>
</html>
*************************************
2. games.jad 内容:
*********************************
MIDlet-Name: SunSamples - Games
MIDlet-Version: 2.0
MIDlet-Vendor: Sun Microsystems, Inc.
MIDlet-Description: Sample suite of games for the MIDP.
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.0
MIDlet-1: TilePuzzle, /icons/TilePuzzle.png, example.tilepuzzle.TilePuzzle
MIDlet-2: WormGame, /icons/App.png, example.wormgame.WormMain
MIDlet-Jar-URL: http://127.0.0.1/midp/games.jar
MIDlet-Jar-Size: 28233
*****************************************************************
3. MIME 配置:
TOMCAT 目录下的conf/web.xml:
<mime-mapping>
<extension>jad</extension>
<mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jar</extension>
<mime-type>application/java-archive</mime-type>
</mime-mapping>
******************************************************


应该就这些信息了吧?那个jar文件可以用RAR打开。
yufanzx(宇凡)还在嘛?
yufanzx 2004-08-10
  • 打赏
  • 举报
回复
那估计就是我说的那个“建议标准”的原因了 >_<
yufanzx 2004-08-09
  • 打赏
  • 举报
回复
我说几个可能会引起错误的地方:

1.下载连接应该指向jad文件而不是jar文件

2.jad文件的mime类型必须为:text/vnd.sun.j2me.app-descriptor(不过看你的MIDP设备上既然能解析出各个属性,应该是正确的)

3.在OTA响应请求时必须显式的指明采用UTF-8格式
String mimeType = ctx.getMimeType(jadName);
// OTA Provisioning: default encoding is UTF8
response.setContentType(mimeType + "; charset=utf-8");
yufanzx 2004-08-09
  • 打赏
  • 举报
回复
贴你的DownloadAction.java代码出来看看
leedan 2004-08-09
  • 打赏
  • 举报
回复
没有知道阿?
prok 2004-08-09
  • 打赏
  • 举报
回复
mark

13,100

社区成员

发帖
与我相关
我的任务
社区描述
Java J2ME
社区管理员
  • J2ME社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧