我正在尝试使用我的 j2me 应用程序连接到 Servlet,但它没有发生。
情况1:
1)在本地机器上部署servlet。
2)用j2me app连接本地机器上的servlet,等待servlet返回aa值
3)J2ME 从servlet 获取值并显示在屏幕上。
工作顺利!
案例二:
1) 在远程机器上部署 servlet。
2)用j2me app连接到远程机器上的servlet,等待servlet返回aa值
3)J2me 得到一个错误,说空响应。为什么?
这是我的代码:
案例一:MIDlet 部署在本地机器上
HttpConnection c = (HttpConnection) Connector.open("http://localhost:8999/PercentileCalculator/PercentileCalculator");
c.setRequestProperty("User-Agent","Profile/MIDP-2.0, Configuration/CLDC-1.1");
c.setRequestProperty("Content-Language","en-US");
c.setRequestMethod(HttpConnection.POST);
DataOutputStream os = (DataOutputStream)c.openDataOutputStream();
os.writeUTF("100");
os.writeUTF("Test 1");
os.writeByte(12);
os.flush();
os.close();
// Get the response from the servlet page.
DataInputStream is =(DataInputStream)c.openDataInputStream();
案例 2:MIDlet 部署在远程机器上
HttpConnection c = (HttpConnection) Connector.open("Url goes here");
c.setRequestProperty("User-Agent","Profile/MIDP-2.0, Configuration/CLDC-1.1");
c.setRequestProperty("Content-Language","en-US");
c.setRequestMethod(HttpConnection.POST);
DataOutputStream os = (DataOutputStream)c.openDataOutputStream();
os.writeUTF("100");
os.writeUTF("Test1");
os.writeByte(12);
os.flush(); -->Exception thrown here.
os.close();
// Get the response from the servlet page.
DataInputStream is =(DataInputStream)c.openDataInputStream();
可能是什么问题?
更新 1:5 月 5 日星期日 12.01AM
我可以使用我的 midlet 调用我的远程 servlet。我编写了一个 sql 来连接到 mysql 数据库,并为 midlet 对远程 servlet 的每次调用添加一个新行。是的,这行得通。
现在的问题是......为什么远程 servlet 无法将值返回到我的 midlet。为什么我总是得到一个空的响应?
更新 2:5 月 8 日星期二上午 9.46
在案例 2 中,我将 URL 替换为以下内容:
- www.google.com --> 得到了来自 google 的响应 ..some xml 字符串
- www.facebook.com --> 得到响应..这实际上是一个空指针异常
- m.facebook.com--> 得到来自 facebook 的响应...一些 xml 字符串
- www.yahoo.com ---> 没有回应
现在我觉得我的servlet 需要打印一个xml 字符串而不是一个普通的http 页面。请倒入...
更新 3 8.41am 5 月 14 日星期一
我尝试使用我的 j2me 代码访问朋友网站。也就是说,我只是将案例 2 中的 URL 替换为http://www.friend 'sURL.in --> working(got a response)
然后,我尝试了http://www.mywebsiteURL.in --> 空响应
所以,我觉得我的服务器/虚拟主机有问题……不知道。
更新 4 2012 年 5 月 22 日星期二
根据 telmo 的建议,我查看了我的服务器日志,它们如下:
1)日志字段
#Fields: date time s-sitename s-computername s-ip cs-method cs-uri-stem c-uri-query s-port cs-username c-ip cs-version cs(User-Agent) cs(Cookie) cs (Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2)使用我的桌面来自浏览器的请求(已显示 2 个请求)
2012-05-21 04:39:06 W3SVC6826 BJJI-GLOBEDNS 67.227.164.68 GET /Servlet/PercentileCalculator - 80 - 116.203.33.229 HTTP/1.1 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/536.5+(KHTML,+like+Gecko)+Chrome/19.0.1084.46+Safari/536.5 - - n10k.in 200 0 0 485 395 421
2012-05-21 04:39:08 W3SVC6826 BJJI-GLOBEDNS 67.227.164.68 GET /favicon.ico - 80 - 116.203.33.229 HTTP/1.1 Mozilla/5.0+(Windows+NT+6.1;+WOW64)+AppleWebKit/536.5+(KHTML,+like+Gecko)+Chrome/19.0.1084.46+Safari/536.5 - - n10k.in 200 0 0 17863 318 2203
3)来自我的 midlet(我的 PC 上的模拟器)的请求(显示了 2 个请求)
2012-05-21 04:43:17 W3SVC6826 BJJI-GLOBEDNS 67.227.164.68 POST /Servlet/PercentileCalculator - 80 - 116.203.33.229 HTTP/1.1 Profile/MIDP-1.0,+Configuration/CLDC-1.0 - - n10k.in 200 0 0 0 196 468
2012-05-21 04:43:25 W3SVC6826 BJJI-GLOBEDNS 67.227.164.68 POST /Servlet/PercentileCalculator - 80 - 116.203.33.229 HTTP/1.1 Profile/MIDP-1.0,+Configuration/CLDC-1.0 - - n10k.in 200 0 0 0 196 453
日志分析
因此,我尝试分析日志,但未能成功解释它们。我可以在浏览器请求和 midlet 请求之间做出的唯一区别是:
浏览器请求返回响应-> 200 0 0 17863 318 2203
Midlet 请求返回响应-> 200 0 0 0 196 453
在 midlet 请求的情况下,第 4 个数字(SC Bytes -> Bytes Sent)是 0。这就是我能做的全部。有人可以帮忙吗?
更新 5 2012 年 6 月 1 日星期五晚上 11 点 33 分
1)我在我的服务器上创建了一个 HTML 文件,然后尝试使用 midlet 访问它,我可以访问它。
2)接下来,我创建了一个 PHP 页面,然后尝试使用 midlet 访问它,我可以访问它。
3)然后我尝试访问一个 JSP 页面并得到一个空响应。
4) 我尝试访问部署在我的服务器上的所有 servlet,但总是得到一个空响应。
5) 我试图访问互联网上的一些 servlet,但找不到任何。
推理
我的 servlet 输出 HTML 页面的方式有些可疑。我已经在这里发布了那段代码。请协助。
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try{
response.setContentType("text/html");
reply = response.getWriter();
reply.println("<html><head><meta http-equiv=\"Content-Type\" content=\"text/html\"><title>Nikhil D</title></head><body>hmmm</body></html>");
reply.close();
reply.flush();
}
catch(Exception e)
{
}
我不太能弄清楚这里出了什么问题。它可能是我的服务器呈现我的 servlet/JSP 页面的方式。不知道!
更新 6:2012 年 6 月 13 日
不能在这上面浪费更多时间。解决方法发布在下面的答案中