Reputation: 1309
I am trying to connect to a Servlet with my j2me application and it's not happening.
Case 1:
1)Deploy the servlet on the local machine.
2)Connect to the servlet on the local machine with j2me app and wait for the servlet to return a a value
3)J2ME gets the value from the servlet and displays on the screen.
Works smooth!
Case 2:
1)Deploy the servlet on a remote machine.
2)Connect to the servlet on the remote machine with j2me app and wait for the servlet to return a a value
3)J2me gets an error saying empty response. Why?
Here is my code:
Case 1: MIDlet deployed on local machine
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();
Case 2: MIDlet deployed on remote machine
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();
What could be the issue?
I am able to call my remote servlet using my midlet. I wrote a sql to connect to a mysql DB and add a new row to the DB for every call the midlet makes to the remote servlet. And yes this works.
Now the issue is...why is the remote servlet not able to return values to my midlet. Why do I always get an empty response?
In case 2, I replaced the URL with the foll:
Now I feel that my servlet needs to print an xml string and not a normal http page. Please pour in...
I tried accessing a friends website using my j2me code. That is, I just replace the URL in case 2 with something like http://www.friend'sURL.in --> worked(got a response)
Then, I tried http://www.mywebsiteURL.in --> empty response
So, I feel there is something wrong with my server/webhosting... no idea.
On telmo's suggestion I looked into my server logs and they are as follows:
#Fields: date time 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
So I tried to analyze the logs and I was not quite successful in interpreting them. The only difference that I could make out between the browser request and midlet request is:
Browser request returns response -> 200 0 0 17863 318 2203
Midlet request returns response -> 200 0 0 0 196 453
The 4th number (SC Bytes -> Bytes Sent) in case of midlet request is 0. That's all that I could make out. Could anyone help?
UPDATE 5 1st june 2012 Friday 11.33 PM
1)I created a HTML file on my server and then tried accessing it with the midlet and I could access it.
2) Next, I created a PHP page and then tried accessing that with the midlet and I could access it.
3)Then i tried accessing a JSP page and got an empty response.
4) I tried accessing all the servlets deployed on my server and always got an empty response.
5) I tried to access some servlets on the internet but could not find any.
INFERENCE
There is something fishy with the way my servlet outputs the HTML page. I have posted that piece of code here. Please assist.
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)
{
}
I am not quite able to figure out whats wrong here. Its probably the manner in which my server renders my servlets/ JSP pages. No idea!
UPDATE 6 : 13th JUNE 2012
Can't waste more time on this. Work around posted in an answer below
Upvotes: 3
Views: 1185
Reputation: 1309
So after all that research this is what I did:
1) Pass parameters from MIDlet to a PHP page on my server.
2) Forward the parameters from PHP page to my SERVLET
3) PHP page collects the result of the SERVLET
4) MIDlet reads the result from the PHP page.
Ta Dang! works!
Upvotes: 1