3

j2me アプリケーションでサーブレットに接続しようとしていますが、接続できません。

ケース 1:

1) サーブレットをローカル マシンにデプロイします。

2) j2me アプリを使用してローカル マシン上のサーブレットに接続し、サーブレットが aa 値を返すのを待ちます。

3) J2ME はサーブレットから値を取得し、画面に表示します。

動作スムーズ!

ケース 2:

1) サーブレットをリモート マシンにデプロイします。

2) j2me アプリを使用してリモート マシン上のサーブレットに接続し、サーブレットが aa 値を返すのを待ちます。

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 : 5 月 5 日 12.01AM

midlet を使用してリモート サーブレットを呼び出すことができます。mysql DB に接続し、midlet がリモート サーブレットに対して行うすべての呼び出しに対して新しい行を DB に追加する SQL を作成しました。はい、これは機能します。

問題は、なぜリモート サーブレットが値を midlet に返せないのかということです。いつも空の応答が返されるのはなぜですか?

更新 2: 5 月 8 日火曜日の午前 9 時 46 分

ケース 2 では、URL を次のように置き換えました。

  1. www.google.com --> google から応答がありました..xml 文字列
  2. www.facebook.com --> 応答がありました..これは実際には null ポインター例外でした
  3. m.facebook.com--> facebook から応答を受け取りました...いくつかの xml 文字列
  4. www.yahoo.com ---> 応答なし

現在、サーブレットは通常の http ページではなく、xml 文字列を出力する必要があると感じています。注ぎ込んでください...

アップデート 3 5 月 14 日午前 8 時 41 分

j2me コードを使用して友人の Web サイトにアクセスしようとしました。つまり、ケース 2 の URL をhttp://www.friend 'sURL.in のようなものに置き換えるだけです --> 動作しました (応答がありました)

次に、 http://www.mywebsiteURL.in --> 空の応答を試しました

だから、サーバー/ウェブホスティングに何か問題があると感じています...わかりません。

更新 4 2012 年 5 月 22 日火曜日

telmo の提案で、サーバー ログを調べたところ、次のようになりました。

1)ログフィールド

#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) デスクトップを使用したブラウザからのリクエスト (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) サーバーにデプロイされたすべてのサーブレットにアクセスしようとしましたが、常に空の応答が返されました。

5) インターネット上のいくつかのサーブレットにアクセスしようとしましたが、何も見つかりませんでした。

推論

私のサーブレットが 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)
        {



        }

ここで何が問題なのか、よくわかりません。おそらく、サーバーがサーブレット/ JSP ページをレンダリングする方法です。わからない!

更新 6 : 2012 年 6 月 13 日

これ以上時間を無駄にすることはできません。以下の回答に投稿された回避策

4

1 に答える 1

1

それで、すべての調査の後、これが私がしたことです:

1) MIDlet からサーバー上の PHP ページにパラメーターを渡します。

2)PHPページからSERVLETにパラメーターを転送します

3) PHP ページが SERVLET の結果を収集します。

4) MIDlet が PHP ページから結果を読み取ります。

タダン!動作します!

于 2012-06-13T12:13:30.927 に答える