我正在尝试使用我的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();
可能是什么问题?
我可以使用我的midlet调用我的远程servlet。我编写了一个连接到mysql DB的sql,并为midlet对远程servlet的每次调用添加一个新行。是的,这是有效的。
现在的问题是......为什么远程servlet无法将值返回到我的midlet。为什么我总是得到一个空的回复?
在案例2中,我用以下内容替换了URL:
现在我觉得我的servlet需要打印一个xml字符串而不是普通的http页面。请倒入...
我尝试使用我的j2me代码访问朋友网站。也就是说,我只需用http://www.friend'sURL.in - >之类的内容替换案例2中的URL。工作(得到回应)
然后,我尝试http://www.mywebsiteURL.in - >空回应
所以,我觉得我的服务器/虚拟主机有问题......不知道。
关于telmo的建议我查看了我的服务器日志,它们如下:
#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
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
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日
不能浪费更多时间。在下面的答案中发布了解决方法
答案 0 :(得分:1)
因此,经过所有研究,这就是我所做的:
1)将参数从MIDlet传递到我服务器上的PHP页面。
2)将参数从PHP页面转发到我的SERVLET
3)PHP页面收集SERVLET的结果
4)MIDlet从PHP页面读取结果。
塔当!作品!