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 を次のように置き換えました。
- www.google.com --> google から応答がありました..xml 文字列
- www.facebook.com --> 応答がありました..これは実際には null ポインター例外でした
- m.facebook.com--> facebook から応答を受け取りました...いくつかの xml 文字列
- 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 日
これ以上時間を無駄にすることはできません。以下の回答に投稿された回避策