はじめまして。
前に質問したことがあるのですが、前回の続きです。
私は、今、WEBサーバプログラムをJavaでやろうとしています。
そこで、ServerSocket(nPort)を使い、ポート番号は80を指定して、サーバーソケットを作成しています。
ポートを開けることができたのですが、指定したフォルダにあるindex.htmlが見れません。
真っ白な画面のままで表示されないんです。
ログを見たところ、
Tue Mar 26 10:11:33 JST 2013127.0.0.1Failed/favicon.ico
Tue Mar 26 10:43:16 JST 20130:0:0:0:0:0:0:1Failed/blog/favicon.ico
Tue Mar 26 11:31:33 JST 2013127.0.0.1Failed/
Tue Mar 26 11:31:33 JST 2013127.0.0.1Failed/favicon.ico
Tue Mar 26 11:31:39 JST 2013127.0.0.1OK/index.html
Tue Mar 26 11:31:39 JST 2013127.0.0.1Failed/favicon.ico
となっています。index.htmlに行こうとするとログでは、
Tue Mar 26 11:31:39 JST 2013127.0.0.1OK/index.html
と出力されます。
ソースはhttp://www5c.biglobe.ne.jp/~ecb/java/java00.htmlにある、17.中間試験の回答例にあります。
ソース内のHTTPThread.javaのsendTargetメソッド内で何をやっているかはすごく気になります。
もし差し支えなければ、この処理を説明してもらえれば有難いです。
自分はWindowns7 64bit Eclipse 3.6を使用しています。
No.2ベストアンサー
- 回答日時:
#1です。
#1の3点はどうやら関係なさそうです。申し訳ないorz
あちらのソースを見ていて気になった点を1つ。
HTTPThread.javaのsendTargetメソッドで、
return true;
の前に、
bos.flush();
という一行を追加してみるとどうでしょうか?
bos.flush();を一行追加するとindex.htmlが表示されました!!
今まで行き詰っていたところが一気に解決しました!!
ありがとうございます。\(^ ^)/
でも、どうしてbos.flush();を追加すると表示されたのでしょう?
No.4
- 回答日時:
#1(=#2)です。
無事動いたようでよかったです。
WireSharkでパケットキャプチャする方法もありますが、
FireFoxをお使いならWebコンソールが便利です。
クライアント側の視点からではありますが、「パケット」を意識せずに通信内容を確認できます。
> どうしてbos.flush();を追加すると表示されたのでしょう?
当初の質問から外れてくるので、
本来は新しくトピックを立てた方がいいと思いますが、おまけで。
BufferedOutputStreamは名前の通り内部にバッファを持っており、
writeメソッドで書き込まれたデータは一旦バッファに溜め込まれます。
ですから、この時点では何も出力されていません。
バッファがいっぱいになるか、flushまたはcloseメソッドが呼ばれて初めて出力されます。
今手元に環境がないのでデストラクタでflushしてくれるかどうかは確認できませんが、
ガベージ・コレクションが行われないとfinalize処理が走らないため、
デストラクタ頼みにすることは避けるべきです。
No.3
- 回答日時:
>ついでで申し訳ないのですが、こういった場合のデバック方法
>としてはどのようにやるのが効果的でしょうか?
もう1台PCがあってLANで繋がっているならば…WireSharkでパケットキャプチャしながら実行する。
ってトコですかね。
気になるところっていうと…HTTPレスポンスヘッダにContents-Lengthヘッダとかないのかな?
とかでしょうかねぇ。
バッファのフラッシュに関しては#2で指摘がありますが…デストラクタで処理されるんじゃないですかねぇ……。
この回答への補足
>もう1台PCがあってLANで繋がっているならば…WireSharkでパケッ>>トキャプチャしながら実行する。
サーバーサイドプログラミングにはWireSharkは欠かせないんですね。
>もう1台PCがあってLANで繋がっているならば…WireSharkでパケットキャプチャしながら実行する。
HTTPレスポンスヘッダにContents-Lengthヘッダがあるかないか調べようと思います。
JVMだとデストラクタは内部で自動的に行っているんですよねぇ。
なのでどうなっているか分からないんですよ。
結果をみますとどうやらバッファをフラッシュしてくれる。ということは無さそうですね。
No.1
- 回答日時:
HTTP, HTMLの仕組みについてもう少し勉強しましょう。
そうすればsendTargetメソッドの処理もすぐわかります。
以下の3点と併せて考えてみてください。
(1)index.htmlを表示するだけなのに、favicon.icoに関するログが出ているのはなぜ?
(2)ほかのHTMLだと正常に表示される?(テキストのみの場合・テキスト+画像の場合)
(3)ソースから、OKのログ・Failedのログはどういうときに出る?
>HTTP, HTMLの仕組みについてもう少し勉強しましょう。
>そうすればsendTargetメソッドの処理もすぐわかります。
問題はここだけでしょうか?
正直、問題箇所自体絞れてなくて、当方は困り果てておりました。
(1)index.htmlを表示するだけなのに、favicon.icoに関するログが出ているのはなぜ?
A.favicon.icoがでていますね。どうやらアドレスに表示されるアイコンのようです。IEで開くとこれは要求されませんでした。
(2)ほかのHTMLだと正常に表示される?(テキストのみの場合・テキスト+画像の場合)
A.テキスト表示にしましたが、真っ白のままです。;;
ついでで申し訳ないのですが、こういった場合のデバック方法
としてはどのようにやるのが効果的でしょうか?
(3)ソースから、OKのログ・Failedのログはどういうときに出る?
A.アドレスを入れてEnterキー押下した時に表示されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- Excel(エクセル) エクセルでエラーを無視して一番左側のセルの値を返したい 2 2023/07/27 13:06
- Android(アンドロイド) スマホでWi-Fi使用時に、LINEから画像が送れなくなってしまいました。 1 2022/09/25 10:03
- オープンソース Vue+Laravelのデザインテンプレートのサンプルが起動できない 1 2022/05/18 21:52
- JavaScript [Java] Edgeでのアドレスバー非表示について 3 2022/04/20 17:51
- Ameba(アメーバブログ) アメブロは、HTMLのタグの入力を許さないブログ・サイトですか? 1 2023/06/18 18:48
- ホームページ作成・プログラミング アメーバ・ブログは"HTMLタグ"を許可してないのですか? 2 2023/06/17 21:08
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- オンラインゲーム とても急いでいます。Minecraft Java版についてです。 MinecraftのJava版でマ 1 2023/03/15 21:19
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
ExcelVBA Findメソッドで検索の...
-
mainメソッドのthrows節で設定...
-
DataGridViewでセルクリックイ...
-
JSPで<SELECT>の中にDBから持っ...
-
エクセルVBAにおけるON TIMEメ...
-
final修飾子を使っているのに、...
-
boolean型のフィールドとゲッタ...
-
c#でVBのcall的役割を果たすコ...
-
Application.Wait の参照設定
-
Labelコントロールに数字を代入...
-
VB.NETで色を比較するIF文を...
-
配列のメソッド
-
for文(拡張)内の変数(ローカ...
-
シンボルを解決できません。 ...
-
TimerTaskクラスのrun()メソッ...
-
サーブレットforward時の実行メ...
-
ArrayListのgetメソッドが実行...
-
エクリプス アウトラインビュ...
-
C# 2つのフォルダの相対パスを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAで、条件に一致する...
-
mainメソッドのthrows節で設定...
-
final修飾子を使っているのに、...
-
Labelコントロールに数字を代入...
-
onClickで関数呼出し後に、結果...
-
DataGridViewでセルクリックイ...
-
JSPで<SELECT>の中にDBから持っ...
-
コマンドプロンプト実行後に画...
-
Refreshメソッドの使い方
-
エクセルVBAにおけるON TIMEメ...
-
boolean型のフィールドとゲッタ...
-
javascriptからjavaを呼び出したい
-
VBPをダブルクリックするとたま...
-
配列のメソッド
-
【sendkeysメソッドが動かずに...
-
Excel VBA でExcelを終了したい...
-
VB.netで、シリアル通信のタイ...
-
worksheets & rows メソッドは...
-
Application.Wait の参照設定
-
(String args[])というメッソ...
おすすめ情報