Nikhil
Nikhil

Reputation: 1309

Issue in connecting to a servlet with midlet

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?

Update 1 : 12.01AM 5 may Sunday

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?

Update 2: 9.46 am 8 may Tuesday

In case 2, I replaced the URL with the foll:

  1. www.google.com --> got a response from google ..some xml string
  2. www.facebook.com --> got a response..which was actually a null pointer exception
  3. m.facebook.com--> got a response from facebook...some xml string
  4. www.yahoo.com ---> no response

Now I feel that my servlet needs to print an xml string and not a normal http page. Please pour in...

Update 3 8.41am 14 may Monday

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.

UPDATE 4 22 MAY 2012 TUESDAY

On telmo's suggestion I looked into my server logs and they are as follows:

1)Log Fields

#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

2)Requests from a browser using my desktop (2requests have been shown)

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)Requests from my midlet (emulator on my PC) (2 requests shown)

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

ANALYSIS OF THE LOGS

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

Answers (1)

Nikhil
Nikhil

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

Related Questions