使用midlet连接到servlet的问题

时间:2012-05-03 17:47:15

标签: servlets java-me lwuit midp

我正在尝试使用我的j2me应用程序连接到Servlet,但它没有发生。

案例1:

1)在本地计算机上部署servlet。

2)使用j2me app连接到本地计算机上的servlet,并等待servlet返回一个值

3)J2ME从servlet获取值并显示在屏幕上。

工作顺利!

案例2:

1)在远程计算机上部署servlet。

2)使用j2me app连接到远程计算机上的servlet,并等待servlet返回一个值

3)J2me收到错误,说明空响应。为什么呢?

这是我的代码:

案例1:在本地计算机上部署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:星期日12.01AM 5星期日

我可以使用我的midlet调用我的远程servlet。我编写了一个连接到mysql DB的sql,并为midlet对远程servlet的每次调用添加一个新行。是的,这是有效的。

现在的问题是......为什么远程servlet无法将值返回到我的midlet。为什么我总是得到一个空的回复?

更新2:星期二上午9点24分

在案例2中,我用以下内容替换了URL:

  1. www.google.com - >得到了谷歌的回复..some xml string
  2. www.facebook.com - >得到了一个回复......实际上是一个空指针异常
  3. m.facebook.com - >得到了来自facebook的回复...一些xml字符串
  4. www.yahoo.com --->没有回应
  5. 现在我觉得我的servlet需要打印一个xml字符串而不是普通的http页面。请倒入...

    更新3星期一上午8点14分14点

    我尝试使用我的j2me代码访问朋友网站。也就是说,我只需用http://www.friend'sURL.in - >之类的内容替换案例2中的URL。工作(得到回应)

    然后,我尝试http://www.mywebsiteURL.in - >空回应

    所以,我觉得我的服务器/虚拟主机有问题......不知道。

    更新4 2012年5月22日星期二

    关于telmo的建议我查看了我的服务器日志,它们如下:

    1)记录字段

    #Fields:日期时间s-sitename s-computername s-ip cs-method cs-uri-stem cs-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字节 - >发送的字节数)为0.这就是我能做出的全部。有人可以帮忙吗?

    更新5 2012年6月1日星期五11.33 PM

    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)
            {
    
    
    
            }
    

    我不太清楚这里的错误。它可能是我的服务器呈现我的servlets / JSP页面的方式。不知道!

    更新时间:2012年6月13日

    不能浪费更多时间。在下面的答案中发布了解决方法

1 个答案:

答案 0 :(得分:1)

因此,经过所有研究,这就是我所做的:

1)将参数从MIDlet传递到我服务器上的PHP页面。

2)将参数从PHP页面转发到我的SERVLET

3)PHP页面收集SERVLET的结果

4)MIDlet从PHP页面读取结果。

塔当!作品!